我是Java的新手。我正在开发一个Java控制台应用程序,它有一个字段和一个青蛙在其中跳跃,用户通过输入二维数组决定字段的大小,(有点像棋盘但不同之处在于用户决定如何大场应该是)。例如,用户以英尺为单位输入字段高度,以英尺为单位输入宽度。到目前为止,我已经设法做了一些类Field和类Position,它接受来自用户的输入并将其放在一个数组上(int [] [] fieldsize)。
班长控制器:
package project;
public class Controller {
public static void main( String[] args ) {
Field field = new Field();
Position position = new Position();
}
}
类字段:
package project;
import java.util.Scanner;
public class Field{
int y;
int x;
int[][] fieldsize;
public Field() {
Scanner scan = new Scanner(System.in);
System.out
.println("Enter the size of the field in feets(width
and length separated by space, x y):");
x = scan.nextInt();
y = scan.nextInt();
int[][] fieldsize = new int[y][x];
this.fieldsize= fieldsize;
}
public int[][] getFieldSize() {
return fieldsize;
}
}
我设法将用户输入的字段大小“收集”到int [] [] fieldsize数组中。
现在我想向用户询问青蛙的起始位置和前进方向,S(南),N(北),E(东),W(西),然后将青蛙添加到田地。例如,用户输入3 4 E.这应该将青蛙置于[3] [4]东(标题)位置。我该如何解决这个问题?
班级位置:
package project;
import java.util.Scanner;
public class Position {
public Position() {
int x;
int y;
String heading;
Scanner scan = new Scanner(System.in);
System.out.println("Enter the starting position and heading for the frog, X Y and N, S, W or E position");
x = scan.nextInt();
y = scan.nextInt();
heading = scan.next();
//How do I put this inputs in the Field(fieldsize)?? So they get into this position in the field??
}
}
描述我的意思有点困难,但我希望你们能帮助我! 提前谢谢!
答案 0 :(得分:2)
行。在开始编码之前你应该考虑的第一件事 - 设计是什么。当代码出现在设计之前时,通常就会出现这样的问题。
所以第一个问题应该是: 我需要哪些课程,每节课应该做什么以及他们将如何互动。
对象是一个包含属性和的自包含组件 使某种类型的数据有用所需的方法。一个对象 属性是它所知道的,它的方法就是它所能做的。
例如 - 班级Field
的对象可以做什么?它将如何与Position
互动?我可以用Position
做什么?
然后你开始设计类。您肯定不想在构造函数中读取用户输入。如果您希望明天从文件中获取输入并在下个月从云端或语音中获取,该怎么办?或者甚至更糟 - 如果输入错误怎么办?对象的状态是什么?
您通常需要向构造函数提供创建对象所需的所有数据。构造函数不应该关心从哪里得到它。你可以有一个public Field(int x, int y)
并在阅读用户输入后在你的主类中调用它(我并不是说你应该有这个确切的构造函数,只是一个例子)。
您可能希望将位置设置为Field
的方法(字段将包含位置)
field.setPosition(position);
或拥有Position
的移动方法(你可以在场上拥有尽可能多的位置)
position.setField(field);
position.moveTo(x,y);
或者你甚至可以得出你根本不需要职位的结论,它只是Field的财产:
field.setCurrentX(x);
field.setCurrentY(y);
这里的设计非常适合你。在编码之前只需要设计。