Java 如何读取两个数组?
我有两个数组,用于存储从文件中读入的两行的值。在我的GUI类中的一些处理之后,应该在帧的中间并排显示矩形。然而,只有一个人出现过。我已经尝试了各种方法,我知道如何让另一个出现,但没有骰子。这是我的密码:Java 如何读取两个数组?,java,arrays,file,arraylist,Java,Arrays,File,Arraylist,我有两个数组,用于存储从文件中读入的两行的值。在我的GUI类中的一些处理之后,应该在帧的中间并排显示矩形。然而,只有一个人出现过。我已经尝试了各种方法,我知道如何让另一个出现,但没有骰子。这是我的密码: public class PortraitFileReader public static ArrayList<Drawable> readFile(File a) { File myFile; ArrayList<Integer> value
public class PortraitFileReader
public static ArrayList<Drawable> readFile(File a) {
File myFile;
ArrayList<Integer> values = new ArrayList<Integer>();
ArrayList<Drawable> couple = new ArrayList<Drawable>();
Man aMan;
Woman aWoman;
Point aPoint;
String input;
String [] array = null;
String [] array2 = null;
try {
myFile = a;
Scanner inFile = new Scanner(myFile);
input = inFile.nextLine();
array = input.split(", ");
while(inFile.hasNext()) {
input = inFile.nextLine();
array2 = input.split(", ");
System.out.println(Arrays.toString(array2));
}
if(array[0].equals("man")) {
for(int i=1; i<array.length-1; i++) {
int current = Integer.parseInt(array[i]);
values.add(current);
System.out.println(values);
}
aPoint = new Point(values.get(0), values.get(1));
aMan = new Man(aPoint, values.get(2), values.get(3), array[5]);
couple.add(aMan);
values.clear();
}
if(array[0].equals("woman")) {
for(int i=1; i<array.length-1; i++) {
int current = Integer.parseInt(array[i]);
values.add(current);
System.out.println(values);
}
aPoint = new Point(values.get(0), values.get(1));
aWoman = new Woman(aPoint, values.get(2), values.get(3), array[5]);
couple.add(aWoman);
values.clear();
}
if(array2[0].equals("man")) {
for(int i=1; i<array2.length-1; i++) {
int current = Integer.parseInt(array[i]);
values.add(current);
System.out.println(values);
}
aPoint = new Point(values.get(0), values.get(1));
aMan = new Man(aPoint, values.get(2), values.get(3), array2[5]);
couple.add(aMan);
values.clear();
}
if(array2[0].equals("woman")) {
for(int i=1; i<array2.length-1; i++) {
int current = Integer.parseInt(array[i]);
values.add(current);
System.out.println(values);
}
aPoint = new Point(values.get(0), values.get(1));
aWoman = new Woman(aPoint, values.get(2), values.get(3), array2[5]);
couple.add(aWoman);
values.clear();
}
}
catch (FileNotFoundException e) {
System.out.println("The file was not found.");
}
return couple;
}
}
任何帮助都将不胜感激
注意:system.out.println只是用来测试每个数组中是否有正确的值。当你通过array2检查它是否是女性时,你实际上是在通过变量数组
for(int i=1; i<***array2***.length-1; i++) {
int current = Integer.parseInt(****array***[i]);
for(int i=1;i嗯,我几乎看不懂,所以我重写了它:
public class PortraitFileReader {
public static ArrayList<Drawable> readFile(File file) {
ArrayList<Drawable> couple = new ArrayList<Drawable>();
try {
Scanner scanner = new Scanner(file);
while(scanner.hasNext()) {
couple.add(parseLine(scanner.nextLine()));
}
}
catch (FileNotFoundException e) {
System.out.println("The file was not found.");
}
return couple;
}
public static Drawable parseLine(String line) {
String [] array = line.split(", ");
String gender = array[0];
int pointX = Integer.parseInt(array[1]);
int pointY = Integer.parseInt(array[2]);
int width = Integer.parseInt(array[3]);
int height = Integer.parseInt(array[4]);
String name = array[5];
if(gender.equals("man")) {
return new Man(new Point(pointX, pointY), width, height, name);
} else {
return new Woman(new Point(pointX, pointY), width, height, name);
}
}
}
哇,那里有太多的代码重复。是的,我知道。我只是想先让它工作,然后我把它分散开来,让问题更容易看。所以两个数组有正确的内容,但其中一个没有显示在屏幕上?或者数组内容不正确?我注释掉了所有其他值println和左边是array2中的女人版,它仍然打印出男人的值。你的代码复制“使问题更容易被发现”是您问题的根源。非常感谢!这就解决了问题。我知道您来自何方,但在给我的规范中,这个类应该只包含一个静态方法。这使得代码复制很难不进行。这似乎很不寻常。静态方法能创建文件阅读器的实例并调用non吗-静态方法?无论哪种方式,都可以将parseLine
方法内联到while
循环中。
public class PortraitFileReader {
public static ArrayList<Drawable> readFile(File file) {
ArrayList<Drawable> couple = new ArrayList<Drawable>();
try {
Scanner scanner = new Scanner(file);
while(scanner.hasNext()) {
couple.add(parseLine(scanner.nextLine()));
}
}
catch (FileNotFoundException e) {
System.out.println("The file was not found.");
}
return couple;
}
public static Drawable parseLine(String line) {
String [] array = line.split(", ");
String gender = array[0];
int pointX = Integer.parseInt(array[1]);
int pointY = Integer.parseInt(array[2]);
int width = Integer.parseInt(array[3]);
int height = Integer.parseInt(array[4]);
String name = array[5];
if(gender.equals("man")) {
return new Man(new Point(pointX, pointY), width, height, name);
} else {
return new Woman(new Point(pointX, pointY), width, height, name);
}
}
}
....
Scanner scanner = new Scanner(file);
while(scanner.hasNext()) {
String line = scanner.nextLine();
Drawable person = null;
// everything from parseLine, change return to assignment to person
couple.add(person);
}
....