0

我正在尝试将 3 个不同的变量输入到 while 循环内的数组中,只要我没有为任何变量输入 stop 即可。如果第一个变量没有停止,while循环只假设让我输入第二个变量值,同样输入第三个变量值

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

  1. 名称:afasdf

  2. 额外信息:afdsaf

  3. 单价:123123214

  4. 名称:额外信息:adflskjflk 也是,输入 Stop 也不会结束循环

  5. 单位成本:123217

我知道当只有一个变量时这个循环有效,并且我尝试使用 for 循环而不是 while 循环,并添加了大量的 else 语句,但它似乎保持不变

我设置断路器的方式有问题吗?我设置最后一个断路器的方式(即使我为双变量设置 stop 也会停止)是否会弄乱 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);
}
4

2 回答 2

1

关于代码的几件事:"Name:" + "\t"可以简化 ot "Name:\t"。其余代码也是如此。在 Java 中,习惯上在第一个单词是小写的情况下使用驼峰式。例如,s.SetMoney将是s.setMoney。此外,变量遵循相同的规则 where Moneywould bemoneyIDwill be 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是 a double,所以您必须将值读取为 a 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
于 2012-07-10T04:12:14.543 回答
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
}
于 2012-07-10T04:13:16.490 回答