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

在无限循环中抛出异常。找不到我的出路。[重复]

杨乐意
2023-03-14

当InputMismatchException被抛出时,我进入了一个无限循环,我一生都无法找出原因。基本上,这个程序的主要目标是为用户输入的负数抛出异常,并确保用户实际上输入了一个整数(不是像“r45”这样的东西)。非常感谢任何帮助。谢谢你。

  import java.util.*;

  public class conversion{
  static Scanner in = new Scanner (System.in);
  static final double centimeters_per_inch = 2.54;
  static final int inches_per_foot = 12;

  public static void main (String [] args){
  int feet;
  int inches;
  int totalInches;
  double centimeters;
  boolean done = false;
  do{
    try
       {
       System.out.print("Enter feet: ");
       System.out.flush();
       feet = in.nextInt();
       System.out.println();
       System.out.print("Enter inches: ");
       System.out.flush();
       inches = in.nextInt();

       if (feet < 0 || inches < 0)
         throw new NonNegative();

       System.out.println();

       done = true;
       System.out.println("The numbers you entered are " + feet +" feet and " + inches+ " inches");
       totalInches = inches_per_foot * feet + inches;
       System.out.println();
       System.out.println("The total number of inches = " + totalInches);
       centimeters = totalInches * centimeters_per_inch;
       System.out.println("The number of centimeteres = " + centimeters); 
     }

     catch (NonNegative a){
       System.out.println(a.toString());   
     }
     catch(InputMismatchException e) {
       System.out.println("This is not a number");
     }
   }while(!done);
 }

}

共有2个答案

窦凯定
2023-03-14

在循环中捕获通常是一种反模式,原因有二。

    < li >您偶尔会遇到这种奇怪的行为,而且... < li >与您自己显式检查数据相比,异常比较慢。

所以你在这里得到了:

do { 
  try {

  } catch () {
  }
} while ()

更常见的是写...

try {
  do {

  } while ();
} catch () {

}

对于例外情况,应保留例外情况;您可能不应该将它们用作每次调用方法时都会发生的功能。

仲孙华奥
2023-03-14

当发生< code > InputMismatchException 时,来自< code>Scanner的无效输入将通过< code>while循环发回,该过程将无限重复。调用< code>nextLine以使用来自< code>Scanner的非数字输入。这将防止未使用的数据被发送回环路

System.out.println("This is not a number " + in.nextLine());
 类似资料:
  • 我在我的android应用程序中使用增强for循环来迭代状态对象列表。 这将生成以下IndexOutOfBoundsException:java。lang.IndexOutOfBoundsException:索引0无效,大小为0 我意识到这是因为ArrayList的大小是0,这意味着它是空的。我的问题是,为什么它一开始就进入了循环,而不是为了保证这些问题不会发生而创建的增强for,以及如何阻止它。

  • 我在Hackerrank上解决了一个任务。com,问题是这样的: 你有一个数组。这个数组包含数字。 现在输入两个数字: 第一个描述了一个总和 第二个描述了您添加在一起的索引量(序列长度) 最后你得到的序列的数量其总和就是你定义的数字 例如: 我为此写了这段代码: 由于我不知道需要多少次计数(例如,序列长度为3的6长度数组有4个序列(1,2,3,4 | 3,4,5 | 4,5,6)),当索引超出范围

  • 我试图从方法中抛出异常,但当我编译下面的代码时 编译错误 发射装置。java:14:错误:找不到符号静态void getError()抛出^myException{ 符号:类myException 位置:类启动器 它说了些什么,它无法理解什么是

  • 我有一个非常基本的函数,它搜索的数组列表,并返回与传递给它的参数匹配的帐户。但是,一旦抛出CustomerAccountNotFoundException,我的for循环就会中断。 我通过在异常后打印的值来测试这一点,该值一直被重置为0。如何在抛出异常后继续循环?我希望每次帐户不匹配时都抛出它,当它匹配时返回帐户。我还尝试过但不起作用。

  • 问题内容: 我有一个关于Java中重新引发异常的非常简单的问题。 这是代码片段: 为什么我们需要在第一个版本中重新抛出,而第二个版本看起来更优雅?可能有什么好处,并且优先选择哪个版本? 问题答案: 你是对的。第二版更好。而且,第一个版本没有任何意义。除了异常的堆栈跟踪为“错误”之外,它的功能相同。 有“重新抛出”异常的原因如下: 如果您之前有事要做。 如果捕获一种类型的异常并抛出另一种类型的异常:

  • 这是我连接HTTP的代码。 这就是android。操作系统。NetworkOnMainThreadException 请帮忙。