2015-02-11 68 views
1

所以基本上我創建一個投注計劃,使PLAYER1,Player2,Player3等都是對象,並各自具有的-1 5個初始化場,這意味着沒有賭,但。使用對象沒有構造函數參數的JAVA

我要求用戶輸入他們的下注數,(這些數字數組內的整數),他們可以有最多的五注,解釋-1五個初始化領域。

這裏的問題是我似乎不能找到一種方法,以具有一定的玩家只輸入1倍或2的投注,而另一個輸入端4和5的另一例如。我的程序強制每個用戶輸入5個整數,即使他們拒絕下注5次。 任何方式,我可以使這項工作?

因此,這裏是我的驅動程序類:(它的另一部分是無關緊要的)

System.out.println("Wheel : 0-32-15-19-4-21-2-25-17-34-6-27-13-36-11-30-8-23-10-5-24-16-33-1-20-14-31-9-22-18-29-7-28-12-35-3-26"); 
     System.out.println("Dealer…Place your bets"); 

     // initializing the six players of the game 

     Player player1 = new Player(-1,-1,-1,-1,-1); 
     System.out.println("Player 1: "); 
      int number1 = keyin.nextInt(); 
      int number2 = keyin.nextInt(); 
      int number3 = keyin.nextInt(); 
      int number4 = keyin.nextInt(); 
      int number5 = keyin.nextInt(); 
       System.out.println(""); 

     Player player2 = new Player(-1, -1, -1, -1, -1); 
     System.out.println("Player 2: "); 
      number1 = keyin.nextInt(); 
      number2 = keyin.nextInt(); 
      number3 = keyin.nextInt(); 
      number4 = keyin.nextInt(); 
      number5 = keyin.nextInt(); 
       System.out.println(""); 

     Player player3 = new Player(-1, -1, -1, -1, -1); 
     System.out.println("Player 3: "); 
      number1 = keyin.nextInt(); 
      number2 = keyin.nextInt(); 
      number3 = keyin.nextInt(); 
      number4 = keyin.nextInt(); 
      number5 = keyin.nextInt(); 
       System.out.println(""); 

     Player player4 = new Player(-1, -1, -1, -1, -1); 
      System.out.println("Player 4: "); 
      number1 = keyin.nextInt(); 
      number2 = keyin.nextInt(); 
      number3 = keyin.nextInt(); 
      number4 = keyin.nextInt(); 
      number5 = keyin.nextInt(); 
       System.out.println(""); 

     Player player5 = new Player(-1, -1, -1, -1, -1); 
      System.out.println("Player 5: "); 
      number1 = keyin.nextInt(); 
      number2 = keyin.nextInt(); 
      number3 = keyin.nextInt(); 
      number4 = keyin.nextInt(); 
      number5 = keyin.nextInt(); 
       System.out.println(""); 

     Player player6 = new Player(-1, -1, -1, -1, -1); 
      System.out.println("Player 6: "); 
      number1 = keyin.nextInt(); 
      number2 = keyin.nextInt(); 
      number3 = keyin.nextInt(); 
      number4 = keyin.nextInt(); 
      number5 = keyin.nextInt(); 
       System.out.println(""); 

這裏是我的球員其他類:

