java - 如何对从文本文件读取的数据进行排序,然后在 GUI 中显示未排序和排序的数据?
问题描述
我有一个用于汽车的品牌、型号、年份和里程的构造函数类。
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
我无法理解我应该如何实现 Gui 部分,但我的选择排序似乎不起作用。
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
}
我在这里的代码没有运行,但我不确定为什么。请帮助我了解我哪里出错了。
解决方案
推荐阅读
- javascript - 无法覆盖引导列宽限制
- python-3.x - 将前一行值添加到当前行等Python
- amazon-web-services - 如何将 ssl 证书列表添加到我使用 Terraform for 循环构造之一创建的 alb 侦听器列表中?
- azure - Azure WVD RDS - ARM 版本
- android - 新文本字段未显示在 ToDoList 类型的应用程序中
- python - 将函数应用于 numpy 矩阵列表
- php - 邮件功能中的 PHP 更改
- haskell - 添加列表的每 5 个(或第 n 个)元素的方法是什么?
- sql - 将 JSON 数组的属性连接回一个值
- php - 使用特殊字符更改 WooCommerce 结帐中的“附加信息”文本