2015-02-23 121 views
0

我想要用戶插入他們想要從桌子上取下多少支桿(從1支到3支),然後我想讓程序輸出移動後留在桌上的支桿數量。爲什麼每次都連續要求用戶輸入2次?

我明白了這一點,但我不明白爲什麼它要求我在打印結果(並且第二個用戶輸入是計數的)之前將用戶輸入放在一行中兩次。

import java.util.Scanner; 
import java.io.InputStream; 

public class GameOfSticks { 
public static int sticks = 10; 
public static int sticksToTake; 

public static void main(String[] args) { 
    Scanner userInputScanner = new Scanner(System.in); 
    System.out.println("The number of sticks on the table is " + sticks + "."); 
    System.out.print("Insert how many sticks you want to take: "); 
    makeHumanMove(sticksToTake); 
    System.out.println(getNumberOfSticksOnBoard()); 

} 

public static int getNumberOfSticksOnBoard() { 
    sticks = sticks - makeHumanMove(sticksToTake); 
    return sticks; 
} 

public static int makeHumanMove(int sticksToTake) { 
    Scanner userInputScanner = new Scanner(System.in); 
    while (true) { 
     int enteredNumber; 
      try { 
       enteredNumber = userInputScanner.nextInt(); 
      } catch (Exception e) { 
       System.out.print("Not a number, enter a number from 1 to 3: "); 
       userInputScanner = new Scanner(System.in); 
       continue; 
      } 
     if (enteredNumber < 1 || enteredNumber > 3) { 
      System.out.print("Incorrect number, enter a number from 1 to 3: "); 
      continue; 
     } else { 
      sticksToTake = enteredNumber; 
      return(sticksToTake); 
     } 
    } 
} 

}

回答

0

是這樣工作的,因爲您所呼叫makeHumanMove方法兩次。第一次主要,第二次在getNumberOfSticksOnBoard。

+0

謝謝!我無法相信我無法意識到這一點。 – Tymu888 2015-02-23 12:26:40

1

您正在調用方法makeHumanMove兩次。一旦進入主要的方法,然後再在getNumberOfSticksOnBoard方法。如果您在主要方法中刪除makeHumanMove(sticksToTake);,那麼它會正常工作,因爲它只是在getNumberOfSticksOnBoard方法中調用一次。

0

因爲您正在調用makeHumanMove方法兩次。 第一個

makeHumanMove(sticksToTake); 

和第二個中的getNumberOfSticksOnBoard方法內;

System.out.println(getNumberOfSticksOnBoard()); 

你可以嘗試這樣(也可以修改這個,我只嘗試輸入一次。

public class GameOfSticks { 
    public static int sticks = 10; 
    public static int sticksToTake; 

    public static void main(String[] args) { 
     System.out.println("The number of sticks on the table is " + sticks + "."); 
     System.out.print("Insert how many sticks you want to take: "); 
     Scanner userInputScanner = new Scanner(System.in); 
     int enteredNumber; 
     while (true) { 

      try { 
       enteredNumber = userInputScanner.nextInt(); 
      } catch (NumberFormatException e) { 
       System.out.print("Not a number, enter a number from 1 to 3: "); 
       userInputScanner = new Scanner(System.in); 
       continue; 
      } 
      makeHumanMove(enteredNumber); 
      System.out.println(getNumberOfSticksOnBoard()); 
     } 



    } 

    public static int getNumberOfSticksOnBoard() { 
     sticks = sticks - makeHumanMove(sticksToTake); 
     return sticks; 
    } 

    public static int makeHumanMove(int enteredNumber) { 

     if (enteredNumber < 1 || enteredNumber > 3) { 
      System.out.print("Incorrect number, enter a number from 1 to 3: "); 
     } else { 
      sticksToTake = enteredNumber; 
      return (sticksToTake); 
     } 
     return sticksToTake; 

    } 
} 
0

只需刪除線

makeHumanMove(sticksToTake); 

在主法。 在下一行

System.out.println(getNumberOfSticksOnBoard()); 

方法

getNumberOfSticksOnBoard() 

裏面,你再打電話

makeHumanMove(sticksToTake) 

。這就是你連續做兩次輸入的原因。結果也是這樣錯誤的。

相關問題