java

时间:2015-07-01 13:34:03

标签: java

我是java的新手,所以这可能听起来很简单,但它仍然困扰着我 我的代码如下:

public class guessgame {
    player p1;
    player p2;
    player p3;

    public void startgame() {
        p1 = new player();
        p2 = new player();
        p3 = new player();
        int guessp1 = 0;
        int guessp2 = 0;
        int guessp3 = 0;
        boolean p1isright = false;
        boolean p2isright = false;
        boolean p3isright = false;
        int targetnumber = (int) (Math.random() * 10);
        System.out.println("i'm guessing a number between 0 and 9...");
        while (true) {
            System.out.println("number to guess is " + targetnumber);
            p1.guess();
            p2.guess();
            p3.guess();
            guessp1 = p1.number;
            System.out.println("player one guessed " + guessp1);
            guessp2 = p2.number;
            System.out.println("player two guessed " + guessp2);
            guessp3 = p3.number;
            System.out.println("player three guessed " + guessp3);
            if (guessp1 == targetnumber) {
                p1isright = true;
            }
            if (guessp2 == targetnumber) {
                p2isright = true;
            }
            if (guessp3 == targetnumber) {
                p3isright = true;
            }
            if (p1isright || p2isright || p3isright) {
                System.out.println("we have a winner ");
                System.out.println("player1 got it right.. ? " + p1isright);
                System.out.println("player2 got it right.. ? " + p2isright);
                System.out.println("player3  got it right.. ? " + p3isright);
                System.out.println("<<<<<<<<<<<<<<GAME IS OVER>>>>>>>>>>");
                break;
            } else {
                System.out.println("players will have to try again...!");
            }
        }
    }
}

public class player {
    int number = 0;

    public void guess() {
        number = (int) (Math.random() * 10);
        System.out.println(" I'm guessing " + number);
    }
}

public class gamelauncher {
    static public void main(String[] args) {
        guessgame game;
        game.startgame();
    }
}

我已将其包含在单个源文件中,并命名为gamelauncher.java 我的错误如下

game.java:1: error: class guessgame is public, should be declared in a file name
d guessgame.java
public class guessgame
       ^
game.java:59: error: class player is public, should be declared in a file named
player.java
public class player
       ^
game.java:68: error: class gamelauncher is public, should be declared in a file
named gamelauncher.java
public class gamelauncher
       ^
3 errors

然后在谷歌搜索后,我意识到单个源文件中不应该有多个公共类 我的问题是

  1. 所以我必须将我的源文件分成三个独立的源文件......?

  2. 所以我必须单独编译每个班级

  3. 是否有可以编译所有类的命令行快捷方式

  4. 我应该通过另一个特殊的命令行快捷方式运行所有这些类,还是运行一个包含main的类来运行一个类似于gamelauncher类

  5. 提前感谢.....

4 个答案:

答案 0 :(得分:4)

  
      
  1. 所以我必须将我的源文件分成三个独立的源文件......?
  2.   

是的,你有。 1 你也可以使用内部类,但对于初学者来说,单独文件中的常规类就可以了。

  
      
  1. 所以我必须单独编译每个班级
  2.   
  3. 是否有可以编译所有类的命令行快捷方式
  4.   

您可以将它们全部传递给javac,e。 G。 javac guessgame.java player.java gamelauncher.java,或使用通配符,e。 G。 javac *.java。对于更大的项目,您最好使用自动构建系统 - Make,Ant,Ivy,Maven ......

  
      
  1. 我应该通过另一个特殊的命令行快捷方式运行所有这些类,还是足以运行一个包含main的类,如果是gamelauncher类
  2.   

您应该只运行包含main方法的类。

1 正如@hexafraction所指出的那样,您也可以删除public声明并将其他两个类打包为私有。然而,这绝对是不寻常的,我不建议这样做。

答案 1 :(得分:1)

如果要在同一个.java文件中添加多个类,则必须使它们成为内部类,这意味着在命名java文件时它应该在类的范围内。 像 -

这样的东西
class A {
     class B{
     }
}

假设您的文件是A.java

答案 2 :(得分:1)

如果您想要使用同一文件中的所有类,请从课程publicguessgame中删除player关键字。

您的班级文件必须包含gamelauncher.java名称main方法。

警告:你仍然会得到NullPointerException,因为你宣布

guessgame game;

但不要初始化并尝试访问,

game.startgame();

给你NullPointerException

试试这个:

guessgame game = new guessgame();
game.startgame();

答案 3 :(得分:0)

它以下一种方式工作,假设您有一个名为 Dog.java 的文件,其中包含下一个内容:

class A{}

class B{}

class C{}

由于任何类都是公共的,你可以使用javac Dog.java编译它,它会起作用。

但如果您的某个类是公共的,则该文件的名称必须等于公共类,例如,如果您修改最后一个示例,如下所示: 档案Dog.java

public class A{}

class B{}

class C{}

你试图编译它你会得到&#34; A类是公开的,应该在名为A.java的文件中声明&#34;

最后一点,不能将所有类设置为公开类,因为每个文件只能有一个公共类。

  1. 所以我必须将我的源文件分成三个独立的源文件......? 你应该但是如果你把所有的课程放在同一个文件中它会起作用但只有一个必须公开

  2. 所以我必须单独编译每个类不能使用file.java的名称来补充你的类,如果你的文件名为Hello.java,你可以使用javac Hello.java编译它

  3. 是否有可以编译所有类的命令行快捷方式是的是javac * .java

  4. 我应该通过另一个特殊的命令行快捷方式运行所有这些类,还是运行一个包含main的类就足够了gamelauncher类你应该只运行包含main方法的类。< /强>