2013-05-09 17 views
0

好吧,所以對於我的java類的最終項目,我們應該實現一個簡化版的craps,運行10輪。每當我運行這個,我得到的行「int b = std.nextInt()」的NoSuchElementsException。這是爲什麼?我打開了一個掃描儀對象,但它不會讓我輸入數據繼續遊戲,而是拋出異常。我也得到了「System.out.println(now.toString())」的相同例外;「在主要方法行。怎麼可能沒有任何元素?在Java中獲取NoSuchElementsException?

public class Player { 
private int bet;//how much was bet 
private boolean Pass;//they chose pass 
private boolean DPass;//they chose dont pass 
private boolean win;//did they win? 
private int money=20;//how much they have 
//private String continuity="initial"; 

//Modifier methods 
public void newBet(int x){this.bet=x;} 
public void Pass(boolean x){this.Pass=x;} 
public void DPass(boolean x){this.DPass=x;} 
public void didYouWin(boolean x){this.win=x;} 
public void newMoney(int x){this.money+=x;} 
//public void keepPlaying(String s){this.continuity=s;} 

//Accessor methods 
public int getBet(){return this.bet;} 
public boolean getPass(){return this.Pass;} 
public boolean getDPass(){return DPass;} 
public boolean getResult(){return this.win;} 
public int getMoney(){return this.money;} 
public boolean isWinning(){return this.win;} 
//public String playing(){return continuity;} 
public String toString(){ 
    return "Bet: $"+this.bet+"\nBet on Pass: "+this.Pass+"\nBet on Don't Pass: "+this.DPass+"\nMoney:S"+this.money; 
} 

//Constructor method 
public Player(int bet, boolean pass, boolean dpass){ 
    this.bet=bet; 
    this.Pass=pass; 
    this.DPass=dpass; 
} 

}

實際的遊戲代碼< < < < < < < < < < < < < < < < < < < < < < < < < <

import java.util.*; 

公共類trial1 {

public static int RollDice(){   //Method for Dice Roll 
    int[] die1={1, 2, 3, 4, 5, 6}; 
    int[] die2={1, 2, 3, 4, 5, 6}; 
    Random r=new Random(); 
    int i1=r.nextInt(6-0); 
    int i2=r.nextInt(6-0); 
    int sum=die1[i1]+die2[i2]; 
    System.out.println("\nDie 1: "+die1[i1]+"\nDie 2: "+die2[i2]+"\nTotal Sum: "+sum); 
    return sum; 
} 

public static int Roll7(){//roll for 7 
    if (RollDice()==7){ 
     return 2; 
    } 
    else return Roll7(); 
} 

public static int PointRoll(int x){//If person rolled 4,5,6,8,9,10... 
    int a=RollDice(); 
    if (a==x){ 
     return Roll7(); 
    } 
    else if (a==7){ 
     return 1; 
    } 
    else return PointRoll(x); 
} 

public static int ComeOutRoll(){//1 = pass loses, 2 = pass wins, 3 = pass loses and dont pass gets nothing 
    int x=RollDice(); 
    if ((x==2)||(x==3)) { 
     return 1; 
     } 
    else if ((x==7)||(x==11)){ 
     return 2; 
    } 
    else if (x==12){ 
     return 3; 
    } 
    else return PointRoll(x); 
} 
public static Player InitializeGame(){ 
    //initialize stats and player 
    System.out.println("Please enter how much you'd like to bet (max is $5)"); 
    Scanner std=new Scanner(System.in); 
    int b=std.nextInt(); 
    System.out.println("Please enter 1 if you bet PASS or 2 if you bet DON'T PASS"); 
    int p=std.nextInt(); 
    boolean betpass, betdpass; 
    if (p==1){ 
     betpass=true; 
     betdpass=false; 
    } 
    else { 
     betpass=false; 
     betdpass=true; 
    } 
    Player name=new Player(b, betpass, betdpass); 
    System.out.print(name.toString()); 
    std.close(); 
    return name; 
} 
public static Player BeginGame(Player name){ 
    //Start actual game process without the betting ie all the dice rolling and stat changing -->will return player's status 
    //boolean pass=name.getPass(); 
    //boolean neutral=false; 
    int result=ComeOutRoll(); 
    //find out if player won money or lost money 
    if (name.getPass()){//if player bet on pass 
     if (result==1){ 
      name.newMoney(name.getMoney()-name.getBet()); 
     } 
     else if (result==2){ 
      name.newMoney(name.getMoney()+name.getBet()); 
     } 
     else { 
      name.newMoney(name.getMoney()-name.getBet()); 
     } 
    } 
    else {//if player bet dont pass 
     if (result==1){ 
      name.newMoney(name.getMoney()+name.getBet()); 
     } 
     else if (result==2){ 
      name.newMoney(name.getMoney()-name.getBet()); 
     } 
     else { 
      name.didYouWin(false); 
     } 

    } 
    if (name.getMoney()<=0){name.didYouWin(false);}//setting win data for yes or no. IF no money, u lose 
    else {name.didYouWin(true);} 

public static Player Continue(Player name){//just like begin game, but adding the new bet 
    System.out.println("\nPlease enter how much you'd like to bet (max is $5)"); 
    Scanner std=new Scanner(System.in); 
    int b=std.nextInt(); 
    System.out.println("Please enter 1 if you bet PASS or 2 if you bet DON'T PASS"); 
    int p=std.nextInt(); 
    boolean betpass, betdpass; 
    if (p==1){ 
     betpass=true; 
     betdpass=false; 
    } 
    else { 
     betpass=false; 
     betdpass=true; 
    } 
    name.Pass(betpass); 
    name.DPass(betdpass); 
    name.newBet(b); 
    System.out.println(name.toString()); 
    return BeginGame(name); 
} 
public static void Loss(Player name){//losing message 
    System.out.println("YOU LOSE!!!!!!!! HAHAHAHAHAHA!!!!!\n"+name.toString()); 
} 
public static void End(Player name){//End game message 
    System.out.println("Thank you for playing!"); 
} 

public static Player Run(){ 
    Player name = InitializeGame(); 
    return BeginGame(name); 
} 

public static void main(String[] args){ 
    System.out.println("Welcome to my version of craps!"); 
    Player now=Run(); 
    for (int i=1;i<=10;i++){ 
     if (now.isWinning()){ 
      System.out.println("ROUND "+i); 
      System.out.println(now.toString()); 
      now=Continue(now); 
      i++; 
     } 
     else { 
      Loss(now); 
      System.out.print(now.toString()); 
      End(now); 
      i=11; 
     } 
    } 
} 

}

+0

該行代碼正在從控制檯獲取輸入。什麼時候拋出異常?它是在第一次嘗試輸入你的輸入之後嗎?還是在一些其他特定數量的投入之後? – Funkytown 2013-05-09 14:54:43

回答

0

的NoSuchElementsException意味着你試圖從掃描儀,std得到int,但沒有未來int。所以它會拋出這個錯誤,讓你知道你的輸入是不好的。

+0

但它甚至沒有給我輸入整數的機會。 – 2013-05-09 15:33:47

+0

所以它的第一個std.getInt()是拋出錯誤?或第二? – greedybuddha 2013-05-09 15:38:05

+0

第一個。 – 2013-05-09 16:23:05

0

從NoSuchElementException看來,您並不是從掃描儀讀取一個int。它將您的輸入解釋爲某種其他數據類型。