无输入或非数字输入时用户输入中断

时间:2012-11-29 20:25:06

标签: java loops input arraylist

该程序应该向用户询问一个数字,并循环直到输入不是数字(如果有数字输入则重复)。 到目前为止我的代码:

import java.util.*;

public class MataVarden
{
    public static void main(String[] args) throws Exception
    {   
        Scanner sc = new Scanner(System.in);    
        ArrayList<Integer> Values = new ArrayList<Integer>(); 

        System.out.print("Input a number: ");
        Values.add(sc.nextInt()); 

        Collections.sort(Values);
        System.out.println("Values sorted: " + Values);
    }
}

如果输入非号码,您需要做什么才能打破输入?

1 个答案:

答案 0 :(得分:1)

对这些案例使用while循环。

System.out.println("Input a number");
String line = "";
while (sc.hasNextLine() && !(line = sc.nextLine()).equals("")) {
    try {
        int val = Integer.parseInt(line);
        values.add(val);
    } catch (NumberFormatException e) {
        break;
    }

    System.out.println("Input a number");
}

现在好了,这是对那里发生的事情的解释: -

  • sc.hasNextLine()检查是否有要读取的输入。如果是,则继续进行下一次测试
  • !(line = sc.nextLine()).equals("")检查下一个输入是否为empty string。如果它是一个空字符串,则条件失败,循环结束。
  • 由于我们使用nextLine()方法读取输入,我们必须使用Integer.parseInt(line);
  • 将其解析为整数
  • 我们需要将它包含在try-catch块中以处理像"abc"这样的输入,这些输入不会被解析为整数,并且会抛出异常,在这种情况下,我们会突破来自while loop。{/ li>的catch block
  • 请注意,我没有使用sc.nextInt(),因为它没有从输入中读取换行符号。因此,没有任何方法可以知道何时终止循环。

作为旁注,您应始终遵循代码中的编码约定。您的变量名称应以小写字母开头。