我自己做得人机猜拳。
以下是我编写的几个类,分别是RJCQ1,RJCQ2 ,RJCQ4,RJCQTest
但是每当我运行RJCQTest这个类的时候,eclipse就会报错
Exception in thread "main" java.lang.NullPointerException
at Bd课后习题.RJCQ4.start2(RJCQ4.java:50)
at Bd课后习题.RJCQTest.main(RJCQTest.java:13)
以下是我的代码,求教大神们帮忙给看看这个错误该怎么解决,最好解释的详细点谢谢了
import java.util.Scanner;
public class RJCQ1 {
    //定义一个玩家类
//玩家积分跟姓名为属性
String admin;
int score;
String a="剪刀";
String b="石头";
String c="布";
//定义玩家类的方法
public int player(){
Scanner in=new Scanner(System.in);
System.out.print("请出拳:1.剪刀2.石头3.布(输入相应的数字)");
int number=in.nextInt();
String d="";
switch(number){
case 1:
d=a;
break;
case 2:
d=b;
break;
case 3:
d=c;
break;
}
System.out.print("你出拳:"+d);
return number;
}
}
import java.util.Scanner;
public class RJCQ2 {
//定义UI类
//UI积分跟姓名为属性
String name;
int score;
String a="剪刀";
String b="石头";
String c="布";
//UI类的方法
//(int)(Math.random()*3)
public int ui(){
int ui=(int)(Math.random()*3);
String d="";
switch(ui){
case 1:
d=a;
break;
case 2:
d=b;
break;
case 0:
d=c;
break;
}
System.out.print("电脑出拳:"+d);
return ui;
}
}
import java.util.Scanner;
public class RJCQ4 {
//定义游戏引擎类
//定义游戏引擎属性
RJCQ1 V;//玩家
RJCQ2 S;//电脑
int count;//对战次数
String a="刘备";
String b="孙权";
String c="曹操";
//定义游戏引擎方法
Scanner in=new Scanner(System.in);
public void show(){ 
System.out.print("--------------------欢  迎  进  入  游  戏  世  界--------------------------\n\n");
System.out.print("                                     ****************   \n");
System.out.print("                                     **猜拳       开始**    \n");
System.out.print("                                     ****************\n\n");
System.out.println("出拳规则:1.剪刀2.石头3.布");
System.out.print("请选择对方角色:(1.刘备2.孙权3.曹操)");
}
public void ready(){
V=new RJCQ1();
S=new RJCQ2();
count=0;
}
public int start1(){
int number=in.nextInt();
String d="";
switch(number){
case 1:
d=a;
break;
case 2:
d=b;
break;
case 3:
d=c;
break;
}
System.out.println("你选择了"+d+"对战");
return number;
}
public void start2(){
System.out.print("要开始吗?(y/n)\n");
String start=in.next();
int player;
int ui;
if(start.equals("y")){
player=V.player();
ui=S.ui();
if((player==1&&ui==1)||(player==2&&ui==2)||(player==3&&ui==0)){
System.out.print("结果:和局,真衰!\n");
}else if((player==1&&ui==0)||(player==2&&ui==1)||(player==3&&ui==2)){
System.out.print("结果:恭喜,你赢了!");
}else{
System.out.print("结果说:^_^,你输了,真笨!\n");
}
}
}
}
import java.util.Scanner;
public class RJCQTest {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
//RJCQ1 V=new RJCQ1();
//V.player();
//RJCQ2 B=new RJCQ2();
//B.ui();
RJCQ4 V=new RJCQ4();
V.show();
V.start1();
V.start2();
}
}

解决方案 »

  1.   


    player = V.player();这句中V空指针了。
    RJCQ4中只对V进行了声明RJCQ1 V;// 玩家真正创建V对象的操作是在ready()方法中进行的,但楼主并没有调用它。解决方法很简单。在RJCQTest里的V.start1();和V.start2();中间插入一句V.ready();就OK了。
      

  2.   

    错误在RJCQ4这个类里面,
    你声明
    RJCQ1 V;//玩家
    RJCQ2 S;//电脑
    int count;//对战次数
    要写成
    RJCQ1 V = NULL;
    RJCQ2 S = NULL;
    int count = 0;
    不然你不可以直接在类的方法里面直接使用。
      

  3.   

    唔,不是这样哦。。
    首先,java里的“空”应写作小写的null,而不是NULL。
    另外,在类中定义的成员变量是会自动初始化的。引用类型默认为null,bool类型默认为false,其他默认为0。
    所以,RJCQ1 V = null;
    RJCQ2 S = null;
    int count = 0;和RJCQ1 V;
    RJCQ2 S;
    int count;并没有区别。
    楼主的错误是因为他用没有创建出来的对象来调用方法而造成的。
      

  4.   

    真心的谢谢2楼的大神,问题昨天晚上找到了,跟您说的一模一样,我昨天总是在想player=V.player没有往别的地方想,看来还是我基础不扎实,容易犯脑残的问题啊
      

  5.   

    其实我只是想告诉你要new没想到说错了