0

コアプログラム自体のコードは次のとおりです。

import java.util.Scanner;
import static java.lang.System.*;

public class RockPaperScissors
{
private String playChoice;
private String compChoice;

public RockPaperScissors()
{



}

public RockPaperScissors(String player)
{
    playChoice = player;
}

public void setPlayers(String player)
{
    playChoice = player;
    compChoice = "";
    int num;
    num = (int) (Math.random()*3);
    switch(num)
    {
    case 0 : compChoice = "R";break;
    case 1 : compChoice = "P";break;
    case 2 : compChoice = "S";break;
    }
    
    System.out.println(num + " " + compChoice);
    out.print(compChoice);
}

public String determineWinner()
{
    String winner="";
    
    if(playChoice == "R")
    {
        switch(compChoice)
        {
        case "R" : winner = "!Draw Game!";break;
        case "P" : winner = "!Computer wins <<Paper Covers Rock>>!";break;
        case "S" : winner = "!Player wins <<Rock Breaks Scissors>>!";break;
        }
    }
    else if(playChoice == "P")
    {
        switch(compChoice)
        {
        case "R" : winner = "!Player wins <<Paper Covers Rock>>!";break;
        case "P" : winner = "!Draw Game!";break;
        case "S" : winner = "!Computer wins <<Scissors Cuts Paper>>!";break;
        }
    }
    else if(playChoice == "S")
    {
        switch(compChoice)
        {
        case "R" : winner = "!Computer wins <<Rock Breaks Scissors>>!";break;
        case "P" : winner = "!Player wins <<Scissors Cuts Paper>>!";break;
        case "S" : winner = "!Draw Game!";break;
        }
    }
    return winner;
}

public String toString()
{
    String output="";
    
    output = "player had " + playChoice + "\n computer had " + compChoice + "\n " + determineWinner();
    
    return output;
}
}

そして、ここに私のランナークラスがあります:

import java.util.Scanner;
import static java.lang.System.*;

public class Lab10d
{
public static void main(String args[])
{
    Scanner keyboard = new Scanner(System.in);
    char response  ;
    
    //add in a do while loop after you get the basics up and running
    
        String player = "";
    
        out.print("Rock-Paper-Scissors - pick your weapon [R,P,S] :: ");
        
        //read in the player value
        player = keyboard.next();
    
        RockPaperScissors game = new RockPaperScissors(player);
        game.determineWinner();
        out.println(game);
    while(response.equals('y'))
    {
        out.print("Rock-Paper-Scissors - pick your weapon [R,P,S] :: ");
        player = keyboard.next();
        game.setPlayers(player);
        game.determineWinner();
        out.println(game + "\n");
        out.println("would you like to play again? (y/n):: ");
        response=  keyboard.next();
        
        
        
        
    }
    
}
}

これが結果の例です。

じゃんけん - 武器を選ぶ[R,P,S]:: R

プレイヤーはRを持っていました

コンピュータは P を持っていた

!コンピュータが勝つ <>!

また遊びたいですか?y

もう一度再生するために n を入力すると停止します。

主な問題は、compChoice が null と言わないようにすることです

4

2 に答える 2

0

私はあなたのコードを簡単に調べただけで、実際にコードをテスト/実行しませんでした。しかし、私はこれを見つけました: String equals メソッドを使用して文字列を比較し、== を使用して文字列を比較しないでください。

于 2012-11-08T01:14:04.363 に答える
0

メソッド内のコードmain:

RockPaperScissors game = new RockPaperScissors(player);
game.determineWinner();

compChoiceメソッドでString を初期化しますsetPlayers()が、そのメソッドは呼び出されません。compChoice次に、null である をオンにすると、 が得られますNullPointerException

これで問題が解決するはずです:

RockPaperScissors game = new RockPaperScissors(player);
game.setPlayers(player); // <-- insert this line.
game.determineWinner();

determineWinner()ただし、によって返された文字列を保存していないことに注意してからout.println(game);、メソッドを再度呼び出す呼び出しdetermineWinner()...

また、あなたのコードのこの部分

while(response == response)

break常に無限ループになり、ループ内にステートメントが見つかりません。

また、文字列を と比較したり、等号==を使用したり、説明をグーグルで検索したりしないでください。そのためのSOの説明は何百もあります。したがって、この

if (playChoice == "R") // <-- WRONG

これになるはずです:

if (playChoice.equals("R")) // <-- right

また

if ("R".equals(playChoice)) // <-- right

于 2012-11-08T01:09:36.553 に答える