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

捕获/尝试不工作输入不匹配异常与扫描仪?

周正真
2023-03-14

好的,我要学习一个CS安全类,里面有一些基本的java编程,我们的第一个任务是玩biginger。然而,我们也必须“防弹”我们的计划。虽然我的方法不是最理想的,但除了第一次输入外,它仍然有效。如果我为任何输入输入键入了无效的输入,则为Aka。新的——() 我的程序将提示用户使用有效数字重试。但是第一个输入。nextInt()仍然会接受无效的输入并崩溃,显示“java.util.InputMismatchException”,然后漫无目的地谈论扫描仪。你知道为什么会这样吗?p、 程序在任何情况下都不能显示错误。

import java.io.*;
import java.util.*;
import java.math.*;

class BigNumber{
   public static void main(String args[]){

     while(true){ 
      try{
         Scanner input = new Scanner(System.in);

         System.out.print("if you wish to exit the program type in '0,' to continue running the program type in any other value: ");
         double esc= input.nextDouble();
         if(esc == 0){ break;}
         else{System.out.println("Ok, program running...");}
         input.nextLine();

         System.out.print("Enter number a: ");
         String aValue = input.nextLine();

         System.out.print("Enter number b: ");
         String bValue = input.nextLine();

         System.out.print("Enter a number 'n': ");
         String nValue = input.nextLine();
         while (Integer.parseInt(nValue) < 1)
         {
            if (Integer.parseInt(nValue) < 1)
            {
               System.out.print("Please enter a valid number (n>1): ");
               nValue = input.nextLine();
            }
         }

         BigInteger a= new BigInteger(aValue);
         BigInteger b= new BigInteger(bValue);
         BigInteger n= new BigInteger(nValue);

         System.out.println("---------------------------");
         System.out.println("1) a xor b: " + a.xor(b));
         System.out.println("2) b xor b: " + b.xor(b));
         System.out.println("3) a xor b xor a: " + a.xor(b).xor(a));
         System.out.println(" ");
         System.out.println("4) ab mod n: " + a.modPow(b,n));
         System.out.println(" ");
         System.out.println("5) a shifted to the right by 6: " + a.shiftRight(6));
         System.out.println("6) b shifted to the left by 3: " + b.shiftLeft(3));
         System.out.println("---------------------------");

      }
      catch (NumberFormatException e){
         System.out.println("-----> Please try entering a valid number(s) <-----");
      }

    } 
  }
}

共有3个答案

黄伟
2023-03-14

nextDouple()将读取双重值。如果parseDouple失败,将引发一个InputMismatchExctive

下面是该类的代码:

public double nextDouble() {
    // Check cached result
    if ((typeCache != null) && (typeCache instanceof Double)) {
        double val = ((Double)typeCache).doubleValue();
        useTypeCache();
        return val;
    }
    setRadix(10);
    clearCaches();
    // Search for next float
    try {
        return Double.parseDouble(processFloatToken(next(floatPattern())));
    } catch (NumberFormatException nfe) {
        position = matcher.start(); // don't skip bad token
        throw new InputMismatchException(nfe.getMessage());
    }
}
仰欣悦
2023-03-14

你的catch块只处理NumberFormatException。如果您试图处理所有异常,那么我建议您更改此选项

catch (NumberFormatException e){

比如

catch (Exception e){
柴昆杰
2023-03-14

甲骨文说

公共类InputMismatchExctive扩展了由扫描仪抛出的NoSuchElementExctive,以指示检索到的令牌与预期类型的模式不匹配,或者令牌超出了预期类型的范围。

公共类NumberFormatException扩展了引发的IllegalArgumentException,以指示应用程序已尝试将字符串转换为一种数值类型,但该字符串没有适当的格式。

您只在捕获块中使用了NumberFormatExctive,因此它只捕获NumberFormatExctive。要捕获其他异常,您必须添加其他捕获块

catch (NumberFormatException e){
         System.out.println("-----> Please try entering a valid number(s) <-----");
catch (InputMismatchException e){
         System.out.println("-----> Please try entering a valid number(s) <-----");

或者,如果使用基类异常,它将捕获任何类型的异常

catch (Exception e){
         System.out.println("-----> Please try entering a valid number(s) <-----");
 类似资料:
  • (更新的代码)无论出于什么原因,InputMismatchException的catch块无法正常工作。当代码抛出此错误时,catch块不会捕获它。有人知道为什么会这样吗?

  • 我正在做一个场景,我只想接受1或2作为输入,并且在输入另一个数字或输入无效时处理错误。为此,我正在做: 如果我添加在中,由于选项的范围在try内,它会给出一个错误。我希望它继续要求用户输入有效数字,即1或2,但如果我输入任何字符,它将进入并退出。

  • 编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答问题。 (更新的代码)无论出于什么原因,InputMismatchException的catch块无法正常工作。当代码抛出此错误时,catch块不会捕获它。有人知道为什么会这样吗?

  • 我试图从用户那里获取输入,为2D矿山的weeper游戏构建网格,当我将有效值传递给扫描器时,过程非常顺利,但当我尝试无效的东西时,它会经历无限循环,即使try块是用资源尝试,它应该用每一个新的尝试关闭扫描器,当它无限地打印捕获上的字符串时,它听起来不会关闭它

  • 我只是在练习java,目前我正在试验getter/setter方法和构造函数。java程序的工作原理是,我能够将用户输入存储到对象中,但当我将字符串“Dice and rollers”输入到gametype字符串变量中时,会出现一个挂起的未捕获异常InputMismatch错误。 有人能给我解释一下这是为什么吗? 另外,我在下面分享了我的源代码。 上面的是超类,下面的源代码是构造函数和getter

  • 因此,我是一个新的Java程序员,我正试图弄清楚为什么一段代码不能工作。我遇到的问题是“String interests=input.nextLine();”这一行,它跳过了用户的输入并跳转到下一个System.out,所以它只显示“Your Profile...”。在允许用户输入任何数据之前。抱歉,如果这是一个愚蠢的问题,我是很新的!