2016-12-29 40 views
0
public class GameLogic { 
    Scanner input = new Scanner(System.in); 

    public void buyHouse(Player player, int propertyIndex) { 
     boolean boughtHouse = false; 
     GameboardSquare property = Board.getMonopolyBoard()[propertyIndex]; 
     int a = 0; 
     if (property.getNumberHouse() <= 3) { 
      System.out.println("How many houses you want to buy? it must be between 1-4: "); 
      a = input.nextInt(); 
      System.out.println(a); 
     } 
    } 
} 

有人可以告訴我我做錯了什麼。每次運行代碼時,它都不會讓我輸入任何內容到控制檯中,它只會在線路a = input.nextInt();上變得糟糕。我試圖調試它在調試器,但仍然不知道在哪裏崩斷,這是我的測試案例也Java掃描儀沒有從用戶輸入

public class GameLogicTest extends TestCase { 
    public void testBuyHouse() throws Exception { 
     Player player = new Player(1000,0); 
     GameboardSquare property = new GameboardSquare("Seb", 100,50,50,100,150,200,250,300,200,0,3,0,player,false); 
     GameboardSquare[] gameboard = new GameboardSquare[1]; 
     gameboard[0] = property; 
     GameLogic game = new GameLogic(); 
     Board board = new Board(gameboard); 
     board.setMonopolyBoard(gameboard); 
     game.buyHouse(player,0); 
    } 
} 

https://i.stack.imgur.com/Dovlc.png

也打印輸出

+0

你在哪裏運行你的代碼?在IDE或控制檯?當你在'a = input.nextInt();'行中說'被卡住'時,你究竟是什麼意思? – Nurjan

+2

看起來它並沒有卡住,而是等待着你在這個地方的輸入,你正在運行你的代碼。輸入你輸入的內容,然後按回車。它應該工作! –

+0

考慮使用System.console()從控制檯讀取輸入。 而且,根據您的啓動方式,控制檯可能無法使用或System.in無法使用。 –

回答

-2

我以後應該有一個換行符不太清楚「卡住」是什麼意思,但是我對掃描儀的一個常見錯誤是,使用input.nextInt()時,它不會在單獨的行中讀取兩個整數。

在這種情況下,例如:

輸入:

3 4 

7 

掃描儀很容易閱讀input.nextInt第一兩個整數()但難道不到達第三個,因爲它是在一條單獨的線。要解決您可以使用的問題:

Integer.parseInt(input.nextLine()); 

在第一行的末尾。

您還可以使用:

input.nextLine().split(" "); 

這將使你的字符串通過在該行空格分隔元素的數組。但是,那麼你需要分別解析它們。

+0

這是不正確的。向這個公共類Zomg輸入''3 4 \ n \ n7「'{public static void main(String [] args){java.util.Scanner in = new java.util.Scanner(System.in); for(;;){System.out.println(in.nextInt()); }}}'很好。正如[文檔說明](https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html)所述,「掃描器使用定界符模式將輸入分解爲令牌匹配空白。「換行符不被特別處理。 –