Member 13765313 Ответов: 1

Почему мой код считывает только последний элемент?


В моей программе я пытаюсь прочитать несколько типов навыков, хранящихся в текстовом файле, которые разделены один за другим.из 17 навыков мой код отображает только последнюю строку.

Что я уже пробовал:

 // main program
BufferedReader in = Skills.getSkill("/Users/natasha/IdeaProjects/CW02_w1698409/Skills.txt");
        Skills skills= Skills.readSkill(in);
        while(skills != null) {
            skills = Skills.readSkill(in);

        }
        Skills.Skill();
        Skills.print();

//skill class
public static Skills readSkill(BufferedReader in) {
        String name;
        String optional;
        String short_desc;
        int stat_affinity;
        int rank;
        Skills next_Skill = null;
        String line = "";
        String[] data;

        try {
            line = in.readLine();
        } catch (IOException e) {
            System.out.println("I/O Exception");//un-inject language
            System.exit(0);
        }
        if (line != null ){
            data = line.split("\t");
            name = data[0];
            optional = data[1];
            short_desc = data[2];
            stat_affinity = Integer.parseInt(data[3]);
            rank = Integer.parseInt(data[4]);
            return new Skills(name, optional, short_desc, stat_affinity, rank, next_Skill);
        }
        return null;}public static void print()  {

        System.out.println("The name: "+name);
        System.out.println("The optional: "+optional);
        System.out.println("The short description: "+short_desc);
        System.out.println("The stat affinity: "+stat_affinity);
        System.out.println("The ranks: "+rank);
        System.out.println("The next skill: "+next_Skill);
    }public static BufferedReader getSkill(String name) {
        BufferedReader in = null;
        try {
            File file = new File(name);
            in = new BufferedReader(new FileReader(file));

        } catch (FileNotFoundException e) {
            System.out.println("file does not exist");
            System.exit(0);
        }
        return in;
    }

CPallini

Вы не показали нам ни полного кода, ни содержимого входного файла.

1 Ответов

Рейтинг:
0

Jochen Arndt

Внутри вашей петли

while(skills != null) {
    skills = Skills.readSkill(in);
}
Вы читаете до конца файла, ничего не печатая.

Что Вы наконец-то получили данные последней строки, напечатанной в
Skills.print();
вероятно, он получен путем объявления членов поля данных как static тоже которые задаются при передаче данных конструктору по адресу
return new Skills(name, optional, short_desc, stat_affinity, rank, next_Skill);
Но это только предположение, потому что вы не показали нам объявление этих членов и конструктора.

Чтобы напечатать данные каждой строки, вы должны сделать это в цикле:
skills = Skills.readSkill(in);
while (skills != null) {
    skills.print();
    skills = Skills.readSkill(in);
}
Обратите также внимание, что я использовал возвращенный объект skills там печатать и не то static функция Skills.print().

Я предлагаю перечитывать ваши учебные пособия по Java об использовании static. Использовать static элементы данных и функции только там, где это необходимо. Одной из наиболее важных особенностей классов является то, что каждый экземпляр имеет свою собственную копию элементов данных. Но это не относится к использованию static члены.

Я предлагаю перепроектировать полный класс, чтобы не использовать его static члены (данные и функции).