2016-09-15 5 views
0

Я пытаюсь написать простую программу с переводом монет и задаюсь вопросом, смогу ли я помочь. Я довольно новичок в Java и просто пытался спросить пользователя, сколько раз они хотели бы перевернуть монету. Вот мой код:Java Coin Flip Program

package cointossing; 
import java.util.Random; 
import java.util.Scanner; 
import static java.lang.System.in; 
import static java.lang.System.out; 
/** 
* Coin tossing class to simulate the flip of a coin 
* with two sides; Heads and Tails. 
* 
* @author Alex Chapman ID: 
* 
*/ 
public class CoinTossing 
{  
    public static String sideUp; 
    public static int number; 

     public void run() 
    { 
     try(Scanner input = new Scanner(in)) 
     { 
      out.print("Enter how many times you would like to flip the coin"); 
      out.print("if you enter 0 the program quits"); 
      int number = input.nextInt();  
     } 
    } 


    private static void coin() 
    { 
     Random rand = new Random(); 
     int sideup = rand.nextInt(2); 
     if (sideup == 0) 
     { 
      sideUp = "heads"; 
     } 
     else 
     { 
      sideUp = "tails"; 
     } 
    } 

    public static String getsideup() 
    { 
     out.println(sideUp); 
     return sideUp; 
    } 



    public static void main(String[] args) 
    { 
     int hcount = 0; 
     int tcount = 0; 
     for (int i = 1; i <= number; i++) 
     { 
      coin(); 
      if (getsideup().equals("heads")) 
      { 
       hcount++; 
      } 
      else 
      { 
       tcount++; 
      } 
     } 
     out.println("total heads = " + hcount + " total tails = " + tcount); 
    } 
} 

, но когда я запускаю программу она пропускает попросив ничего пользователь и просто показывает 0, потому что нет количества раз, чтобы перевернуть монету ... я чувствую, что им по праву трек, но им застрял ... любая помощь будет принята с благодарностью ..

EDIT:

так в интересах обучения я решил изменить мою программу и изменить монету перечисления и есть возвращение программы что значение enum..i также изменило пользовательский ввод на стиль меню, но этому помогло следующее в книге Barnes and Nobles, которую я купил некоторое время назад ... i thin ki пришли к странной перекрестке дороги ... я хотел объединить две программы вместе, чтобы все новые работы по возврату значения enum и т. д. все еще были там, но удалили аспект «меню» и заменили его возможность для пользователя вводить количество флипсов, которые они хотели бы сделать из предыдущей программы. вот новая программа я написал:

import java.util.*; 

public class CoinTossing 
{ 
    private enum Coin { HEADS, TAILS }; 

    private static final Random randomNumbers = new Random(); 

    private static final int HEAD = 1; 
    private static final int TAIL = 2; 

    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 

     int choice; 
     int toss = 0; 
     int tosses = 0; 
     int frontflip = 0; 
     int backflip = 0; 

     Coin gameStatus; 

     System.out.println("Welcome to the Coin Toss Program.\n"); 
     System.out.println("Choose from the menu what you want to do."); 
     System.out.print("1. Toss the coin\n2. Quit program\n"); 
     choice = input.nextInt(); 

     while (choice != 0) 
     { 
      if (choice == 1) 
      { 
       int CoinTossed = Flip(); 

       switch (CoinTossed) 
       { 
           //added tosses to switch statement to make the counter work perfect. 
       case HEAD: 
        gameStatus = Coin.HEADS; 
        tosses++; // add amount of tosses 
        break; 
       default: // changed case TAIL to default. Easy and works. 
        gameStatus = Coin.TAILS; 
        tosses++; // add amount of tosses 
        break; 
       } 

       if (gameStatus == Coin.HEADS) 
       { 
        frontflip++; //Add amount of heads 
       } 
       else // gameStatus == TAILS 
        backflip++; //Add amount of tails  
      } 

      // A try to make an real exit out of a program 

      if (choice == 2) 
      { 
       EndProgram(frontflip, backflip, tosses); 
      } 

      System.out.println("\nChoose from the menu what you want to do."); 
      System.out.print("1. Toss the coin\n2. Quit program\n"); 
      choice = input.nextInt(); 
     } 
    } 

    //Toss the coin to determine 1 or 2. 
    public static int Flip() 
    { 
     int toss; 

     toss = 1 + randomNumbers.nextInt(2); 

     if (toss == 1) 
     { 
      System.out.println("You toss the coin and it lands on head!"); 
     } 
     else 
     { 
      System.out.println("You toss the coin and it lands on tail!"); 
     } 
     return toss; 
    } 

    public static void EndProgram(int frontflip, int backflip, int tosses) 
    { 
     System.out.printf("You have tossed %d times.\n", tosses); 
     System.out.printf("Of all those tosses, %d landed on heads, and %d on tails.\n", frontflip, backflip); 
     System.exit(0); 
    } 
} 

Я думал о создании новой переменной и пользователю установить количество бросков. Затем соединение проверки контура, как так

while(choice != 0 && numTosses !=0) 

, а затем уменьшить количество, и я должен буду проверить, что количество и как только он достигает 0 печати результатов, насколько сколько голов и сколько хвостов затем предложу пользователь если они хотели бы снова сыграть в игру. Я даже не знаю, почему я пытаюсь это сделать, если только для аспекта знания, поэтому, если вы не хотите помочь броски, я понимаю.

+0

Вы можете разместить полный код, а не два отсоединенных сегмента? –

+1

Попробуйте добавить 'input.nextLine();' после строки 'int number = input.nextInt();'. –

+0

Что произойдет, если вы используете 'println' вместо' print', где вы показываете инструкции? –

ответ

0

Измените основной метод, как это:

public static void main(String[] args) 
    { 
     int hcount = 0; 
     int tcount = 0; 
     Scanner sc = new Scanner(System.in); 
     out.println("How many coin flips do you want?"); 
     int number = sc.nextInt(); 
     for (int i = 1; i <= number; i++) 
     { 
      coin(); 
      if (getsideup().equals("heads")) 
      { 
       hcount++; 
      } 
      else 
      { 
       tcount++; 
      } 
     } 
     out.println("total heads = " + hcount + " total tails = " + tcount); 
    } 
+0

смена основного на это сработала! –

+0

Это хорошо, пожалуйста, прочитайте о http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work, если вам понравилось, спасибо! – Shadov

+1

Некоторое объяснение того, что одеяла делают неправильно, было бы лучше, чем просто целый код. Таким образом, одеяла могли бы чему-то научиться. –

1

Вы не вызывая бег() в главном.

Перед тем, как позвонить for (int i = 1; i <= number; i++), необходимо добавить run().

Вам также нужно будет проверить свои переменные снова, похоже, вы используете sideUp как int и как строку. Попытайтесь добавить this.sideUp в свой вызов монеты(), когда вы устанавливаете значения "heads" и "tails", или переименуйте переменную int sideUp во избежание путаницы.