好的,我要学习一个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) <-----");
}
}
}
}
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());
}
}
你的catch
块只处理NumberFormatException
。如果您试图处理所有异常
,那么我建议您更改此选项
catch (NumberFormatException e){
比如
catch (Exception e){
甲骨文说
公共类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...”。在允许用户输入任何数据之前。抱歉,如果这是一个愚蠢的问题,我是很新的!