Java can';t get compChoice不返回null
以下是我为核心程序本身编写的代码:Java can';t get compChoice不返回null,java,null,Java,Null,以下是我为核心程序本身编写的代码: import java.util.Scanner; import static java.lang.System.*; public class RockPaperScissors { private String playChoice; private String compChoice; public RockPaperScissors() { } public RockPaperScissors(String player) { pl
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;
}
}
下面是一个应该产生什么结果的示例:
石头剪刀-选择你的武器[R,p,S]::R
玩家有一个R
电脑有p
!!电脑赢了
你想再玩一次吗?y
如果你把n放在再次播放上,它就会停止
主要问题是让compChoice在
main
方法中不说null您的代码:
RockPaperScissors game = new RockPaperScissors(player);
game.determineWinner();
您可以在setPlayers()
方法中初始化compChoice
字符串,但该方法从未被调用。然后打开compChoice
,它是空的,因此您得到NullPointerException
这将解决您的问题:
RockPaperScissors game = new RockPaperScissors(player);
game.setPlayers(player); // <-- insert this line.
game.determineWinner();
RockPaperScissors游戏=新的RockPaperScissors(玩家);
游戏。设置玩家(玩家);// 我只是快速浏览了你的代码,实际上并没有测试/运行你的代码。但我发现:
使用String equals方法来比较字符串,不要使用==来比较字符串。新版本,它不喜欢determineWinner()方法中的开关大小写它不喜欢-->编译器确切地说是什么-->RockPaperScissors.determineWinner中线程“main”java.lang.NullPointerException中的异常(RockPaperScissors.java:68)在Lab10d.main(Lab10d.java:27)的java.io.PrintStream.println(未知源)的java.lang.String.valueOf(未知源)的RockPaperScissors.toString(RockPaperScissors.java:82)中^^^^^^^这是在我给扫描仪一个值并在调用setPlayers()后点击entercomChoice可以是“”、“R”、“P”或“s”。它永远不会“返回空值”。谢谢!!!这彻底解决了问题!现在,当我告诉它是否继续播放时,响应是一个字符,但无法从用户的输入中读入字符char c=yourString.charAt(0)
while(response.equals('y'))
while(response.equals('y'))
,因为您的响应是一个字符串
我得到它询问是否再次播放,但当我输入y时,它没有任何作用现在您声明字符响应
,因此它获取dafault char值,但只有当它等于'y'
时,您才能进入循环。如果希望循环至少运行一次,可以使用do while
循环。但是你写response=keyboard.next()代码>不会编译,因为键盘.next()
返回一个字符串
,您需要一个字符。请看第二条评论来解决这个问题。
RockPaperScissors game = new RockPaperScissors(player);
game.setPlayers(player); // <-- insert this line.
game.determineWinner();