2012-07-10 67 views
0

我想输入3个不同的变量到一个while循环内的数组中,只要我不输入任何变量的停止。 while循环只能让我输入第二个变量值,如果第一个变量没有停止,并且同样输入第三个变量值for循环输入数组变量不工作?

现在,第一个循环很好,我可以输入所有3个变量,但第二次和第三次,for循环输出第一个变量,但不允许我在跳到第二个变量之前输入一个值。我的意思 例如:

  1. 名称:afasdf

  2. 额外的信息:afdsaf

  3. 单位成本:123123214

  4. 名称:额外的信息:adflskjflk 也进入停止不结束回路

  5. 单位成本: 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); 
} 
+1

使用括号('{}')围绕你如果和别人的身体。例如,底部的else语句只执行's.SetNames(Name)',它总是执行's.SetInfo(Details)'和's.SetCost(Money)'。最后,查看'break'关键字,它将立即以其最基本的形式退出其包含的循环。 'if(Input ...){breaker = true; } else {s.SetNames(Name); s.SetInfo(详细); s.SetCost(钱); }(在你的代码中使用空行来分隔)。 – pickypg 2012-07-10 03:57:44

+0

我添加了括号,但是我仍然遇到同样的问题 – user1476390 2012-07-10 04:00:24

+1

'if(Input.equals(“stop”)|| Input.equals(“stop”))'你看不到我有机会。 – 2012-07-10 04:04:59

回答

1

一对夫妇的有关代码的事情:"Name:" + "\t"可以简化OT "Name:\t"。其余代码都是如此。在Java中,习惯上使用camelcase,其中第一个单词是小写字母。例如,s.SetMoney将是s.setMoney。另外,变量遵循相同的规则,其中Money将是money,并且ID将是id。如果你的老师不是在教你,那么遵循他们的风格。

循环也应该是一个do-while循环:

有很多的概念在里面,但他们应该帮助你的进步。我会让你把这些碎片放在一起。

此外,您确实需要修复括号,但这不是唯一的问题。因为Moneydouble,所以您必须将该值作为String读取。我怀疑Input是一个Scanner对象,所以如果不是,那么你可以检查Input.hasNextDouble(),那么你可以有条件地检查String的值来查看它是否“停止”(注意:你正在检查“Stop”和“stop”,它们是不等于)。您最后一次没有机会的检查将扫描仪与“停止”进行比较,这绝不会是真的。检查

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 
+0

谢谢,现在程序停止在钱,当我把停止,但while循环停止工作; d – user1476390 2012-07-10 04:26:05

+0

为什么你在getString()检查“停止”?这是从控制台读取输入的可重用方法。 – sreehari 2012-07-10 06:24:28

+0

@sreehari因为如果我没有检查它,那么就没有方法的目的。如果你不需要检查方法,你应该在它的地方使用'input.nextLine()'。 – pickypg 2012-07-10 07:00:43

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 
} 
+1

你将来有'NumberFormatException'。 – pickypg 2012-07-10 04:14:58

+0

我试过这个,但是当我试图把Stop放入双变量时出错 – user1476390 2012-07-10 04:31:41