0

我必须对这段代码使用不同的方法,没有 java 快捷方式!这是我的代码:

import java.io.*; 

import java.util.Scanner; 

public class pg3a { 

public static void main(String[] args) throws IOException { 

   Scanner keyboard = new Scanner(System.in); 

   String hex; 
   char choice = 'y'; 
   boolean isValid = false; 
   do { 
      switch (choice) { 
   case 'y': 
      System.out.print("Do you want to enter a hexadecimal number? "); 
      System.out.print("y or n?: "); 
      choice = keyboard.next().charAt(0); 

      System.out.print("Enter a hexadecimal number: #"); 
      hex = keyboard.next(); 
      hex = hex.toUpperCase(); 
      int hexLength = hex.length(); 
      isValid = valid(hex); 
        if (isValid) { 
            System.out.println(hex + " is valid and equal to" + convert(hex)); 
        } 
        else { 
           System.out.println(hex + " is invalid."); 
       } 
     case 'n': 
       System.out.println("quit"); 
      } 
      }while (choice != 'n'); 
} 

public static boolean valid (String validString) { 

  int a = 0; 
  if (validString.charAt(0) == '-') { 
  a = 1; 
} 
 for (int i=a; i< validString.length(); i++) { 
    if (!((validString.charAt(i) >= 'a' && validString.charAt(i) <= 'f')|| (validString.charAt(i) >= 0 && validString.charAt(i) <= 9))) 
{ 
return false; 
} 
} 
return true; 
} 

我怎样才能使它在程序检查十六进制数的所有参数并计算它应该是十进制形式后,它打印出十六进制数是有效的,然后十进制数是什么?

另外,如何使它成为一个以 ^z 或 ^d 结尾的循环来结束程序?

4

1 回答 1

0

要将表示十六进制数的字符串转换为整数,可以使用以下Integer.toString(String, int);方法:

Integer parsedValue = Integer.parseInt(hex, 16);

第一个参数是要转换的字符串,第二个是基数规范,因此这个值现在是 16。

完整地说, Integer.toString(Integer, int) 与上述相反:它将 Integer 值转换为指定基数中的字符串。

只需创建一个名为 的方法convert,并使其返回 this。

打印一个整数不是什么大问题,您可以使用 + 运算符将它连接到任何字符串。

System.out.println("The value: " + parsedValue);

另外,请记住,您有一个小问题:

此行使字符串中的所有字符都大写:

hex = hex.toUpperCase(); 

但是在这里你检查小写字母:

if (!((validString.charAt(i) >= 'a' && validString.charAt(i) <= 'f')|| (validString.charAt(i) >= 0 && validString.charAt(i) <= 9))) 

要么做hex=hex.toLowerCase();,要么调整上述条件以检查在'A'和'F'之间。

不得不提一下,虽然检查字符串的有效性而不是转换为数值是不同的:它涉及一个 try-catch 块:尝试转换数字,如果它失败,它是无效的......

Integer value; //have to declare it here to be able to access it outside of the try block
try {
   value = Integer.parseInt(hex,16);  

} catch(NumberFormatException e) {
   //if you want to get the stack trace
   e.printStackTrace(); //if not using a proper logging framework!!! Don't just print it!
   //handle the situation: e.g. break loop, write eror message, offer retry for user, etc...
}
于 2013-10-02T06:04:36.920 回答