Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中do-while循环的异常处理_Java_Loops_Arraylist_Exception Handling_Do While - Fatal编程技术网

Java中do-while循环的异常处理

Java中do-while循环的异常处理,java,loops,arraylist,exception-handling,do-while,Java,Loops,Arraylist,Exception Handling,Do While,该算法应该在一个ArrayList中包含3个整数。如果输入不是整数,则应该有提示。当我执行代码时,执行catch子句,但程序运行在无限循环中。有人能给我指引正确的方向吗?谢谢你的帮助-D package chapter_08; import java.util.Scanner; import java.util.List; import java.util.ArrayList; public class IntegerList { static List<Integer>

该算法应该在一个ArrayList中包含3个整数。如果输入不是整数,则应该有提示。当我执行代码时,执行
catch
子句,但程序运行在无限循环中。有人能给我指引正确的方向吗?谢谢你的帮助-D

package chapter_08;
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;

public class IntegerList {
    static List<Integer> numbers = new ArrayList<Integer>();

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int counter = 1;
        int inputNum;

        do {
            System.out.print("Type " + counter + " integer: " );
            try {
                inputNum = input.nextInt();
                numbers.add(inputNum);
                counter += 1;
            }
            catch (Exception exc) {
                System.out.println("invalid number");
            }
        } while (!(numbers.size() == 3));
    }
}
包装第8章;
导入java.util.Scanner;
导入java.util.List;
导入java.util.ArrayList;
公共类整数列表{
静态列表编号=新的ArrayList();
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
int计数器=1;
int-inputNum;
做{
系统输出打印(“类型”+计数器+”整数:);
试一试{
inputNum=input.nextInt();
添加(inputNum);
计数器+=1;
}
捕获(异常exc){
System.out.println(“无效编号”);
}
}而(!(numbers.size()=3));
}
}

您应该使用
中断catch(){}
中,像这样:

try {
    inputNum = input.nextInt();
    numbers.add(inputNum);
    counter += 1;
} catch (Exception e) {
    System.out.println("invalid number ");
    break;
}

因此,如果一个输入不正确,请中断循环。

您应该使用
中断catch(){}
中,像这样:

try {
    inputNum = input.nextInt();
    numbers.add(inputNum);
    counter += 1;
} catch (Exception e) {
    System.out.println("invalid number ");
    break;
}

因此,如果一个输入不正确,请中断循环。

如果
inputNum=input.nextInt()无法装入整数,并且引发了
输入不匹配异常
,未使用
扫描仪的输入。

因此,在捕获之后,它会循环并再次转到这里:

inputNum = input.nextInt();
输入内容完全相同

因此,您应该执行
input.nextLine()以放弃当前输入并允许用户进行新输入。
此外,捕获
输入不匹配异常
比捕获
异常
更有意义,因为可能会发生与不匹配无关的其他异常,如果不是问题,则向用户显示“无效数字”
将没有用:

    catch (InputMismatchException e){
        System.out.println("invalid number ");
        input.nextLine();
    }

如果
inputNum=input.nextInt()无法装入整数,并且引发了
输入不匹配异常
,未使用
扫描仪的输入。

因此,在捕获之后,它会循环并再次转到这里:

inputNum = input.nextInt();
输入内容完全相同

因此,您应该执行
input.nextLine()以放弃当前输入并允许用户进行新输入。
此外,捕获
输入不匹配异常
比捕获
异常
更有意义,因为可能会发生与不匹配无关的其他异常,如果不是问题,则向用户显示“无效数字”
将没有用:

    catch (InputMismatchException e){
        System.out.println("invalid number ");
        input.nextLine();
    }

这是因为当使用
nextInt()
读取下一个int并且失败时,
扫描仪仍然包含键入的内容。然后,当重新进入do while循环时,
input.nextInt()
尝试使用相同的内容再次解析它

您需要使用
nextLine()
刷新
扫描仪的内容:


注意事项:

  • 您可以删除
    计数器
    变量,因为您没有使用它。否则,您可以将
    计数器+=1
    替换为
    计数器+++
  • 您可以将
    while(!(numbers.size()=3))
    替换为
    while(numbers.size()!=3)
    ,或者更好的方法是:
    while(numbers.size()<3)
  • 捕获异常时,应该尽可能具体,除非有很好的理由这样做<在您的情况下,代码>异常
应替换为
输入不匹配异常

这是因为当使用
nextInt()读取下一个int并且失败时,
扫描仪仍然包含键入的内容。然后,当重新进入do while循环时,
input.nextInt()
尝试使用相同的内容再次解析它

您需要使用
nextLine()
刷新
扫描仪的内容:


注意事项:

  • 您可以删除
    计数器
    变量,因为您没有使用它。否则,您可以将
    计数器+=1
    替换为
    计数器+++
  • 您可以将
    while(!(numbers.size()=3))
    替换为
    while(numbers.size()!=3)
    ,或者更好的方法是:
    while(numbers.size()<3)
  • 捕获异常时,应该尽可能具体,除非有很好的理由这样做<在您的情况下,代码>异常
应替换为
输入不匹配异常
尝试更改

inputNum = input.nextInt();

它工作得非常好。

试着改变一下

inputNum = input.nextInt();


它工作得非常好。

您需要将扫描仪移到下一行。在catch部分的错误消息下面添加这行代码

input.nextLine();

您需要将扫描仪移到下一行。在catch部分的错误消息下面添加这行代码

input.nextLine();