public class Player { 

int number1; 
int number2; 
int number3; 
int number4; 
int number5; 
// constructor for each player at the table 
public Player(int number1, int number2, int number3, int number4, int number5) { 

    this.number1 = number1; 
    this.number2 = number2; 
    this.number3 = number3; 
    this.number4 = number4; 
    this.number5 = number5; 

的數字1,數字代表...五個賭注。

而且澄清,用戶可以不被要求輸入某些字符串,整型,任何字符,讓程序知道他/她做輸入他們的賭注。它看起來像這樣

Player 1: 12 13 15 
Player 2: 0 5 4 
+2

您是否瞭解了名單? (或數組) – immibis 2015-02-11 02:43:17

+0

@immibis是的我有 – X1XX 2015-02-11 02:50:36

+0

假設keyin是一個'java.util.Scanner Object',程序總是要求五個數字,因爲你要讓程序要求五個數字。如果'nextLine()'的輸入只是'\ n'(返回鍵),假設它不是'nextInt()',而是使用'Integer.parseInt()'將字符串解析爲整數不要打賭,去下一個球員。或者建立你自己的約定,如果用戶輸入「沒有更多」或什麼的。然後在每個輸入處匹配你的輸入。 – anu 2015-02-11 02:58:14

回答

2

跟進你的評論Patrick。 這是你如何使用Integer.parseInt

...  
Player player2 = new Player(-1, -1, -1, -1, -1); 
System.out.println("Player 2: "); 
try { 
       number1 = Integer.parseInt(keyin.nextLine()); 
       number2 = Integer.parseInt(keyin.nextLine()); 
       number3 = Integer.parseInt(keyin.nextLine()); 
       number4 = Integer.parseInt(keyin.nextLine()); 
       number5 = Integer.parseInt(keyin.nextLine()); 
       System.out.println(""); 
    } 
    //Code will go to this block when user entered something other than integers 
    catch(NumberFormatException e) { 
     System.out.println("Done accepting bets from player2"); 
    } 
    ... 

另外,可能的keyin.nextLine()輸出存入一個字符串,並應用parseInt函數或評估它的一些「關鍵詞」你想,像這樣。

String keyedinString = keyin.nextLine(); 
if(keyinString.equalsIgnoreCase("done betting") { 
    throw new Exception(); 
} 

你很快就會意識到這個過程是多麼的重複。因此,正如其他人所說的,建議考慮使用數組和循環來完成任務。像這樣。

int[] player1Bets = new int[5]; 
for(int i=0;i<5;i++) { 
    try { 
     player1Bets[i] = Integer.parseInt(keyin.nextLine()); 
    } 
    catch(NumberFormatException e) { 
     System.out.println("Player1 took" + i + "bets. he is done betting"); 
    } 
} 
... 

這樣,而不是number1, number2, number3, number4 ...等你得的第一注中player1Bets[0], second bet in player1Bets[1] ......更容易打出來,和代碼。

希望事情很清楚。

+0

謝謝!順便說一下,我實現了上面的代碼,數組和try-catch,但由於某種原因,同樣的SOP不斷出現,儘管我的捕獲是不同的每個球員......? – X1XX 2015-02-11 04:21:27

+0

SOP?請解釋 ? – anu 2015-02-11 07:05:00

+0

System.out.println @anu – X1XX 2015-02-11 07:25:42

0

有很多方法,你可以這樣做:

  • 使用1,2,3,4,5參數的構造函數,而不是隻要有一個5參數。
  • 更好的方法是使用BUilder模式,因爲稍後您可能需要放置超過5次的投注,所以不要繼續添加構造函數,這是更好的選擇。
  • 您也可以使用可變參數。見When do you use varargs in Java?
  • 就像@immibs說,你也可以有像一個成員變量列表,然後您可以添加到你想要的
+0

其實五次下注是允許的最大數量!但是,謝謝你回覆 – X1XX 2015-02-11 02:46:07

+0

是的,但我只是舉了一個例子,以後想象玩家可以進行6次或更多次投注。 – Kode 2015-02-11 02:48:26

0

您可以隨時循環輸入,並指定一定數量的循環,以儘可能多終止。例如;投注爲1,2和3,並且從那裏停止輸入,用戶可以輸入0然後退出循環,或者程序可以每次詢問用戶他們是否想要再次投注。例如,

下注:1

是否要再次下注?按1,不是和0爲不

如果這個問題更多的是對邏輯的一部分,那麼這可能會幫助你。我希望我有所幫助,我是新來者,我試着回答問題以提高我的技能和經驗。 :)

0

如果您想傳遞多個參數並且參數計數不固定,則您可能需要「構建模式」。請參閱https://jlordiales.wordpress.com/2012/12/13/the-builder-pattern-in-practice/瞭解更多關於「Builder Pattern」的信息。

下面是一個例子:

如果你有一個User類有多個參數,

public class User { 
    private final String firstName; // required 
    private final String lastName; // required 
    private final int age; // optional 
    private final String phone; // optional 
    private final String address; // optional 

    public static class UserBuilder { 
    private final String firstName; 
    private final String lastName; 
    private int age; 
    private String phone; 
    private String address; 
    public UserBuilder(String firstName, String lastName) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 
    public UserBuilder withAge(int age) { 
     this.age = age; 
     return this; 
    } 
    public UserBuilder withPhone(String phone) { 
     this.phone = phone; 
     return this; 
    } 
    public UserBuilder withAddress(String address) { 
     this.address = address; 
     return this; 
    } 
    public User build() { 
     // if(age < 0) { ... } return new User(this); 
     // not thread-safe, a second thread may modify the value of age 
     User user = new User(this); 
     if (user.getAge() < 0) { 
     throw new IllegalStateException("Age out of range!"); // thread-safe 
     } 
     return user; 
    } 
    } 

    private User(UserBuilder builder) { 
    this.firstName = builder.firstName; 
    this.lastName = builder.lastName; 
    this.age = builder.age; 
    this.phone = builder.phone; 
    this.address = builder.address; 
    } 

    public String getFirstName() { 
    return firstName; 
    } 
    public String getLastName() { 
    return lastName; 
    } 
    public int getAge() { 
    return age; 
    } 
    public String getPhone() { 
    return phone; 
    } 
    public String getAddress() { 
    return address; 
    } 
} 

使用下面的方法來建立一個新的User實例:

User user1 = new User.UserBuilder("Jhon", "Doe") 
        .withAge(30) 
        .withPhone("1234567") 
        .withAddress("Fake address 1234") 
        // maybe more parameters 
        .build(); 
User user2 = new User.UserBuilder("Tom", "Jerry") 
        .withAge(28) 
        // maybe more parameters 
        .build(); 
相關問題