因此,我即将完成我的第一个Java课的一半。因此,对于我来说,您可能需要将其分解为一些基本步骤!

我现在正在研究Conway的生活游戏。幸运的是我们还没有使用gui(...?),但是我仍然坚持只设置网格。
我的代码可以很好地编译,但是运行时得到:
错误:找不到或加载主类gameOfLife
因此,我进行了更多研究,似乎问题出在我的网格文件中,它给出了相同的错误:
错误:找不到或加载主类网格

编辑**:这就是我运行它们的方式

[bgorgero@sraysvcs2 gameOfLife]$ java gameOfLife
Error: Could not find or load main class gameOfLife
[bgorgero@sraysvcs2 gameOfLife]$ java Grid
Error: Could not find or load main class Grid


编辑*:

[bgorgero@sraysvcs2 ~]$ java gameOfLife/gameOfLife
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at gameOfLife.gameOfLife.main(gameOfLife.java:20)


那是我尝试访问它而不进入文件夹时遇到的错误。

我正在尝试从输入的txt文件中读取网格,以找出数组应该多大,然后读取0和1并将它们存储到数组中。到目前为止,这是我的代码

gameOfLife.java

package gameOfLife;
import java.util.Scanner;
import java.io.File;
import java.io.PrintWriter;
import java.io.FileNotFoundException;

public class gameOfLife{
    public static void main (String[] args) throws Exception {
       File input = new File("gameBoardInput.txt");
        Scanner reader = new Scanner(input);
        int x = reader.nextInt();
        int y = reader.nextInt();

        Grid grid = new Grid(x,y);

        for(int i = 0; i < x; i++){
            String cupcake = reader.nextLine();
            char[] muffin = cupcake.toCharArray();
            for(int j = 0; j < y; j++){
                grid.setAt(i,j,muffin[j]);
                }
            }

    }
}


Grid.java

package gameOfLife;
public class Grid{
    protected int[][] grid;

        public Grid (int x, int y){
           grid = new int[x][y];
            for (int i = 0; i < x; i++){
            for (int j = 0; j < y; j++){
                grid[i][j] = 0;
            }
        }
    }

        public int nuggets (int x, int y){
        return grid[x][y];
        }

        public void setAt(int column, int row, int alive){
        grid[column][row] = alive;
        }


}


我的gameBoardInput.txt很简单:

5
6
01000
00100
00010
01110
00100
00000


感谢大伙们!

最佳答案

如果您的班级在package gameOfLife;中,则需要将该班级放在名为gameOfLife的目录中

然后,使用以下命令运行它:

$ java gameOfLife/gameOfLife


根据您提供的代码,确保gameBoardInput.txt位于同一目录中。我让它在计算机上以其他错误运行:

$ ls . gameOfLife/
.:
gameBoardInput.txt  gameOfLife

gameOfLife/:
gameOfLife.class  Grid.class

$ java gameOfLife/gameOfLife
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
        at gameOfLife.gameOfLife.main(gameOfLife.java:20)




顺便说一句,您永远不要用小写字母命名类。我建议在课程中使用GameOfLife。在此处阅读更多信息:Java Naming Conventions



您还有其他问题:


您正在使用错误的变量名。使用比cupcakemuffin更好的名称,这实际上意味着变量的含义。例如使用nextLine代替cupcakelineChars代替muffin
您正在尝试解析空行。最简单的解决方法是添加此循环以跳过空行:


码:

String cupcake = reader.nextLine();
while(cupcake.isEmpty()) cupcake = reader.nextLine();



您在循环中交换了xy。循环的工作方式,y应该是第一个数字,而x应该是第二个数字,例如


码:

int y = reader.nextInt();
int x = reader.nextInt();




这是我的确切代码:

gameOfLife / gameOfLife.java

package gameOfLife;

import java.util.Scanner;
import java.io.File;
import java.io.PrintWriter;
import java.io.FileNotFoundException;

public class gameOfLife {
    public static void main(String[] args) throws Exception {
        File input = new File("gameBoardInput.txt");
        Scanner reader = new Scanner(input);
        int y = reader.nextInt();
        int x = reader.nextInt();

        Grid grid = new Grid(x, y);

        for (int i = 0; i < x; i++) {
            String cupcake = reader.nextLine();
            while (cupcake.isEmpty())
                cupcake = reader.nextLine();
            char[] muffin = cupcake.toCharArray();
            for (int j = 0; j < y; j++) {
                grid.setAt(i, j, muffin[j]);
            }
        }
    }
}


gameOfLife / Grid.java

package gameOfLife;

public class Grid {
    protected int[][] grid;

    public Grid(int x, int y) {
        grid = new int[x][y];
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                grid[i][j] = 0;
            }
        }
    }

    public int nuggets(int x, int y) {
        return grid[x][y];
    }

    public void setAt(int column, int row, int alive) {
        grid[column][row] = alive;
    }

}


gameBoardInput.txt

5
6
01000
00100
00010
01110
00100
00000

07-24 06:07