Как мне получить оба моих массива для чтения? - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть два массива, хранящие значения двух строк, которые считываются из файла. После некоторой обработки в моем классе 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;
}
}

Это данные, которые я читаю из файла:

man, 260, 100, 40, 80, Tom  
woman, 300, 100, 40, 80, Sally  

Любая помощь будет принята с благодарностью.

ПРИМЕЧАНИЕ: system.out.println просто для проверки, есть ли в каждом массиве правильные значения.

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

Хм, я с трудом читаю, поэтому переписал:

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

}

В любом случае, похоже, что вы рисуете не то, что рисуете правильно, или ввод в файле не совсем отформатирован, как вы ожидаете. Сам синтаксический анализ, кажется, имеет смысл ....
за исключением того, что вы всегда анализируете array и не переключаете его на parseInt(array2[i]) в 3-м и 4-м блоке. Это просто демонстрирует, почему объединение этих вырезанных и вставленных блоков в один метод - разумный путь.

Вставка всего будет выглядеть, как указано выше, с этими правками:

....
        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);
        }
....
1 голос
/ 17 ноября 2011

Когда вы проходите через array2, проверяя, является ли она женщиной, вы на самом деле просматриваете массив переменных.

 for(int i=1; i<***array2***.length-1; i++) {
int current = Integer.parseInt(****array***[i]);

То же самое происходит, когда вы проверяете, является ли array2 человеком

В результате вы дважды обрабатываете содержимое первой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...