Java: использование файлов .txt для назначения определенных индексов каждой строки массиву - PullRequest
0 голосов
/ 04 декабря 2018

Мой .txt файл

code1,description1,price1
code2,description2,price2
etc.

Использование:

ArrayList<String> items = new ArrayList<String>();
String description;
File fn = new File("file.txt");
String[] astring = new String[4];
try{
 Scanner readFile = new Scanner(fn);
 Scanner as = new Scanner(System.in);
 while (readFile.hasNext()){
  astring = readFile.nextLine().split(",");
  String code = astring[0];
  items.add(code);
  description = astring[1];
}
}catch(FileNotFoundException){
//
}

for(String things: items){
 System.out.println("The code is: " + things + "The description is " + description);
}

Мой вывод распечатывается

code1 description1
code2 description1
code3 description1

Я пытаюсь выяснить, какобновите описание так же, как и код.например,

code1 description1
code2 description2
code3 description3

Если этот вопрос уже задавался, я прошу прощения.Я не мог выяснить, как сделать это, ища вокруг, но если есть ссылка, чтобы понять это, я закрою это и пойду туда.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Проблема в вашей логике.Вы сохраняете только astring[0] в items ArrayList и каждый раз перезаписываете значение description.В результате последнее прочитанное значение сохраняется в description, который вы печатаете в цикле.

Я предпочитаю создавать пользовательский класс следующим образом.(Просто для демонстрации, иначе вы бы объявили свои поля частными и предоставили методы получения и установки)

class MyObject {
 public String code;
 public String description;
 public String price;
}

теперь вместо создания ArrayList of Strings вы создадите ArrayList of MyObject следующим образом

ArrayList<MyObject> items = new ArrayList<MyObject>();

теперь создайте новый экземпляр MyObject каждый раз, когда вы читаете строку, заполняете ее поля значениями из astring следующим образом

ArrayList<MyObject> items = new ArrayList<MyObject>();
    File fn = new File("test.txt");
    String[] astring = new String[4];
    try {
        Scanner readFile = new Scanner(fn);
        Scanner as = new Scanner(System.in);
        MyObject myObject;
        while (readFile.hasNext()) {
            astring = readFile.nextLine().split(",");
            myObject = new MyObject();

            myObject.code = astring[0];
            myObject.description  = astring[1];
            myObject.price = astring[2];

            items.add(myObject);

        }
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

и затем, наконец, печатаете его, используя тот же цикл foreach, что иследует

for (MyObject item : items) {
        System.out.println("The code is: " + item.code + " The description is: " + item.description + " The price is: " + item.price);
    }

Вывод

The code is: code1 The description is: description1 The price is: price1
The code is: code2 The description is: description2 The price is: price2
0 голосов
/ 04 декабря 2018

Причина, по которой вы видите этот вывод, заключается в том, что вы не сохраняете описание вместе с кодом в списке , поэтому последнее описание сохраняется в переменной описания.не все значения описания.

Чтобы решить эту проблему, вы можете создать простой класс Java Bean / POJO и обернуть в него данные, а затем просто получить значение, которое высохранить его, а затем показать его правильно.Посмотрите на код ниже:

public class Launcher{
    public static void main(String[] args) {
        ArrayList<Item> items = new ArrayList<Item>();
        File fn = new File("file.txt");

        try {
            Scanner readFile = new Scanner(fn);
            while (readFile.hasNext()) {
                String[] astring = readFile.nextLine().split(",");
                String code = astring[0];
                String description = astring[1];
                String price = astring[2];
                Item item = new Item(code, description, price);
                items.add(item);

            }
        } catch (FileNotFoundException d) { // }

        }

        for (Item thing : items) {
            System.out.println(String.format("The code is: %s\tThe description is: %s\tThe Price is %s",thing.getCode(),thing.getDescription(), thing.getPrice()));
        }
    }
}

class Item {
    private String code;
    private String description;
    private String price;

    public Item(String code, String description, String price) {
        this.code = code;
        this.description = description;
        this.price = price;
    }

    public String getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    public String getPrice() {
        return price;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...