2

ユーザーに選択肢を入力させ、コンピューターの選択に対してテストする紙じゃんけんプログラムを作成する必要があります。各ゲームの後、続行するかどうかをプレーヤーに尋ね、続行または終了するには「Y」または「N」を入力する必要があります。私が考えることができる最高のものは while ループであり、最後のビットを除いてすべてが正常に機能します。

import java.util.Scanner;

public class rockpaperscissors {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        char cont = 'y';

        while (cont == 'y'){        
            int com = (int)(Math.random() * 3);

            System.out.println("Paper (0), Rock (1), or Scizzors (2)?");
            int hum = input.nextInt();

            if (com==(hum))  
                System.out.println("It's a tie!");

            else if (hum == 0)
            {
                if (com == 1)
                    System.out.println ("You chose paper, computer chose rock You Win!");
                else if (com == 2)
                    System.out.println ("You chose paper, Computer chose scissors You Lose!");
            }

            else if (hum == 1)
            {
                if (com == 2)
                    System.out.println ("You chose Rock, computer chose scissors You Win!");
                else if (com == 0)
                    System.out.println ("You chose Rock, Computer chose paper You Lose!");
            }

            else if (hum == 2)
            {
                if (com == 0)
                    System.out.println ("You chose Scissors, computer chose paper You Win!");
                else if (com == 1)
                    System.out.println ("You chose Scissors, Computer chose rock You Lose!");
            }

            System.out.println("Would you like to continue? (Y/N)");
            cont = input.nextLine().charAt(0);
        }       
    }
}

実行すると、ループが正常に実行され、ゲームがプレイされますが、「string out of index range」エラーが発生します。これを解決する方法はありますか?

4

3 に答える 3

2

入力バッファnextInt()から数値を読み取り、新しい行をそのままにします。したがって、電話をかけるinput.nextLine()と、空の行が表示されます。番号の後の最初の行の残りの部分です。次の行を読んで、空でないことを確認する必要があります。もしそうなら、もう一度読んでください。

ちなみに、誰が勝ったかを判断するコードは少し面倒です。私があなただったら、もう少し一般的できれいにしようと思います。コードをあまり追加せずに、じゃんけん、リザード スポックなどのより複雑なゲームを処理できるソリューションについて考えてみてください。

于 2012-10-04T21:08:48.870 に答える
1

ユーザーから回答を得た場合、次の行を読み取らないため、スキャナーにはまだ改行文字が含まれています。次に、 を読むnextlineと、その新しい行が読み取られるため、 はありませんcharat(0)

変化する:

cont = input.nextLine().charAt(0);

に:

cont = input.next().charAt(0);
于 2012-10-04T21:10:34.207 に答える
-1
package rockpaper;


import java.util.Scanner;

/**
 *
 * @author Allen E.
 */

public class RockPaper {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       int rock = 0;
       int paper = 1;
       int Scissors = 2;

       int user = 0;
       int computer = 0;
       int gamesplayed = 0;

       Scanner scan = new Scanner(System.in);

         while (gamesplayed < 3)
                 {


       System.out.println("Rock = 0 , Paper = 1, Scissors = 2");
        String userinput = scan.nextLine();

        int convertinput = Integer.valueOf(userinput);
        int Computerinput = (int)(Math.random()*3);

       if (Computerinput == 1 && convertinput == 0)
       {
           System.out.println("Paper beats Rock " + 
                   "\nThe computer won");
           gamesplayed++;
           computer++;
       }
       else if (convertinput == 1 && Computerinput == 0)
       {
           System.out.println("Paper beats Rock " + 
                   "\nYou Win!");
           gamesplayed++;
           user++;
       }
     if (Computerinput == 0 && convertinput == 2)
     {
         System.out.println("Rock beats Scissors " +
                 "\nThe computer won");
         gamesplayed++;
         computer++;
     }
     else if (convertinput == 0 && Computerinput == 2)
     {
         System.out.println("Rock beats Scissors " +
                 "\nYou Win!");
         gamesplayed++;
         user++;
     }

     if (Computerinput == 2 && convertinput == 1)
     {
         System.out.println("Scissors beats Paper " +
                 "\nThe computer won");
         gamesplayed++;
         computer++;
     }
     else if (convertinput == 2 && Computerinput == 1 )
     {
         System.out.println("Scissors beats Paper " +
                 "\nYou Win");
         gamesplayed++;
         user++;
     }

     /*************************************************
      *                                               *
      *                                               *
      *                 Handling a tie                *
      *                                               *
      *                                               *  
      *************************************************/

     if (Computerinput == 0 && convertinput == 0)
     {
         System.out.println("Rock ties Rock " +
                 "\nTie");

     }
     if (Computerinput == 1 && convertinput == 1)
     {
         System.out.println("Paper ties Paper " +
                 "\nTie");

     }
     if (Computerinput == 2 && convertinput == 2)
     {
         System.out.println("Scissors ties Scissors " +
                 "\nTie");

    }/*End of While Loop*/

     }
    }
}
于 2013-03-16T17:19:48.270 に答える