1

うまくいけば、これは簡単な質問です。シンプルなジャンケンゲームを作っています。私はランダムなコンピューターの選択をうまく行い、ユーザーの選択をうまくさせます。しかし、誰が勝つかを見つけようとすると、無効な入力用のelse ifブロックの最後のelseが出力されます。

正しい選択が行われると、「有効な選択を入力してください」と出力されます。

import java.util.Random;
import javax.swing.JOptionPane;

public class JavaApplication4 {

    public static void main(String[] args) 
    {
        Random ranNums = new Random();

        int comp = ranNums.nextInt(3);
        String comp2;
        String winner;

        String user = JOptionPane.showInputDialog
                (null, "Enter rock, paper, or scissors");
        user.toLowerCase();

        if(comp == 0)
            comp2 = "rock";
        else if(comp == 1)
            comp2 = "paper";
        else 
            comp2 = "scissors";

        //Computer wins
        if(comp2 == "rock" && user == "scissors")
            winner = "The computer wins";

        else if(comp2 == "paper" && user == "rock")
            winner = "The computer wins";    

        else if(comp2 == "scissors" && user == "paper")
            winner = "The computer wins";

        //Tie game
        else if(comp2 == "rock" && user == "rock")
            winner = "It's a tie";

        else if(comp2 == "paper" && user == "paper")
            winner = "It's a tie";

        else if(comp2 == "scissors" && user == "scissors")
            winner = "It's a tie";

        //User wins
        else if(comp2 == "scissors" && user == "rock")
            winner = "You win!";

        else if(comp2 == "rock" && user == "paper")
            winner = "You win!";

        else if(comp2 == "paper" && user == "scissors")
            winner = "You win!";
        else
            winner = "Enter a valid choice";

        JOptionPane.showMessageDialog(null, "You picked " + user + "\n" +
            "The computer picked " + comp2 + "\n" +
                winner);



    }
}
4

4 に答える 4

4

使えない

comp == "paper" 

Javaで文字列を比較します。あなたが使う

comp.equals("paper")

または大文字と小文字を区別しない場合

comp.equalsIgnoreCase("paper")
于 2012-04-06T01:37:27.897 に答える
3

を使用して文字列を比較しないでください==。代わりに equals または equalsIgnoreCase(...) メソッドを使用してください。== は、2 つのオブジェクトが同じであるかどうかをチェックすることを理解してください。だから代わりに

if (fu == "bar") {
  // do something
}

行う、

if ("bar".equals(fu)) {
  // do something
}

また、

if ("bar".equalsIgnoreCase(fu)) {
  // do something
}

コードを単純化する 1 つの方法は、RockPaperScissors 列挙型を作成し、それに on compare メソッドを与えることです。何かのようなもの:

enum RockPaperScissors {
   ROCK("Rock"), PAPER("Paper"), SCISSORS("Scissors");

   private String text;
   private static int[][] winMatrix = {{0, -1, 1}, {1, 0, -1}, {-1, 1, 0}};

   private RockPaperScissors(String text) {
      this.text = text;
   }

   @Override
   public String toString() {
      return text;
   }

   // can't use compareTo since it is a final method for enums
   public int compareVs(RockPaperScissors other) {
      int thisOrdinal = ordinal();
      int otherOrdinal = other.ordinal();
      return winMatrix[thisOrdinal][otherOrdinal];
   }
}

次に、ある列挙型と別の列挙型を比較す​​るには、単純にその compareVs(...) メソッドを呼び出して、他の列挙型を渡します。

したがって、巨大な if/else ブロックは次のように削減されます。

// assuming that user and comp are RockPaperScissors variables
int result = user.compareVs(comp);
if (result == 1) {
   System.out.println("You've won!");
} else if (result == 0) {
   System.out.println("It's a tie!");
} if (result == -1) {
   System.out.println("You've lost!");
}
于 2012-04-06T01:36:38.183 に答える
2

あなたが私のようで、生のコードを楽しんでいるなら:

import java.util.Random; 
import javax.swing.JOptionPane;

public class JavaApplication4 {

public static void main(String[] args) 
{
    Random ranNums = new Random();

    int comp = ranNums.nextInt(3);
    String comp2;
    String winner;

    String user = JOptionPane.showInputDialog
            (null, "Enter rock, paper, or scissors");
    user.toLowerCase();

    if(comp == 0)
        comp2 = "rock";
    else if(comp == 1)
        comp2 = "paper";
    else 
        comp2 = "scissors";

    //Computer wins
    if(comp2.equals("rock") && user.equals( "scissors"))
        winner = "The computer wins";

    else if(comp2.equals("paper") && user.equals( "rock"))
        winner = "The computer wins";    

    else if(comp2.equals("scissors") && user.equals( "paper"))
        winner = "The computer wins";

    //Tie game
    else if(comp2.equals("rock") && user.equals( "rock"))
        winner = "It's a tie";

    else if(comp2.equals("paper") && user.equals( "paper"))
        winner = "It's a tie";

    else if(comp2.equals("scissors") && user.equals( "scissors"))
        winner = "It's a tie";

    //User wins
    else if(comp2.equals("scissors") && user.equals( "rock"))
        winner = "You win!";

    else if(comp2.equals("rock") && user.equals( "paper"))
        winner = "You win!";

    else if(comp2.equals("paper") && user.equals( "scissors"))
        winner = "You win!";
    else
        winner = "Enter a valid choice";

    JOptionPane.showMessageDialog(null, "You picked " + user + "\n" +
        "The computer picked " + comp2 + "\n" +
            winner);
}
}

それが役に立ったことを願っています!

于 2012-04-06T01:43:41.593 に答える
1

次のような文字列を比較することはできません。if (comp2 == "rock")

あなたは書く必要があります:if ("rock".equals(comp2))

于 2012-04-06T01:36:43.053 に答える