for循环用于将变量输入到数组中不起作用?

时间:2012-07-10 03:55:11

标签: java arrays

我试图在while循环中输入3个不同的变量,只要我不为任何变量输入stop。 while循环只是假设我输入第二个变量值,如果第一个变量不停止,同样输入第三个变量值

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

  1. 姓名:afasdf

  2. 额外信息:afdsaf

  3. 单位成本:123123214

  4. 名称:额外信息:adflskjflk 另外,进入Stop并不是以

  5. 结束循环
  6. 单位成本:123217

  7. 我知道当只有一个变量时,这个循环有效,并且我尝试使用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);
    }
    

2 个答案:

答案 0 :(得分:1)

关于代码的一些事项:"Name:" + "\t"可以简化为"Name:\t"。这适用于其余代码。在Java中,习惯使用camelcase,其中第一个单词是小写的。例如,s.SetMoney将是s.setMoney。此外,变量遵循相同的规则,其中MoneymoneyIDid。如果你的老师正在教你,那就按照他们的风格。

循环也应该是一个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;
}

那里有很多概念,但随着你的进步,它们应该有所帮助。我会让你把各个部分放在一起。

此外,您确实需要修复括号,但这不是唯一的问题。由于Moneydouble,因此您必须将该值读作String。我怀疑InputScanner对象,因此您可以检查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
}