我写了个16进制转化10进制的程序,如果输入的格式不对就显示异常NumberFormatException,
但是每次显示异常后就既没有结束程序,也没有继续循环下去package ex13;
import java.util.Scanner;public class HexToDecimalConversion {
public static void main(String[] args) {
// TODO 自动生成方法存根
Scanner input=new Scanner(System.in);
boolean continueToInput=false;
do{
try{
//Prompt the user to enter a string
System.out.print("Enter a hex number: ");
String hex=input.nextLine();
System.out.println("The decimal value for hex number "
+hex+" is "+hexToDecimal(hex.toUpperCase()));
continueToInput=false;
}
catch(NumberFormatException ex){
ex.printStackTrace();
continueToInput=true;
}
}while(continueToInput==true);
}
private static int hexToDecimal(String hex){
int decimalValue=0;
for(int i=0;i<hex.length();i++){
char hexChar=hex.charAt(i);
decimalValue=decimalValue*16+hexCharToDecimal(hexChar);
}
return decimalValue;
}
public static int hexCharToDecimal(char ch){
if(ch>='A'&&ch<='F')
return 10+ch-'A';
else if(ch>'0'&&ch<'9')
return ch-'0';
else
throw new NumberFormatException("Invalid number format");
}
}
但是每次显示异常后就既没有结束程序,也没有继续循环下去package ex13;
import java.util.Scanner;public class HexToDecimalConversion {
public static void main(String[] args) {
// TODO 自动生成方法存根
Scanner input=new Scanner(System.in);
boolean continueToInput=false;
do{
try{
//Prompt the user to enter a string
System.out.print("Enter a hex number: ");
String hex=input.nextLine();
System.out.println("The decimal value for hex number "
+hex+" is "+hexToDecimal(hex.toUpperCase()));
continueToInput=false;
}
catch(NumberFormatException ex){
ex.printStackTrace();
continueToInput=true;
}
}while(continueToInput==true);
}
private static int hexToDecimal(String hex){
int decimalValue=0;
for(int i=0;i<hex.length();i++){
char hexChar=hex.charAt(i);
decimalValue=decimalValue*16+hexCharToDecimal(hexChar);
}
return decimalValue;
}
public static int hexCharToDecimal(char ch){
if(ch>='A'&&ch<='F')
return 10+ch-'A';
else if(ch>'0'&&ch<'9')
return ch-'0';
else
throw new NumberFormatException("Invalid number format");
}
}
java.lang.NumberFormatException: Invalid number format
at HexToDecimalConversion.hexCharToDecimal(HexToDecimalConversion.java:42)
at HexToDecimalConversion.hexToDecimal(HexToDecimalConversion.java:31)
at HexToDecimalConversion.main(HexToDecimalConversion.java:17)
Enter a hex number: 3u
Enter a hex number: java.lang.NumberFormatException: Invalid number format
at HexToDecimalConversion.hexCharToDecimal(HexToDecimalConversion.java:42)
at HexToDecimalConversion.hexToDecimal(HexToDecimalConversion.java:31)
at HexToDecimalConversion.main(HexToDecimalConversion.java:17)
3b
The decimal value for hex number 3b is 59
Enter a hex number: 3y
java.lang.NumberFormatException: Invalid number format
at HexToDecimalConversion.hexCharToDecimal(HexToDecimalConversion.java:42)
at HexToDecimalConversion.hexToDecimal(HexToDecimalConversion.java:31)
at HexToDecimalConversion.main(HexToDecimalConversion.java:17)
Enter a hex number: 3u
Enter a hex number: java.lang.NumberFormatException: Invalid number format
at HexToDecimalConversion.hexCharToDecimal(HexToDecimalConversion.java:42)
at HexToDecimalConversion.hexToDecimal(HexToDecimalConversion.java:31)
at HexToDecimalConversion.main(HexToDecimalConversion.java:17)
3b
The decimal value for hex number 3b is 59