所以我大约在我的第一个java课程的中途...所以你可能需要把它分解为我的小步骤,我道歉!
我现在正致力于康威的生活游戏。幸运的是我们没有使用gui(...呢?)但是我仍然坚持简单地设置网格。 我的代码编译正常,但是当我运行时,我得到: 错误:无法找到或加载主类gameOfLife 所以,我更多地研究了它,似乎问题出在我的网格文件中,它给出了同样的错误: 错误:找不到或加载主类Grid
编辑**:这就是我运行它们的方式
[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
谢谢你们!
答案 0 :(得分:2)
如果您的班级在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
您还有其他一些问题:
cupcake
和muffin
更好的名称,这些名称实际上意味着变量是什么。例如使用nextLine
代替cupcake
和lineChars
代替muffin
。代码:
String cupcake = reader.nextLine();
while(cupcake.isEmpty()) cupcake = reader.nextLine();
x
和y
。循环的工作方式,y
应该是第一个数字,x
应该是第二个数字,例如代码:
int y = reader.nextInt();
int x = reader.nextInt();
这是我的确切代码:
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]);
}
}
}
}
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;
}
}
5
6
01000
00100
00010
01110
00100
00000
答案 1 :(得分:0)
在main方法中使用try-catch块,不要让它抛出异常。 你的JDK版本是什么?尝试类似:
public static void main(String[] args){
try{
//insert code here
}catch(Exception e){e.printStackTrace();}
此外,使用java.util.ArrayList<String>
使用其add(<String>)
方法存储输入文本。然后使用size()和使用get(0).length()
此外,您缺少代码。 main方法没有20行,Exception发生在第20行。这可能是由于代码中用于计算邻居的条件越界,但我们需要其余的代码才能解决这个问题。请相应地进行编辑。