好吧,我正在考虑一个CS安全类,其中包含一些基本的java编程,我们的第一个任务是使用BigInteger
。但是,我们还必须提供防弹"我们的计划。虽然我的方法不是最理想的,但它对第一个输入的作用是EXCEPT。如果我输入任何input.new---();
我的程序的无效输入,Aka将提示用户再次使用有效数字。但是第一个input.nextInt();
仍然会收到无效的输入和崩溃,显示"java.util.InputMismatchException"
,然后就扫描仪进行调整。关于为什么会发生这种情况的任何想法?
附:在任何情况下,程序都不得显示错误日志。
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) <-----");
}
}
}
}
答案 0 :(得分:0)
您的catch
块仅处理NumberFormatException
。如果您正在尝试处理所有Exception
(s),那么我建议您更改此
catch (NumberFormatException e){
类似
catch (Exception e){
答案 1 :(得分:0)
nextDouble()
将读取双倍值。如果parseDouble失败,则抛出InputMismatchException
。
这里是该类的代码:
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());
}
}
答案 2 :(得分:0)
Oracle说
公共类InputMismatchException扩展NoSuchElementException 由扫描程序抛出,表示检索到的令牌没有 匹配预期类型的模式,或者令牌不在 预期类型的范围。
公共类NumberFormatException扩展IllegalArgumentException 抛出以指示应用程序已尝试转换a 字符串到其中一个数字类型,但字符串没有 适当的格式。
您在catch块中仅使用NumberFormatException
,因此它只捕获NumberFormatException
。要捕获其他异常,您必须添加其他catch块
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) <-----");
OR 如果您使用了基本的Exception类,它将捕获任何类型的异常
catch (Exception e){
System.out.println("-----> Please try entering a valid number(s) <-----");
答案 3 :(得分:0)
InputMismatchException
和NumberFormatException
是不同的类。他们之间没有任何关系,你的程序会抛出InputMismatchException
而你正试图抓住NumberFormatException
。您将需要一个InputMismatchException
例外的catch块。