2014-10-11 2 views
0

Задача состоит в том, чтобы позволить пользователю вводить денежную сумму в виде ставки (этот номер должен быть больше 0 ставок> 1).Java Dice game issue

1) Выполнены две кости (1-6).

2) Их сумма рассчитана. Если эта сумма равна 7, пользователь выигрывает 4 $, и если они проигрывают, пользователь теряет 1 $ (Ex: User вводит 5 $ в качестве начальной ставки, выигрыши = 5 + 4 = 9 $ now-loses = 5-1 = 4 $ сейчас).

После того, как пользователь играет, мы должны спросить их, хотят ли они снова играть и, по существу, запустить программу, используя инструкцию while.

Я прокомментировал утверждения print в строках 43 и 50, потому что произойдет то, что эти две строки будут печататься перед первоначальным вопросом о том, сколько пользователь хотел бы войти (вот почему я прокомментировал их).

Теперь проблема заключается в том, что после того, как пользователь вводит сумму, которую он/она хочет сделать, система затем вычисляет сумму, которую они выигрывают/теряют, и печатает это. Тем не менее, он пропускает инструкцию печати, спрашивая их, хотят ли они снова играть. Почему это? Я знаю, что что-то не так, потому что изначально программа пропускала первый оператор печати и сразу переходила ко второй и третьей функции. Любая помощь?

Спасибо!

// Edit: Кроме того, если это не было уже очевидно, я совершенно новой для программы, поэтому, пожалуйста, не стесняйтесь критиковать меня в любом случае ^^

//Dice Game 
//10/11/14 
import java.util.Random; 
import java.util.Scanner; 

public class diceGame2 
{ 
    //Instance Variables 
    private String play = "yes"; 
    private int cash; 
    private int sum; 
    private int winnings; 
    Scanner scan = new Scanner(System.in); 
    Random rand = new Random(); 


    //Constructor 
    public diceGame2() 
    { 
     cash=0; 
     sum=0; 
     winnings=0; 
    } 
    public void game() 
    { 
    do 
    { 
     System.out.println("Please enter the amount of money you would like to bet"); 
     cash=scan.nextInt(); 
     if(cash<1) 
     { 
      System.out.println("Please enter a bet greater than 1$."); 
      cash=scan.nextInt(); 
     } 
    }while((play.equals("yes")&&cash<0)); 
    } 
    public int getDice() 
    { 

     int dice = rand.nextInt(6) + 1; 
     System.out.println("The number rolled was a" + " " + dice); 
     System.out.println(); 
     return dice; 
    } 
    public int getSum(int d1, int d2) 
    { 
     sum = d1+d2; 
     System.out.println("Their sum is" + " " + sum + " " + "so..."); 
     System.out.println(); 
     return sum; 
    } 
    public int getWinnings(int sum) 
    { 
    if(sum==7) 
    { 
     cash += (4); 
     System.out.println("You have won" + " " + "4$."); 
    } 
    else 
    { 
     cash -= (1); 
     System.out.println("You have lost" + " " + "1$."); 
    } 
    System.out.println("You current have" + " " + cash + " " + "dollars left to bet"); 
    return winnings;  
    } 
    public String getPlay() 
    { 
     System.out.println("Do you want to play again"); 
     play = scan.next(); 
     return play; 
    } 

}//Class 




//Dice Game Runner 
//10/11/14 
public class diceGameRunner 
{ 
    public static void main(String[]args) 
    { 
    String play = "yes"; 
    while((play.equals("yes"))) 
    { 
    diceGame2 d1 = new diceGame2(); 
    int dice1, dice2, sum; 
    double money; 

    d1.game(); 
    dice1 = d1.getDice(); 
    dice2 = d1.getDice(); 
    sum = d1.getSum(dice1, dice2); 
    money = d1.getWinnings(sum); 
    play = d1.getPlay(); 
    } 


    } 

}

+0

Я просто просмотрел это, поэтому я не прочитал его должным образом (пока), но сразу у вас есть цикл while, содержащий безусловный оператор break, поэтому цикл будет выполняться только один раз. Не знаю, является ли это вашей проблемой, но это похоже на ошибку. Другими словами, 'while' действует эквивалентно' if'. – bcsb1001

