2014-12-05 81 views
3

由於2年的生鏽,我一直在從頭開始學習Java,而且我正在玩一個簡單的隨機生成器代碼。我的問題是,當用戶被問及他想要的最高擲骰數時,它必須是一個數字(int)類類型。如何比較變量以查看它是否是正確的類類型?

我試圖創建一個if語句並將一個變量與它的類進行比較,而不是讓我的IDE停止並在用戶輸入字母的情況下向我顯示錯誤消息。

這裏是我的代碼(這是有史以來最簡單的代碼,但它是安全地說,我是新和激勵自己再學習Java。):

package firstguy; 

import java.util.Random; 
import java.util.Scanner; 

public class randomnum { 
    public static void main(String[] args){ 
     Random dice = new Random(); 
     Scanner userin = new Scanner(System.in); 
     int number; 
     int highnum; 

     System.out.println("What's the highest roll you want? \n"); 
     highnum = userin.nextInt(); 



     for(int counter=1; counter<= highnum; counter++){ 
      number= 1 + dice.nextInt(highnum); 
      System.out.println("This is the number " + number); 
     } 
    } 
} 

我希望能夠比較highnum,在這裏查看它是否保持類類型爲int而不是字母。如果輸入字母或字符,則應顯示消息或重複提問。我一直在努力尋找這個問題,但我不斷得到比較同一類類型的兩個變量的結果。

是否沒有辦法將變量與類類型進行比較?

+0

不應該有一個C++標籤 – 2014-12-05 19:04:52

回答

7

Java的原始類型沒有類。它們的包裝類型可以,但是你的代碼不會使用它們。

你要做的是檢查最終用戶輸入是否存在表示整數與其他所有字符的字符組合。這樣做相對容易,因爲Scanner爲各種數據類型提供了方法hasNext...。您可以在一個循環中使用hasNextInt(),丟棄無用輸入,就像這樣:

System.out.println("What's the highest roll you want? \n"); 
while (!userin.hasNextInt()) { 
    System.out.println("Please enter an integer."); 
    userin.nextLine(); 
} 
// Since we reached this point, userin.hasNextInt() has returned true. 
// We are ready to read an integer from the scanner: 
highnum = userin.nextInt(); 
+0

這很有趣。非常感謝!我現在明白了hasNext方法的用處。我正在按照if語句的思路思考。 – OrangeLime 2014-12-05 19:13:52

1

nextInt()(或其他大多數nextXYZ方法,對於這個問題),拋出一個InputMismatchException,如果他們遇到輸入不符合他們的要求(例如,在nextInt呼叫中的字母)。因此,一個選擇是簡單地抓住它:

int highnum; 
try { 
    highnum = userin.nextInt(); 
} catch (InputMismatchException e) { 
    System.out.println ("Wrong input encountered"); 
} 
+0

你能告訴我「e」是什麼嗎?我只聽說過「捕捉」和錯誤處理,但從來沒有機會充分理解,但它似乎是一種提供消息的方式,而不是簡單地在IDE中引發異常錯誤。 – OrangeLime 2014-12-05 19:15:54

+0

它是名稱變量,類型爲InputMistmatchException – 2014-12-05 19:16:30

+0

@OrangeLime yes,'e'我們正在捕獲InputMismatchException的實例。如果你願意,你可以在'catch'塊中使用它。例如:'System.out.println(「遇到錯誤的輸入,錯誤:」+ e);' – Mureinik 2014-12-05 19:18:16

-2

試試這個:

boolean go = true; 

System.out.println("What's the highest roll you want? \n"); 
     while(go){ 
     try{ 
     highnum = userin.nextInt(); 
     go = false; 
    catch(Exception e){ 
     System.out.println("Please type in an integer: "); 
     highnum = userin.nextInt(); 
     } 

} 
+0

您的帖子已被標記爲低質量的答案。請添加一些信息或解釋到您的文章。 – 2014-12-05 19:16:00

+0

很酷,如果發生錯誤(在第一次輸入時),您必須輸入兩次新的東西。 – Tom 2014-12-05 19:33:39

1

什麼你要找的是不是一個方法來「一變量比作類類型 「,而是檢查String以查看它是否具有正確的格式。如果你想看看一個String僅由數字,最簡單的方法是使用matches和正則表達式:

if (inputString.matches("\\d+")) { 
    ... the input is valid 
} else { 
    ... complain 
} 

正則表達式在這裏的意思是「一個或多個數字」。您也可以在Scanner上使用hasNextInt,或在Scanner上使用nextInt並捕獲異常,或使用Integer.parseInt(inputString)並捕獲異常,僅舉幾例。

+0

提供許多方法給你一個 – 2014-12-05 19:18:05

相關問題