2017-07-07 53 views
1
final int MAX_ROUNDS = 5; 
String name1,name1; 

Scanner keyboard = new Scanner(System.in); 
System.out.println("Please enter player1 name: "); 
name1 = keyboard.nextLine(); 
System.out.println("Please enter player2 name: "); 
name2 = keyboard.nextLine(); 
Player player1 = new Player(name1); 
Player player2 = new Player(name2); 

Dealer dealer = new Dealer(); 

    for(int count = 1; count <=MAX_ROUNDS; count++) 
    { 
     System.out.println("------------------"); 
     System.out.ptintf("Round : %d",count); 
     dealer.rollDice(); 
     player1.makeGuess(); 
     player2.makeGuess(); 
     roundResults(); 

摘錄自屬於Player類的makeGuess方法。是否可以在Java中的方法內聲明一個掃描器變量來讀取鍵盤輸入?

public void makeGuess() 
{ 
Scanner keyboard = new Scanner(System.in) 

System.out.printf("Please guess 'even' or 'odd' "+ 
     "%s.", name); 
String answer = keyboard.nextLine(); 

     if(answer.equalsIgnoreCase("even") 
      guess = "Cho (even)"; 
     else 
      guess = "Han (odd); 
    } 

當方法執行時我沒有被提示任何東西我不明白爲什麼我沒有包含程序的所有內容。只是想知道如果任何人眼睛這個代碼可以看到明顯的東西,否則,我會拿出猜測提交。

+0

你確定你正在運行已編譯的東西嗎?在makeGuess函數中,如果檢查答案的話會有一個缺失)。 –

+1

無論如何,你不應該在每種方法中創建一個掃描儀。創建一次掃描程序並將其作爲參數傳遞給需要它的方法。 –

+0

是的,我在程序執行前修復了缺失的花括號。所以在這些情況下,我應該將Scanner對象傳遞給方法。我只需要一個import語句,然後在我的主類中創建對象,然後將其傳遞給makeguess方法。感謝你的幫助與東西。仍然沒有提示我輸入我會嘗試一些事情。 – needyPheonix

回答

0

雖然我無法找到任何你的代碼錯誤,如果我不得不採取一個受過教育的猜測,該dealer.dice()方法可能有一個無限循環,這是造成你的整個程序發生故障

0

有你試圖打印出從掃描儀獲取其值的變量name1,name2等變量,看它是否工作?將它們的值設置爲keyboard.nextLine()後立即嘗試執行此操作。這應該讓你更好地瞭解問題所在。

+0

我想出了我沒有從makeGuess()獲得預期結果的原因。我有兩個球員課程,我正在研究的主要方法程序碰巧正在引用其他球員類/ makeGuess()。所以我正在更新猜測,但沒有發生。我修好了,它現在可以工作。並學會了如何將Scanner對象作爲參數而不是創建一個新參數。 – needyPheonix

相關問題