Когда я запускаю свой код, я получаю (0, ноль) и не могу понять, почему - PullRequest
0 голосов
/ 04 октября 2019

Я создаю программу, которая читает файл с именами и возрастами, а затем распечатывает их в порядке возрастания. Я анализирую файл, чтобы выяснить количество пар возрастов имен, а затем делаю мой массив таким большим. Входной файл выглядит следующим образом: (23, Мэтт) (2000, Джек) (50, Сэл) (47, Марк) (23, Уилл) (83200, Эндрю) (23, Ли) (47, Энди) (47,Сэм) (150, Дейтон)

Когда я запускаю свой код, я получаю вывод (0, ноль), и я не уверен, почему. Я пытался исправить это некоторое время, и я потерян. Если кто-то может помочь, это было бы здорово. Мой код приведен ниже.

public class ponySort {
public static void main(String[] args) throws FileNotFoundException {
    int count = 0;
    int fileSize = 0;
    int[] ages;
    String [] names;
    String filename = "";
    Scanner inputFile = new Scanner(System.in);
    File file;
    do {
        System.out.println("File to read from:");
        filename = inputFile.nextLine();
        file = new File(filename);
        //inputFile = new Scanner(file);
    }
    while (!file.exists());
    inputFile = new Scanner(file);

    if (!inputFile.hasNextLine()) {
        System.out.println("No one is going to the Friendship is magic Party in Equestria.");
    }
    while (inputFile.hasNextLine()) {
        String data1 = inputFile.nextLine();
        String[] parts1 = data1.split("(?<=\\))(?=\\()");
        for (String part : parts1) {
            String input1 = part.replaceAll("[()]", "");
            Integer.parseInt(input1.split(", ")[0]);
            fileSize++;
        }
    }
    ages = new int[fileSize];
    names = new String[fileSize];

    while (inputFile.hasNextLine()) {
        String data = inputFile.nextLine();
        String[] parts = data.split("(?<=\\))(?=\\()");
        for (String part : parts) {
            String input = part.replaceAll("[()]", "");
            ages[count] = Integer.parseInt(input.split(", ")[0]);
            names[count] = input.split(", ")[1];
            count++;
        }
    }
    ponySort max = new ponySort();
    max.bubbleSort(ages, names, count);
    max.printArray(ages, names, count);
}
public void printArray(int ages[], String names[], int count) {
    System.out.print("(" + ages[0] + "," + names[0] + ")");
    // Checking for duplicates in ages. if it is the same ages as one that already was put in them it wont print.
    for (int i = 1; i < count; i++) {
        if (ages[i] != ages[i - 1]) {
            System.out.print("(" + ages[i] + "," + names[i] + ")");
        }
    }
}
public void bubbleSort(int ages[], String names[], int count ){
    for (int i = 0; i < count - 1; i++) {
        for (int j = 0; j < count - i - 1; j++) {
            // age is greater so swaps age
            if (ages[j] > ages[j + 1]) {
                // swap the ages
                int temp = ages[j];
                ages[j] = ages[j + 1];
                ages[j + 1] = temp;
                // must also swap the names
                String tempName = names[j];
                names[j] = names[j + 1];
                names[j + 1] = tempName;
            }
        }
    }
}

}

пример вывода Файл для чтения из: file.txt (0, null) Процесс завершен с кодом выхода 0

1 Ответ

0 голосов
/ 04 октября 2019

Ваш код выполняет сканирование файла дважды. В первом цикле вы делаете

 String data1 = inputFile.nextLine();

Код читает первую строку, а затем сканер переходит на следующую (вторую) строку. Позже вы делаете снова inputFile.nextLine ();Вторая строка пуста, и код никогда не переходит во второй цикл, а содержимое никогда не читается.

Если вы можете использовать списки, вы должны создать два списка массивов и добавить возраст и имена в массивы при первом сканировании, так что вы сканируете файл один раз. Когда вы закончите, вы можете получить массив из массива.

Если вам нужно использовать только массивы и вы хотите простое обновление, просто добавьте еще один сканер перед вторым циклом:

 ages = new int[fileSize];
 names = new String[fileSize];
 inputFile = new Scanner(file); // add this line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...