对象是一个方法
问题描述:
我是新来的编程初始化后空,我在我的代码中的问题。 我首先将Maze对象初始化为null,因为我不知道哪个是用户的选择。它在createMaze()方法中初始化,但当我调用printMaze时,它是null。对象是一个方法
import java.util.Scanner;
public class Main {
public static final String EXITGAME = "EXIT";
public static final String PRINTBOARD = "PRINT";
public static final String CREATEMAZE = "UPLOAD";
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Maze maze = null;
menu(maze,in);
}
private static void menu(Maze maze, Scanner in){
String option = in.nextLine();
while(option.toUpperCase() != EXITGAME){
switch(option.toUpperCase()){
case PRINTBOARD: printMaze(maze); break;
case CREATEMAZE: createMaze(in,maze); break;
}
System.out.println();
option = in.nextLine();
}
}
private static void printMaze(Maze maze){
if(maze != null){
int maxX = maze.getxSize();
int maxY = maze.getySize();
for(int x = 0; x < maxX; x++){
for(int y = 0; y < maxY; y++){
System.out.print(maze.getMazeRepresentation(x, y));
}
System.out.println();
}
}
else
System.out.println("Maze is undefined");
}
private static void createMaze(Scanner in, Maze maze){
if(maze == null || !maze.getGameStatus()){
int x = in.nextInt();
int y = in.nextInt();
in.nextLine();
char rawMaze[][] = new char[x][y];
maze = new MazeClass(x,y);
for(int i = 0; i < x; i++){
createMazeLine(in,i,y, rawMaze);
}
maze.createMaze(rawMaze);
}
else
System.out.println("Maze already defined.");
}
private static void createMazeLine(Scanner in, int lines, int y, char[][] rawMaze){
String line = in.nextLine();
for(int i = 0; i < y; i++){
rawMaze[lines][i] = line.charAt(i);
}
}
}
答
在Java中,当你传递参数的方法(即迷宫迷宫createMaze(Scanner in, Maze maze)
它是参照迷宫值 在你的情况,换句话说:
- 有一个空值。
- 存在对空参考称为空 在调用该引用传递的方法值
- (让说的地址)作为pramemter
- 在方法调用中有一个参数变量,它保存该引用的值
Java没有“通过引用参数”或指针概念。
所以,createMaze
你做maze = new MazeClass(x,y);
分配新对象迷宫参照基准参数变量的方法内部时。
但是,您的初始空值和方法外的引用保持不变,并且您在方法完成后销毁方法内部创建的对象。
总之,你需要的是:
private static void menu(Maze maze, Scanner in){
String option = in.nextLine();
while(option.toUpperCase() != EXITGAME){
switch(option.toUpperCase()){
case PRINTBOARD: printMaze(maze); break;
case CREATEMAZE: maze = createMaze(in,maze); break;
}
System.out.println();
option = in.nextLine();
}
}
private static Maze createMaze(Scanner in, Maze maze){
if(maze == null || !maze.getGameStatus()){
... yuor code ...
maze.createMaze(rawMaze);
}
else
System.out.println("Maze already defined.");
return maze;
}
当然代码可以在更明确的风格写的,但主要的一点是
新值赋值给方法的参数里面的方法呢不会替换在调用者中作为参数传递的变量值
您做错了。您应该利用Java的[OO](https://www.tutorialspoint.com/java/java_object_classes.htm)性质。从用户那里获得迷宫的所有输入,然后,当用户输入一个命令来初始化迷宫时,然后制作迷宫对象。 – cdaiga
如何,我需要等待要UPLOAD – Jffp