以下是核心程序本身的代码:
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();
}
}
}
这是一个应该产生什么的例子:
Rock-Paper-Scissors - 选择你的武器[R,P,S] :: R
玩家有R
计算机有P!计算机胜出&lt;&gt;!
你想再玩一次吗? ÿ
如果你把n再次播放,它会停止。
主要问题是让compChoice不要说空
答案 0 :(得分:0)
main
方法中的代码:
RockPaperScissors game = new RockPaperScissors(player);
game.determineWinner();
您在compChoice
方法中初始化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
语句。
同样从不将字符串与==
进行比较,使用等号,google解释,甚至有数百个SO解释。所以这个
if (playChoice == "R") // <-- WRONG
应该成为这个:
if (playChoice.equals("R")) // <-- right
或
if ("R".equals(playChoice)) // <-- right
答案 1 :(得分:0)
我只是快速浏览您的代码,实际上没有测试/运行您的代码。但我发现了这个: 使用String equals方法比较字符串,不要使用==来比较字符串。