Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java can';t get compChoice不返回null_Java_Null - Fatal编程技术网

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();