当前位置: 首页 > 知识库问答 >
问题:

Java:为什么在一个循环中的try-cat块只执行一次?

秦昊穹
2023-03-14

下面的程序只需从控制台读取整数并将其打印回来。当输入非int(如char或String)时,扫描仪抛出异常。我试图处理“尝试捕捉”块中的异常,然后继续读取下一个输入。从控制台输入第一个非int输入后,程序运行到无限循环。有人能帮忙吗?

public class ScannerTest {
    static int i=1;
    static Scanner sc;
    public static void main (String args[]){
        sc = new Scanner(System.in);
        while (i!=0){
            System.out.println("Enter something");
            go();
        }       
    }   
    private static void go(){
        try{
            i = sc.nextInt();
            System.out.println(i);
        }catch (Exception e){
            System.out.println("Wrong input, try again");
        }               
    }
}

共有3个答案

单于山
2023-03-14
As  devnull said take the input from user everytime either in loop or in method,just change the loop to ..and it works fine

1)

 while (i!=0){
         sc = new Scanner(System.in);
        System.out.println("Enter something");
        go();

    } 

2其他方式

private static void go(){
        try{ sc = new Scanner(System.in);
            i = sc.nextInt();
            System.out.println(i);
        }catch (Exception e){
            System.out.println("Wrong input, try again");
        }               
    }
百里朝
2023-03-14

使用字符串

import java.util.Scanner;

public class ScannerTest {

static int i = 1;
static Scanner sc;

public static void main(String args[]) {
    sc = new Scanner(System.in);
    while (i != 0) {
        System.out.println("Enter something");
        go();
    }
}

private static void go() {
    try {
        i = Integer.parseInt(sc.next());
        System.out.println(i);
    } catch (Exception e) {
        System.out.println("Wrong input, try again");
    }
}
}
束新
2023-03-14

当扫描仪未能读取整数时,它不会清除输入缓冲区。假设输入缓冲区包含“abc”,因为这是您输入的。对"nextInt"的调用将失败,但缓冲区仍将包含"abc"。所以在循环的下一次传递中,“下一次”将再次失败!

在异常处理程序中调用sc.next()可以通过从缓冲区中删除不正确的令牌来纠正此问题。

 类似资料:
  • 我发现这样的php代码: 我希望这个循环会执行4次,因为$I变成了对$的引用(对吗?)。然而,循环只执行一次,并输出: a=10,i=10 我不明白为什么它会这样工作。有什么想法吗?

  • 我对python中双for循环的使用感到困惑,这是我的代码: 输出如下: 它只对外循环的第一个值执行内循环,为什么会发生这种情况?我怎样才能让它在第一个和第二个变量的所有组合上循环?

  • 我一直在读一本面向初学者的书,“第一头HTML5编程”,其中有这样一段代码: 目前,如果我调用,它将返回下一次显示是在下午5:00。我将循环条件更改为“I<=movie.showtimes.length;”但它仍然只运行一次,并且只显示下午5点。循环只迭代一次,即使我重写了这个函数: 不是应该跑两次吗?

  • } 链接:https://www.hackerrank.com/challenges/java-string-compare/problem

  • 问题内容: 我只是发现我认为PLSQL与Oracle中的SQL有点意外的行为。 如果我在SQLDeveloper上运行此查询,则会得到5个结果: 但是,如果我在SQLDeveloper中运行以下语句: 变量 w_counter 以值1(怪异)结束 但最奇怪的部分是,如果我将查询封装在子查询中…… 该 w_counter 变量完成与价值5 … 你对此有什么要说的? 我正在使用Oracle 9.2i

  • 我似乎找不到问题。输出是正确的,直到捕获到异常。当我抓住它时,程序会打印: 请给一个整数:无效整数,请重试请 给一个整数:无效整数,请重试… 非常我知道这一定是个愚蠢的错误。