Java 当用户输入0时,如何请求多个输入并停止?
我的程序应该收到大量的钱,并将其转换为零钱,但当它收到Java 当用户输入0时,如何请求多个输入并停止?,java,loops,input,Java,Loops,Input,我的程序应该收到大量的钱,并将其转换为零钱,但当它收到0时,它应该停止请求输入并停止程序 我的数学都算对了,我只是在重复询问数字时遇到了问题。以下是我目前的情况: public class Coins { public static int quarters; public static int dimes; public static int nickels; public static int pennies; public static int Quarters(int
0
时,它应该停止请求输入并停止程序
我的数学都算对了,我只是在重复询问数字时遇到了问题。以下是我目前的情况:
public class Coins {
public static int quarters;
public static int dimes;
public static int nickels;
public static int pennies;
public static int Quarters(int TotalCoins) {
quarters = (int) (TotalCoins / 25);
TotalCoins %= 25;
return quarters;
}
public static int Dimes(int TotalCoins){
TotalCoins -= (quarters * 25);
dimes = (int) (TotalCoins / 10);
TotalCoins %= 10;
return dimes;
}
public static int Nickels(int TotalCoins){
TotalCoins -= (dimes * 10) + (quarters * 25);
nickels = (int) (TotalCoins / 5);
TotalCoins %= 5;
return nickels;
}
public static int Pennies(int TotalCoins){
TotalCoins -= (nickels * 5 ) + (dimes * 10 ) + (quarters * 25);
pennies = (int) (TotalCoins / 1);
TotalCoins %= 1;
return pennies;
}
}
这是我的tester类(我很确定我的主要问题是):
任何帮助都会很好
编辑:有人告诉我,在一节课上完成整件事可能更容易,如果是这样的话,任何这样做的建议都会很好。谢谢你编辑:我忘了提到我应该能够输入所有数字,然后显示所有数字的输出 把它改成这样
int changeMoney=0;
while ( (changeMoney =kybd.nextInt()) != 0){
System.out.println("Quarters = " + Coins.Quarters(changeMoney) + "\nDimes = " + Coins.Dimes(changeMoney) + "\nNickels = " + Coins.Nickels(changeMoney) + "\nPennies = " + Coins.Pennies(changeMoney));
}
在@Bohemian的回答中:伟大的代码。我的错是忘了提及(对此表示歉意)我 如果能够一次输入所有输入的数字,我该怎么办 你会这么说吗 将输入存储在一个集合中,如
列表
代码示例:
List<Integer> list = new ArrayList<>();
while ( (int i =kybd.nextInt()) != 0){
list.add(i);
}
// Then loop again
for(Integer changeMoney : list){
System.out.println("Quarters = " + Coins.Quarters(changeMoney) + "\nDimes = " + Coins.Dimes(changeMoney) + "\nNickels = " + Coins.Nickels(changeMoney) + "\nPennies = " + Coins.Pennies(changeMoney));
}
List List=new ArrayList();
而((int i=kybd.nextInt())!=0){
列表.添加(i);
}
//然后再次循环
for(整数兑换货币:列表){
System.out.println(“Quarter=“+Coins.Quarter(兑换货币)+”\nTimes=“+Coins.Dimes(兑换货币)+”\nNickels=“+Coins.Nickels(兑换货币)+”\nPennies=“+Coins.Pennies(兑换货币));
}
将其更改为类似的内容
int changeMoney=0;
while ( (changeMoney =kybd.nextInt()) != 0){
System.out.println("Quarters = " + Coins.Quarters(changeMoney) + "\nDimes = " + Coins.Dimes(changeMoney) + "\nNickels = " + Coins.Nickels(changeMoney) + "\nPennies = " + Coins.Pennies(changeMoney));
}
在@Bohemian的回答中:伟大的代码。我的错是忘了提及(对此表示歉意)我 如果能够一次输入所有输入的数字,我该怎么办 你会这么说吗 将输入存储在一个集合中,如
列表
代码示例:
List<Integer> list = new ArrayList<>();
while ( (int i =kybd.nextInt()) != 0){
list.add(i);
}
// Then loop again
for(Integer changeMoney : list){
System.out.println("Quarters = " + Coins.Quarters(changeMoney) + "\nDimes = " + Coins.Dimes(changeMoney) + "\nNickels = " + Coins.Nickels(changeMoney) + "\nPennies = " + Coins.Pennies(changeMoney));
}
List List=new ArrayList();
而((int i=kybd.nextInt())!=0){
列表.添加(i);
}
//然后再次循环
for(整数兑换货币:列表){
System.out.println(“Quarter=“+Coins.Quarter(兑换货币)+”\nTimes=“+Coins.Dimes(兑换货币)+”\nNickels=“+Coins.Nickels(兑换货币)+”\nPennies=“+Coins.Pennies(兑换货币));
}
您想要这样的东西:
Scanner kybd = new Scanner(System.in);
while (true) {
int changeMoney = kybd.nextInt();
if (changeMoney == 0)
break;
// do stuff with changeMoney
}
它也可以表示为for
循环:
Scanner kybd = new Scanner(System.in);
for (int changeMoney = kybd.nextInt(); changeMoney != 0; changeMoney = kybd.nextInt()) {
// do stuff with changeMoney
}
虽然行数较少,但它使for循环行相当长,但可以通过使用较短的变量名来缓解这一问题:
Scanner in = new Scanner(System.in);
for (int i = in.nextInt(); i != 0; i = in.nextInt()) {
// do stuff with i
}
你想要这样的东西:
Scanner kybd = new Scanner(System.in);
while (true) {
int changeMoney = kybd.nextInt();
if (changeMoney == 0)
break;
// do stuff with changeMoney
}
它也可以表示为for
循环:
Scanner kybd = new Scanner(System.in);
for (int changeMoney = kybd.nextInt(); changeMoney != 0; changeMoney = kybd.nextInt()) {
// do stuff with changeMoney
}
虽然行数较少,但它使for循环行相当长,但可以通过使用较短的变量名来缓解这一问题:
Scanner in = new Scanner(System.in);
for (int i = in.nextInt(); i != 0; i = in.nextInt()) {
// do stuff with i
}
首先,您的方法应该有小写的名称。第二,你需要一个循环——也许像这样
public static void main(String[] args) {
Scanner kybd = new Scanner(System.in);
while (kybd.hasNextInt()){ // will stop if the next input is not an int.
int changeMoney = kybd.nextInt();
if (changeMoney == 0) {
break;
}
// Assuming you just rename them to "get" methods.
System.out.println("Quarters = "
+ Coins.getQuarters(changeMoney) + "\nDimes = "
+ Coins.getDimes(changeMoney) + "\nNickels = "
+ Coins.getNickels(changeMoney)
+ "\nPennies = "
+ Coins.getPennies(changeMoney));
}
}
首先,您的方法应该有小写的名称。第二,你需要一个循环——也许像这样
public static void main(String[] args) {
Scanner kybd = new Scanner(System.in);
while (kybd.hasNextInt()){ // will stop if the next input is not an int.
int changeMoney = kybd.nextInt();
if (changeMoney == 0) {
break;
}
// Assuming you just rename them to "get" methods.
System.out.println("Quarters = "
+ Coins.getQuarters(changeMoney) + "\nDimes = "
+ Coins.getDimes(changeMoney) + "\nNickels = "
+ Coins.getNickels(changeMoney)
+ "\nPennies = "
+ Coins.getPennies(changeMoney));
}
}
您向用户询问了两次号码
- 一旦进入状态
- 在
语句中的第二个李>if
if
似乎应该替换为loop。在这种情况下,您可以使用
Scanner kybd = new Scanner(System.in);
for (int changeMoney = -1; (changeMoney = kybd.nextInt()) != 0;){
System.out.println("Quarters = " + Coins.Quarters(changeMoney) + "\nDimes = " + Coins.Dimes(changeMoney) + "\nNickels = " + Coins.Nickels(changeMoney) + "\nPennies = " + Coins.Pennies(changeMoney));
}
这种方法的优点是它很短,
changeMoney
将是仅在循环内部可用的局部变量。您向用户询问了两次数字
- 一旦进入状态
- 在
语句中的第二个李>if
if
似乎应该替换为loop。在这种情况下,您可以使用
Scanner kybd = new Scanner(System.in);
for (int changeMoney = -1; (changeMoney = kybd.nextInt()) != 0;){
System.out.println("Quarters = " + Coins.Quarters(changeMoney) + "\nDimes = " + Coins.Dimes(changeMoney) + "\nNickels = " + Coins.Nickels(changeMoney) + "\nPennies = " + Coins.Pennies(changeMoney));
}
这种方法的优点是它很短,
changeMoney
将是局部变量,仅在循环中可用。看起来您只读取了一次,您可能应该将scanner.nextInt()调用包装在while循环中,如果值为0,该循环将中断
while (kybd.hasNextInt()){
int changeMoney = kybd.nextInt();
if(changeMoney == 0)break;
System.out.println("Quarters = " + Coins.Quarters(changeMoney) + "\nDimes = " + Coins.Dimes(changeMoney) + "\nNickels = " + Coins.Nickels(changeMoney) + "\nPennies = " + Coins.Pennies(changeMoney));
}
看起来您只读取了一次,您可能应该将scanner.nextInt()调用包装在while循环中,如果值为0,则该循环将中断
while (kybd.hasNextInt()){
int changeMoney = kybd.nextInt();
if(changeMoney == 0)break;
System.out.println("Quarters = " + Coins.Quarters(changeMoney) + "\nDimes = " + Coins.Dimes(changeMoney) + "\nNickels = " + Coins.Nickels(changeMoney) + "\nPennies = " + Coins.Pennies(changeMoney));
}
+1个不错的建议,我喜欢答案中的3种不同方式:)+1个不错的建议,我喜欢答案中的3种不同方式:)很棒的代码。我的错是忘了提及(很抱歉)我应该能够一次输入所有的输入数字,你会说我该怎么做?在while循环中创建一个收集多个输入的循环,然后使用所有的输入。如果其中一个输入为零,则可以break@SplattColor我编辑我的答案,寻找可能的解决方案,将输入存储在
列表中
伟大的代码中。我的错是忘了提及(很抱歉)我应该能够一次输入所有的输入数字,你会说我该怎么做?在while循环中创建一个收集多个输入的循环,然后使用所有的输入。如果其中一个输入为零,则可以break@SplattColor我编辑了我的答案,寻找一种可能的解决方案,将输入存储在列表中+1干nextInt()
,这是一种很好的串联功夫,但有些人认为这样分配和测试很糟糕。@Bohemian谢谢。修正了一点:)@Bohemian该死。现在我意识到这和你的答案是一样的+1给你,我会回到我以前的版本。+1干nextInt()
的功夫不错,但有些人认为这样分配和测试很糟糕。@Bohemian谢谢。修正了一点:)@Bohemian该死。现在我意识到这和你的答案是一样的+1,并将返回到我以前的版本。@SplattColor+1是您实际向上投票的答案xD。。考虑接受一个答案来完成这个问题,并投票赞成谁实际上你认为答案有助于解决你的问题:)@ StuttToC+ + 1是当你实际上投票赞成答案XD。考虑接受一个答案来完成这个问题,并投票选出你认为对解决问题有帮助的人: