2013-10-02 58 views
0

我必須爲這段代碼使用不同的方法,沒有java快捷方式! 這裏是我的代碼:在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結束的循環結束程序?表示十六進制數爲整數

+1

你一定有一個非常庇護的生活。 –

+5

我確定這不會是「我從來沒有在我的整個生活中有這麼多麻煩」的最後一種情況,但是你的問題很簡單,解析HEx字符串的內容http://stackoverflow.com/questions/ 11194513/convert-hex-string-to-int,並且打印非常簡單。 –

+0

這是一個人們幫助任何有麻煩的人的地方。所以不需要一次又一次地使用「請PLEASE PLEASE」這樣的單詞。即使沒有這些詞語,資源人員也會回答你。嘗試更專業。 – Malintha

回答

0

要轉換的字符串,可以使用Integer.toString(String, int);方法:

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

第一個參數是要轉換的字符串,第二個是基數說明書中,因此是該值的16爲現在。

要完整,Integer.toString(Integer,int)是相反的,如果是上述情況:它將Integer值轉換爲指定基數中的字符串。

只需創建一個名爲convert的方法,並使其返回。

打印整數不是一個大問題,您可以使用+運算符將它連接到任何字符串。

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

此外,請記住,你有一個小問題:

這條線,使您的字符串大寫所有charachters:

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... 
} 
+0

OP表示他不能使用庫或API來解析十六進制(他稱之爲「捷徑」),因爲這是一個CS任務。你的答案大多不適用 – Bohemian

+0

@波希米亞嗯,這是真的。這個要求超出了這個世界。如果是C語言或ASM,但是對於Java,我會理解它 - 繼續...讓窮人教會如何使用提供的API並且不必一遍遍地重新發明輪盤會更有意義再次。特別是OP是一門藝術專業... – ppeterka

+0

其實我完全同意你的觀點:練習應該是現實的並且使用現實的解決方案(Java API)。我認爲學習語言*意味着*學習API,但是我可以通過使用「原始」java來理解一些作業,從而獲得語言基礎。但只有極少數。 – Bohemian