【问题标题】:java try and catch..infinite loopjava try and catch..无限循环
【发布时间】:2016-02-15 10:36:43
【问题描述】:

我遇到了trycatch 的问题。我的程序是插入三个不同的字符串名称、地址和电话号码,然后我使用toString 方法将这三个字符串转换为单个字符串。

每当我写错选择(字符串或其他数据类型)时,我都会遇到异常处理问题,然后 catch 可以无限次工作。

import java.util.ArrayList;
import java.util.Scanner;

public class mainClass {

  public static void main(String[] args) {
    Scanner input= new Scanner(System.in);
    ArrayList<String> arraylist= new ArrayList<String>();
    CreateFormat FormatObject = new CreateFormat();

    int choice;
    String phoneNumber;
    String name,address;
    String format="Empty";
    int x=1;
    int flag=0;
    do
    {
    try

    {   
    System.out.println("Enter your choice");
    System.out.printf("1:Enter new data\n2:Display data");
    choice=input.nextInt();
    switch (choice)
    {
    case 1:
    {
        System.out.println("Enter name  ");
        name=input.next();
        System.out.println("Enter phone number");
        phoneNumber=input.next();
        System.out.println("Enter address");
        address=input.next();
        format=FormatObject.toString(phoneNumber, name, address);
        arraylist.add(format);
        flag++;


    }
        break;
    case 2:
    {
        System.out.println("Name   Phone number   Address");
        System.out.println();
        for(int i=0;i<flag;i++)
        {   
        System.out.println(arraylist.get(i));

        }
    }
        break;
    }

}

 catch(Exception InputMismatchException){
System.out.println("Enter right choice");`
   }while(x==1);
}
}


//The format class ...//returns format for string

【问题讨论】:

    标签: java arraylist exception-handling


    【解决方案1】:

    您的trycatch 与循环无关,也与您的问题无关。

    while(x==1)
    

    是您测试的对象,但您从未更改 x 的值,因此它将始终保持为 1,因此上述检查将始终返回 true。

    【讨论】:

    • 我怎样才能逃脱捕获?然后返回尝试...在while循环中
    • 您遇到的问题是不要返回尝试(因为这就是您的循环所做的),问题是您永远不会离开您的循环。必须存在x==1false 的状态。
    • @SarmadAijaz 因为您是唯一可以访问它的要求的人:可能,​​但不能正确保证
    • @Stultuske 更新 catch 块中的 X 值并基于它进行检查是否明智?
    • @unknown 此刻,无论他做什么,他都有一个无限循环。 x 应该更新为 try 块的最后一个元素,而不是在 catch 中,因为当发生异常时,我假设他想重复这些步骤
    【解决方案2】:

    我想我现在知道你的问题到底是什么了。

    只需在代码开头添加input.nextLine() 即可停止输入运行的破坏。

    boolean wrongInput = false;
    do {
       try {
           if (wrongInput) {
              input.nextLine();
              wrongInput = false;   
           }
           System.out.println("Enter your choice");
           [...]
       } catch (...) {
           wrongInput = true;
       }
    

    应该可以解决问题。但是,请注意,我注意到您的程序中有两个错误(可能是因为我没有您的 CreateFormat 类),(a)我无法在地址中添加数字,并且(b)没有选项停止循环(我强烈建议 - 您只需设置 x = -1 或类似的东西,最好使用 boolean 来结束循环)。

    【讨论】:

    • x==1 => 这是一个布尔值。命名约定可能更清晰,但据我们所知,稍后要考虑 x 的不同值,而不仅仅是 true 或 false
    • 我做了 integer.parsInt(input.next());
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2018-01-16
    相关资源
    最近更新 更多