Как отсортировать данные, считанные из текстового файла, а затем отобразить несортированные и отсортированные данные в графическом интерфейсе?

#java #user-interface #arraylist #selection-sort

#java #пользовательский интерфейс #arraylist #выбор-сортировка

Вопрос:

У меня есть этот класс конструктора для марки, модели, года и пробега автомобиля.

 public class Car {
private String make,model;
private int year,mileage;

public String toString() {
return "Car [make="   make   ", model="   model  ", "
          "year ="   year   ", mileage="   mileage   "]"; }


public String getMake() {
    return make;
}
public Car(String make, String model, int year, int mileage) {
    super();
    this.make = make;
    this.model = model;
    this.year = year;
    this.mileage = mileage;
}
public void setMake(String make) {
    this.make = make;
}
public String getModel() {
    return model;
}
public void setModel(String model) {
    this.model = model;
}
public int getYear() {
    return year;
}
public void setYear(int year) {
    this.year = year;
}
public int getMileage() {
    return mileage;
}
public void setMileage(int mileage) {
    this.mileage = mileage;
}
}
  

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

 public class storing {

public static void main(String[] args) {

    TextFileInput fileInput = new TextFileInput("CarDetails.txt");
    ArrayList <Car> cars = new ArrayList<Car>();
    String line = fileInput.readLine();


    while(line!=null) {
        String [] values = new String [4];

        StringTokenizer st = new StringTokenizer(line,",");
        int numOfCommas = st.countTokens();

        for(int i = 0;i<numOfCommas;i  ) {
            values[i]=(st.nextToken(","));
        }
        cars.add(new Car(values[0],values[1],Integer.parseInt(values[2]),Integer.parseInt(values[3])));

        line = fileInput.readLine();
    }

    CarGUI gui = new CarGUI(cars);

         }  
    }//main
  

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

 import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import java.util.ArrayList;

public class CarGUI extends JFrame {

private JTextArea unsorted,sorted;
private ArrayList<Car> cars;


public CarGUI(ArrayList<Car> c) {
    cars = c;
    setTitle("CarGUI");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(600,400);
    setLocationRelativeTo(null);
    setComponents();
    setVisible(true);

}


private void setComponents() {

    setLayout(new GridLayout(1,2));

    unsorted = new JTextArea();
    unsorted.setBackground(Color.CYAN);
    unsorted.setFont(new Font(Font.DIALOG, Font.BOLD, 12));
    unsorted.setEditable(false);
    unsorted.setBorder(BorderFactory.createLineBorder(Color.black));
    for(int i=0;i<cars.size();i  ) {
        unsorted.append(cars.get(i).toString() "n");
    }

    add(unsorted);

    selectionSort(cars);

    sorted = new JTextArea();
    sorted.setBackground(Color.YELLOW);
    sorted.setFont(new Font(Font.DIALOG, Font.BOLD, 12));
    sorted.setEditable(false);
    sorted.setBorder(BorderFactory.createLineBorder(Color.black));
    for(int i=0;i<cars.size();  i) {
        sorted.append(cars.get(i).toString() "n");
    }

    add(sorted);
}

private void selectionSort(ArrayList<Car> c) {
    for (int i = 0; i<c.size()-1;i  ) { 
          int indexLowest = i; 
          for(int j = i   1;j<c.size();j  ) {
             if (c.get(j).make() < c.get(indexLowest).make()) {indexLowest = j;}
          }
          if ( c.get(indexLowest) != c.get(i) ) { 
             Car temp = c.get(indexLowest);
             c.set(indexLowest,c.get(i)); 
             c.set(i, temp);
          }  
      } 

   }//SelectionSort
} 
  

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

Комментарии:

1. что вы подразумеваете под «не выполняется» — где происходит сбой?

2. Когда я пытаюсь запустить его как есть, я получаю это исключение ошибки в потоке «main» java.lang.NumberFormatException: null в java.lang. Integer.parseInt(Неизвестный источник) на java.lang. Integer.parseInt(неизвестный источник) в storing.main(storing.java:22) Также в методе selectionsort появляется ошибка, в которой говорится, что make не определен для car @SharonBenAsher

3. становится ли это более понятным после этого? Java не удалось проанализировать входные данные в int. он получил нулевое значение из tokenozer. проверьте свой ввод, добавьте печать ввода, чтобы увидеть, что выдает токенизатор, отладьте свой код.

4. и, возможно, вы имели в виду, что для класса car нет make() метода getMake() ?