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

Java 无输入或非数字输入时的用户输入中断,java,loops,input,arraylist,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>

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

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);
    }
}
import java.util.*;
公共类MataVarden
{
公共静态void main(字符串[]args)引发异常
{   
扫描仪sc=新的扫描仪(System.in);
ArrayList值=新的ArrayList();
系统输出打印(“输入一个数字:”);
add(sc.nextInt());
集合。排序(值);
System.out.println(“值排序:”+值);
}
}

如果输入了非数字,您需要做什么来中断输入?

在这些情况下使用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(“”)检查下一个输入是否为空字符串。如果是空字符串,则条件失败,循环结束
  • 由于我们使用
    nextLine()
    方法读取输入,因此必须使用
    integer.parseInt(line)将其解析为整数
  • 我们需要将它封装在一个
    try catch
    块中,以处理类似
    的“abc”
    输入,它不会被解析为整数,并且会抛出一个异常,在这种情况下,我们从
    catch块
    中断
    while循环
  • 注意,我没有使用sc.nextInt(),因为它没有从输入中读取换行符。因此,无法知道何时终止循环


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

在这些情况下使用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(“”)检查下一个输入是否为空字符串。如果是空字符串,则条件失败,循环结束
  • 由于我们使用
    nextLine()
    方法读取输入,因此必须使用
    integer.parseInt(line)将其解析为整数
  • 我们需要将它封装在一个
    try catch
    块中,以处理类似
    的“abc”
    输入,它不会被解析为整数,并且会抛出一个异常,在这种情况下,我们从
    catch块
    中断
    while循环
  • 注意,我没有使用sc.nextInt(),因为它没有从输入中读取换行符。因此,无法知道何时终止循环


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

这将无法按指定方式工作,因为当输入非数字或null时,它不会中断循环。@Pescis。嗯,它适用于非数字。对于enter,是的,我将编辑代码。虽然这是可以的,但我认为如果在课程作业中提出问题,那么更负责任的是给出一个关于正在发生什么以及如何解决问题的想法,而不仅仅是给出这样的答案。@NutterzUK。。我希望你取消你的否决票,当然,如果你已经这样做了。@NutterzUK。。理解写一些解释需要一些时间。并不是说我把所有答案都存储在某个地方,然后从那里复制粘贴。我自己也不相信只给出像“答案”这样的代码。这不会按照指定的方式工作,因为当输入非数字或null时,它不会跳出循环。@Pescis。嗯,它适用于非数字。对于enter,是的,我将编辑代码。虽然这是可以的,但我认为如果在课程作业中提出问题,那么更负责任的是给出一个关于正在发生什么以及如何解决问题的想法,而不仅仅是给出这样的答案。@NutterzUK。。我希望你取消你的否决票,当然,如果你已经这样做了。@NutterzUK。。理解写一些解释需要一些时间。并不是说我把所有答案都存储在某个地方,然后从那里复制粘贴。我自己也不相信只提供像answer这样的代码。你可能想知道,当用户不输入数字(或“ABC”)时,sc.nextInt()会做什么。您可能还需要查看Scanner API。您可能需要考虑当用户不输入数字(或“ABC”)时sc.nextInt()将做什么。您可能还需要查看扫描仪API。