Программа Linked List только добавляет один объект при чтении строки из текстового файла - PullRequest
0 голосов
/ 29 ноября 2018

У меня проблема здесь.Я пытаюсь добавить более одной строки при чтении из текстового файла и добавлении элемента в связанный список, но по какой-то причине он останавливается после первой строки.Эта программа читает файл построчно, разбивает каждое слово на массив и добавляет этот объект в связанный список.Когда я печатаю, печатает только первую строку текстового файла.

package com.foodlist;

public class Food {
private String name;
private String group;
private int calories;
private double percentage;

public Food(String name, String group, int calories, double percentage){
    this.name = name;
    this.group = group;
    this.calories = calories;
    this.percentage = percentage;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getGroup() {
    return group;
}

public void setGroup(String group) {
    this.group = group;
}

public int getCalories() {
    return calories;
}

public void setCalories(int calories) {
    this.calories = calories;
}

public double getPercentage() {
    return percentage;
}

public void setPercentage(double percentage) {
    this.percentage = percentage;
}

public String toString(){
    String result = "";

    result = name + " " + group + " " + calories + " " + percentage + "\n";

    return result;
}

}public class FoodList {

    private FoodListNode head;

    private class FoodListNode{
        public Food f;
        public FoodListNode next;
        public FoodListNode(Food f){
            this.f = f;
            this.next = null;
        }
    }
        public FoodList(){
            head = null;
        }
        public FoodList getFoodList(){
        final String FILE_NAME = "foods.txt";
        String[] item = null;
        Scanner inFile = null;
        try {
            inFile = new Scanner(new File(FILE_NAME));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
FoodList list = new FoodList();

            while (inFile.hasNextLine()){
            String line = inFile.nextLine().trim();
            item = line.split("\\s+");
            if(item.length==4){
            list.add(new Food(item[0], item[1], Integer.parseInt(item[2]), Double.parseDouble(item[3])));
            }
            }
        inFile.close();
        return list;
        }

        public void add(Food f){
            FoodListNode node = new FoodListNode(f);
            if (head == null){
                head = node;
            }
                else{
                    FoodListNode tmp = head;
                    while (tmp.next != null){
                        tmp = tmp.next;
                        tmp.next = node;
                    }
                }
                }
            public String toString(){
                String result = "";

                FoodListNode tmp;

                for(tmp = head; tmp != null; tmp = tmp.next){
                    result += tmp.f;
                }
            return result;  
            }
        }
public class FoodMenu {


    public static void main(String[] args) {
        FoodList items = new FoodList();

        FoodList list = items.getFoodList();

        System.out.println(list);
}
}

1 Ответ

0 голосов
/ 30 ноября 2018

Проблема заключалась в том, что я поставил здесь скобки:

if (head == null){
    head = node;
} else {
    FoodListNode tmp = head;
    while (tmp.next != null)->{
        tmp = tmp.next;
        tmp.next = node;
    }<-
}

Я удалил их, и теперь они работают отлично.Не рассмотрел, почему это изменение исправило это, но рассмотрим его подробнее.

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