我试图在while循环中输入3个不同的变量,只要我不为任何变量输入stop。 while循环只是假设我输入第二个变量值,如果第一个变量不停止,同样输入第三个变量值
现在,第一个循环正常,我可以输入所有3个变量,但第2次和第3次,for循环输出第一个变量,但不允许我在跳到之前输入一个值第二个变量。 我的意思是:
姓名:afasdf
额外信息:afdsaf
单位成本:123123214
名称:额外信息:adflskjflk 另外,进入Stop并不是以
单位成本:123217
我知道当只有一个变量时,这个循环有效,并且我尝试使用for循环而不是while循环,并添加吨和吨的else语句,但它似乎保持不变相同的
我设置断路器的方式有问题吗? 是我设置最后一个断路器的方式(即使我把一个双变量设置为停止的那个断路器)弄乱其余的hte循环?
非常感谢你
这是我的代码
ArrayItem s = new ArrayItem();
String Name = null, ID = null;
double Money = 0;
boolean breaker = false;
while(breaker ==false)
{
System.out.print("Name:" + "\t");
Name = Input.nextLine();
if(Name.equals("Stop")) //see if the program should stop
breaker = true;
System.out.print("Extra Info:" + "\t");
Details = Input.nextLine();
if(ID.equals("Stop"))
breaker = true;
System.out.print("Unit Cost:" + "\t");
Money = Input.nextDouble();
// suppose to let me stop even if i input stop
// when the variable is suppose to be a double
if(Input.equals("stop") || Input.equals("stop"))
breaker = true;
else
s.SetNames(Name);
s.SetInfo(Details);
s.SetCost(Money);
}
答案 0 :(得分:1)
关于代码的一些事项:"Name:" + "\t"
可以简化为"Name:\t"
。这适用于其余代码。在Java中,习惯使用camelcase,其中第一个单词是小写的。例如,s.SetMoney
将是s.setMoney
。此外,变量遵循相同的规则,其中Money
为money
,ID
为id
。如果你的老师正在教你,那就按照他们的风格。
循环也应该是一个do-while循环:
do
{
// read each value in sequence, and then check to see if you should stop
// you can/should simplify this into a function that returns the object
// that returns null if the value should stop (requiring a capital D
// double for the return type)
if ( /* reason to stop */)
{
break;
}
s.setNames(name);
s.setId(id);
s.setMoney(money);
} while (true);
private String getString(Scanner input)
{
String result = input.nextLine();
// look for STOP
if (result.equalsIgnoreCase("stop"))
{
result = null;
}
return result;
}
private Double getDouble(Scanner input)
{
Double result = null;
// read the line is a string looking for STOP
String line = getString(input);
// null if it's STOP
if (line != null)
{
try
{
result = Double.parseDouble(line);
}
catch (NumberFormatException e)
{
// not a valid number, but not STOP either!
}
}
return result;
}
那里有很多概念,但随着你的进步,它们应该有所帮助。我会让你把各个部分放在一起。
此外,您确实需要修复括号,但这不是唯一的问题。由于Money
是double
,因此您必须将该值读作String
。我怀疑Input
是Scanner
对象,因此您可以检查Input.hasNextDouble()
是否不是,然后您可以有条件地检查String
值以查看它是否“停止”(注意:您正在检查“停止”和“停止”,这些不相等。您的最后一次无差别检查会将扫描仪与“停止”进行比较,这将永远不会成为现实。检查
System.out.print("Unit Cost:\t");
if (Input.hasNextDouble())
{
Money = Input.nextDouble();
// you can now set your object
// ...
}
// it's not a double; look for "stop"
else if (Input.nextLine().equalsIgnoreCase("stop"))
{
// exit loop
break;
}
// NOTE: if it's NOT a double or stop, then you have NOT exited
// and you have not set money
答案 1 :(得分:0)
breaker = true;
while(breaker){
Name = readInput("Name");
Details = readInput("Details");
Money = Double.parseDouble(readInput("Money"));
if(Name.equals("stop") || Details.equals("stop"))
breaker = false;
else {
// set ArrayItem
}
}
private static String readInput(String title){
System.out.println(title+":");
//... read input
// return value
}