+0

Вам нужно опубликовать свой основной метод или показать, что ваши методы называются –

+0

@ bcsb1001 Единственная причина, по которой я поставил оператор break, состоит в том, что без него он застрял бы в операторе while. Я знал, что он будет работать только один раз из-за инструкции break, я просто не уверен, как заставить его покинуть цикл после запроса печати. – user3657449

ответ

0

Есть еще пара проблем с вашим кодом. Во-первых: Вы сказали, что без заявления о прерывании ваш цикл while никогда не прерывается. Это потому, что условие всегда будет истинным. Вы никогда не меняете условие в цикле, всегда заставляя его быть истинным.

Второе: у вас есть «cash = - (-1);» Там есть дополнительный знак.

Наконец-то (дополнительная заметка): у вас есть петля в вашем объекте. Это затруднит вызов любого из ваших методов и очищение кода. Попробуйте переместить цикл while вне вашего объекта и сделать методы объекта только для выполнения ОДНОЙ задачи.

EDIT: Вот пример кода того, что вы должны делать. Это было сделано через ~ 10 минут и должно быть изменено так, как вам хочется. Это пример того, как вы должны настроить класс и выполнять цикл.

Основной метод:

import java.util.Scanner; 

/** 
* 
* @author Tyler Weaver 
*/ 
public class Test { 
    public static void main(String[] args) { 
     String play = "yes"; 
     int cash; 
     Scanner scan = new Scanner(System.in); 

     do { 
      System.out.printf("Enter cash amount: "); 
      cash = scan.nextInt(); 
     } while (cash < 1); 

     DiceGame game = new DiceGame(cash); 

     while (play.equalsIgnoreCase("yes") && cash > 0) { 
      int dice1 = game.roll(); 
      int dice2 = game.roll(); 

      game.calcCash(dice1 + dice2); 
      cash = game.getCash(); 
      System.out.printf("Your new cash amount is $%,.2f%n", (float) cash); 
      System.out.printf("Do you want to play again? "); 

      play = scan.next(); 
     } 
    } 
} 

Это пример того, что класс должен выглядеть минус другие необходимые методы:

import java.util.Random; 

/** 
* 
* @author Tyler Weaver 
*/ 
public class DiceGame { 
    private int cash; 
    private Random gen; 

    public DiceGame(final int cash) { 
     this.cash = cash; 
     gen = new Random(); 
    } 

    public int roll() { 
     return gen.nextInt(6) + 1; 
    } 

    public void calcCash(final int sum) { 
     cash += (sum == 7) ? 4 : -1; 
    } 

    public int getCash() { 
     return cash; 
    } 
} 

Это не ответ. Это пример кода из вашей проблемы. Вам нужно будет выяснить, как реализовать именно то, что вам нужно.

Обратите внимание, что класс выполняет только одну операцию для каждого метода. Это просто соглашение о кодировании. Также обратите внимание, как я запрашиваю наличные деньги вне цикла в основном методе и вычисляю внутри. Я также спрашиваю, хотят ли они снова играть в конце метода, чтобы обновить условную «игру». Денежные средства обновляются с помощью методов в классе.

+0

После загрузки я исправил и оператор break, и cash = - (-1). Теперь у меня есть время: while ((play.equalsIgnoreCase («да») && cash <1)), а мои наличные деньги - = (1) ;. Оба из них были легкими исправлениями. Я немного запутался в том, как перемещать цикл за пределы моего объекта. – user3657449

+0

Я не дам вам ответа напрямую, попробуйте сделать все методы вашего объекта одной задачей. Если вам нужно написать больше методов, тогда сделайте это. Но метод объекта должен производить только один вывод. После написания этого кода вы можете включить любые условные обозначения в основной метод. Например, имея цикл while, в основном методе игры, в то время как ответ «да». Вы можете запросить да в конце цикла. –

+0

Я не решаюсь писать код, не видя, что вы пытаетесь в первую очередь. –