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; 
} 

プログラムが 16 進数のすべてのパラメーターをチェックし、それが 10 進数形式である必要があるものを計算した後、16 進数が有効であることを出力し、次に 10 進数が何であるかを出力するようにするにはどうすればよいですか??

また、プログラムを終了するために ^z または ^d で終了するループにする方法を教えてください。

4

1 に答える 1

0

Integer.toString(String, int);16 進数を表す文字列を整数に変換するには、次のメソッドを使用できます。

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

最初の引数は変換される文字列で、2 番目は基数の指定であるため、現時点ではこの値は 16 です。

完全を期すために、Integer.toString(Integer, int) は上記の逆です。指定された基数で整数値を文字列に変換します。

という名前のメソッドを作成し、convertこれを返すようにします。

整数を出力することは大きな問題ではありません。 + 演算子を使用して任意の文字列に連結できます。

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 に答える