Ошибка «Не удается найти символ - метод hasNextLine ()» в Java - PullRequest
1 голос
/ 07 июля 2011

Я пытаюсь написать программу, которая использует файловый ввод / вывод для оценки личностных тестов.Однако, когда я получаю этот код:

while (f.hasNextLine()) {

, я получаю ошибку, описанную в заголовке.Вот код в полном объеме.Я импортирую все необходимые операции ввода-вывода и утилиты до этого и думаю, что правильно объявляю переменную файла.Я знаю, что этот метод существует, но в чем проблема?

import java.io.*;
import java.util.*;
public class PersonalityTest {
    public static Scanner input = new Scanner(System.in);

    public static void main(String[] args) throws IOException {
        String input = input();
        String output = output();
        results(input, output);
        System.out.println("Your results are located in the file you requested.");
    }

    public static String input() throws IOException {
        System.out.print("Input file name: ");
        String file = input.nextLine();
        File f = new File(file);
        System.out.println();

        while (!f.exists()) {
            System.out.print("File not found. Try again: ");
            file = input.nextLine();
            f = new File(file);
            System.out.println();
        }

        return file;
    }

    public static String output() {
        System.out.print("Output file name: ");
        String output = input.nextLine();
        return output;
    }

    public static void results(String input, String output) throws IOException {
        PrintStream write = new PrintStream(new File(output));
        File f = new File(input);

        while (f.hasNextLine()) {
            String name = f.nextLine();
            String type = "ESTJ";
            String answers = f.nextLine();
            char[] choices = new char[70];

            for (int i = 0; i <= 69; i++) {
                choices[i] = answers.charAt(i);
            }

            int aCount = 0;
            int bCount = 0;

            for (int i = 0; i <= 69; i+=7) {
                if (choices[i].toLowerCase == 'a') {
                    aCount+=1;
                }
                if (choices[i].toLowerCase == 'b') {
                    bCount+=1;
                }
            }

            int pct1 = (int)Math.round((bCount/(aCount+bCount))*100);

            if (pct1 > 50) {
                type.replace('E','I');
            }
            if (pct1 == 50) {
                type.replace('E','X');
            }

            int aCount2 = 0;
            int bCount2 = 0;

            for (int i = 2; i <= 69; i+=7) {
                if (choices[i].toLowerCase == 'a') {
                    aCount2+=1;
                }
                if (choices[i].toLowerCase == 'b') {
                    bCount2+=1;
                }
                if (choices[i+1].toLowerCase == 'a') {
                    aCount2+=1;
                }
                if (choices[i+1].toLowerCase == 'b') {
                    bCount2+=1;
                }
            }

            int pct2 = (int)Math.round((bCount2/(aCount2+bCount2))*100);

            if (pct2 > 50) {
                type.replace('S','N');
            }
            if (pct2 == 50) {
                type.replace('S','X');
            }

            int aCount3 = 0;
            int bCount3 = 0;

            for (int i = 4; i <= 69; i+=7) {
                if (choices[i].toLowerCase == 'a') {
                    aCount3+=1;
                }
                if (choices[i].toLowerCase == 'b') {
                    bCount3+=1;
                }
                if (choices[i+1].toLowerCase == 'a') {
                    aCount3+=1;
                }
                if (choices[i+1].toLowerCase == 'b') {
                    bCount3+=1;
                }
            }

            int pct3 = (int)Math.round((bCount3/(aCount3+bCount3))*100);

            if (pct3 > 50) {
                type.replace('T','F');
            }
            if (pct3 == 50) {
                type.replace('T','X');
            }

            int aCount4 = 0;
            int bCount4 = 0;

            for (int i = 6; i <= 69; i+=7) {
                if (choices[i].toLowerCase == 'a') {
                    aCount4+=1;
                }
                if (choices[i].toLowerCase == 'b') {
                    bCount4+=1;
                }
                if (choices[i+1].toLowerCase == 'a') {
                    aCount4+=1;
                }
                if (choices[i+1].toLowerCase == 'b') {
                    bCount4+=1;
                }
            }

            int pct4 = (int)Math.round((bCount4/(aCount4+bCount4))*100);

            if (pct4 > 50) {
                type.replace('J','P');
            }
            if (pct4 == 50) {
                type.replace('J','X');
            }

            write.println(name + ": [" + pct1 + ", " + pct2 + ", " + pct3 + ", " + pct4 + "] = " + type);

            write.close();
        }
    }
}

Ответы [ 2 ]

5 голосов
/ 07 июля 2011

java.io.File не имеет метода hasNextLine(). Этот метод существует в java.util.Scanner . Сканер имеет конструктор , который принимает объект File в качестве аргумента и позволяет ему использовать указанный файл для ввода - вам, вероятно, следует попробовать использовать его:

Scanner s = new Scanner(new File(input));

EDIT:

Тем не менее, Сканер может быть немного убийцей производительности (немного?). Часто быстрее использовать BufferedReader и его метод readLine () для чтения одной строки в объект String и последующего синтаксического анализа String. Вы можете получить BufferedReader из файла с небольшой хитростью:

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
0 голосов
/ 07 июля 2011

вместо использования hasNextLine() метода, который отсутствует в объекте File, альтернативой будет доступ к вашему файлу с использованием класса inputtream, например FileInputStream, и обернутый внутри класса декоратора, например BufferedReader, что позволяет читать его содержимое в строке, используя метод readLine() ....

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