2014-08-28 70 views
2

我目前正在编写一个程序,将便士转换为正确数量的二十,几十,五,美元,宿舍,硬币,镍和便士。我已经得到了程序的第一部分正确,但一旦我得到美元,我的数学不输出正确的金额。任何帮助?硬币数学转换问题

import java.util.Scanner; 

public class assignment1 { 

public static void main(String[] args) { 
    Scanner inputReader = new Scanner(System.in); 

    int num, remainder; 

    System.out.print("Enter a value as a number of pennies: "); 
    num = inputReader.nextInt(); 

    remainder = num % 2000; 

    System.out.println(num + " pennies is equal to:"); 
    System.out.println((num/2000) + " twenties"); 
    System.out.println((remainder/1000) + " tens"); 
    System.out.println(((remainder % 1000)/500) + " fives"); 
    System.out.println((((remainder % 1000) % 500)/100) + " dollars"); 
    System.out.println(((((remainder % 1000) % 500) % 100)/25) + " quarters"); 
    System.out.println(((((remainder % 1000) % 500) % 100) % 25)/10 + " dimes"); 
    System.out.println((((((remainder % 1000) % 500) % 100) % 25) % 10)/5 + " nickels"); 
    System.out.println(((((((remainder % 1000) % 500) % 100) % 25) % 10) % 5)/1 + " pennies"); 

} 
} 
+0

http://stackoverflow.com/questions/25437580/how-to-determine-the-smallest-number-of-coins-given-a-number-of-cents/25437710#25437710 – jdphenix 2014-08-28 02:06:01

+0

该页面并不完全有帮助,因为我知道如何编码各个部分,但我很想知道在这个特定设置中,我的数学逻辑有什么问题。感谢您的评论! – KangarooRIOT 2014-08-28 02:08:38

+0

你的逻辑有什么问题就是你想用数学运算符来完成控制结构的工作 - 澄清问题:你的任务是否要求你只使用数学运算符来完成这个任务? – jdphenix 2014-08-28 02:10:37

回答

2

好的。我明白你所做的。我们从

System.out.println((num/2000) + "twenties"); 
System.out.println((remainder/1000) + "tens"); 
System.out.println((remainder/1000) % 500 + "fives"); 
System.out.println((((remainder/1000) % 500) % 100) + "dollars"); 

第一行是正确的。但是你不能用一个简单的余数来保持运行。另外,numremainder是可怕的变量名称。您可以为流水账做这样的事情,

System.out.print("Enter a value as a number of pennies: "); 
int pennies = inputReader.nextInt(); 
System.out.println(pennies + " pennies is equal to:"); 
int twenties = pennies/2000; 
pennies -= twenties * 2000; 
int tens = pennies/1000; 
pennies -= tens * 1000; 
int fives = pennies/500; 
pennies -= fives * 500; 
int dollars = pennies/100; 
pennies -= dollars * 100; 
int quarters = pennies/25; 
pennies -= quarters * 25; 
int dimes = pennies/10; 
pennies -= dimes * 10; 
int nickels = pennies/5; 
pennies -= nickels * 5; 
System.out.printf("%d twenties, %d tens, %d fives, %d dollars, " 
     + "%d quarters, %d dimes, %d nickels, %d pennies%n", twenties, 
     tens, fives, dollars, quarters, dimes, nickels, pennies); 

这将输出(以5869为输入),

5869 pennies is equal to: 
2 twenties, 1 tens, 1 fives, 3 dollars, 2 quarters, 1 dimes, 1 nickels, 4 pennies 

或者(如果你想要一个非流水账),只是删除从便士减法像

System.out.println(pennies + " pennies is equal to:"); 
int twenties = pennies/2000; 
int tens = pennies/1000; 
int fives = pennies/500; 
int dollars = pennies/100; 
int quarters = pennies/25; 
int dimes = pennies/10; 
int nickels = pennies/5; 
System.out.printf("%d twenties, %d tens, %d fives, %d dollars, " 
     + "%d quarters, %d dimes, %d nickels, %d pennies%n", twenties, 
     tens, fives, dollars, quarters, dimes, nickels, pennies); 

而对于5869你

5869 pennies is equal to: 
2 twenties, 5 tens, 11 fives, 58 dollars, 234 quarters, 586 dimes, 1173 nickels, 5869 pennies 
+0

正确!在你发布这个消息之前的几分钟,我想到了这个问题 - 我已经在这个页面上修改了我的源代码,谢谢你! – KangarooRIOT 2014-08-28 02:38:05

2

这是可能的只有数学运算符。在大多数其他编程任务中,您应该使用控制结构来完成算法中的步骤。

过程

  1. 开始与便士的数目,
  2. 除以2000($ 20帐单的值),并分配给一个新的变量,从数
  3. 减二十美分的价值,
  4. 重复以后的面额($ 10票据,$ 5票据等)
0

我认为问题在于,每当你划分你的号码时,它就会返回一个新的整数。所以,如果你将100便士分为1000,它将返回0,所以无论你做什么,你的数学的其余部分都将返回0。

例如基于代码:

//assuming the input is 100 pennies the first remainder/1000 will equal to 0 
System.out.println(((((((remainder/1000) % 500) % 100) % 25) % 10) %5) % 1 + "pennies"); 

您还没有指定,你必须使用模数,所以我假设你不是。 这里就是我会做:

System.out.println(num + " pennies is equal to:"); 
System.out.println((num/2000) + "twenties"); 
System.out.println((num/1000) + "tens"); 
System.out.println((num/500) + "fives"); 
System.out.println((num/100) + "dollars"); 
System.out.println((num/25) + "quarters"); 
System.out.println((num/10) + "dimes"); 
System.out.println((num/5) + "nickels"); 
System.out.println(num + "pennies");