Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何读取两个数组?_Java_Arrays_File_Arraylist - Fatal编程技术网

Java 如何读取两个数组?

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

我有两个数组,用于存储从文件中读入的两行的值。在我的GUI类中的一些处理之后,应该在帧的中间并排显示矩形。然而,只有一个人出现过。我已经尝试了各种方法,我知道如何让另一个出现,但没有骰子。这是我的密码:

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);
        }
....