괜찮아요.이 질문에 대한 답변이 여러 번 나왔다는 것을 알았습니다. 그러나 나는 심각하게 잘못된 일을 파악하지 못했습니다.Java 비교기 비교 정렬
도와주세요.
나는 두 가지 클래스가 있습니다. 객체 클래스 인 Machine.java와 main 문을 포함하는 InventoryTest.java 클래스.
어디서나 내가 읽어야한다고 읽어야합니다.
이
는이 라인이 문제와 함께 제공되는 InventoryTest Collections.sort(arraylist, inventoryArray.machineIdNumberComparator);
에있는 Machine.java 클래스
public static Comparator<Machine> machineIdNumberComparator = new Comparator<Machine>() {
@Override
public int compare(Machine s1, Machine s2) {
String MachineID1 = s1.getMachineIdNumber();
String MachineID2 = s2.getMachineIdNumber();
//ascending order
return MachineID1.compareTo(MachineID2);
}};
입니다. arraylist가 기호 오류를 찾을 수없고 machineIdNumberComparator도 찾을 수 없습니다.
3 가지 방법으로 정렬 할 수 있어야합니다.
편집 : 내가 추가하고 내 ArrayList를
public List<Machine> inventoryArray = new ArrayList<>();
inventoryArray.add(new Machine(strMachineIdNumber, strManufacturer, strType, dblPowerOrCapacity, dblPrice));
ArrayList에가 당신이 모든 변수를 declair 공공 클래스 아래 시작에 declaired되어 생성하는 방법이다.
/**
*
* @author stephankranenfeld
*/
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
import java.util.Comparator;
import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JTextArea;
public class InventoryTest extends JFrame {
private static final int FRAME_WIDTH = 800;
private static final int FRAME_HEIGHT = 1500;
private final JTextArea textArea;
private final JButton addMachine;
private final JButton removeMachine;
private final JButton exitButton;
private final JButton sortButton;
final String START_TEXT = String.format("%-20s %-20s %-10s %15s %10s %n", "Machine ID Number:", "Manufacturer:", "Type:", "Power/Capacity:", "Price:"); // starting line of texted used in both display all and entre data buttons.
final String DEVIDER = "-------------------------------------------------------------------------------------\n";// a devider used multple times
public List<Machine> inventoryArray = new ArrayList<>();
/*
junk that isn't needed i think
*/
private void sort() {
JComboBox sortBy = new JComboBox();
sortBy.addItem("ID Number");
sortBy.addItem("Manufacturer");
sortBy.addItem("Type");
int option = JOptionPane.showConfirmDialog(null, sortBy, "Sort by?", JOptionPane.OK_CANCEL_OPTION);
if (option == JOptionPane.OK_OPTION)
{
//if id is selected sort by id
//if manufacturer is selected sor by manufacturer
//if type is selected sort by type
Collections.sort(inventoryArray, Machine.machineIdNumberComparator);
}
}
}
public class Machine{
/*
* all the get and set methods
*/
public static Comparator<Machine> machineIdNumberComparator = new Comparator<Machine>() {
@Override
public int compare(Machine s1, Machine s2) {
String MachineID1 = s1.getMachineIdNumber();
String MachineID2 = s2.getMachineIdNumber();
//ascending order
return MachineID1.compareTo(MachineID2);
}};
Machine.machineIdNumberComparator
은 짧지 만 * 전체 * 프로그램이 보여주는 문제를 보여주십시오, 그리고 * 전체 * 오류 메시지를 제공해야합니다. "arraylist는 기호 오류를 찾을 수 없으며 machineIdNumberComparator도 마찬가지입니다"- 어떤 기호입니까? 그리고 왜 'inventoryArray.machineIdNumberComparator'로 비교자를 참조하려고합니까? 내가 희망하는 클래스에있을 때 이것을'Machine'이라고 부릅니까? (나는'Machine.machineIdNumberComparator'를 기대하고있다.) 나는이 문제가 정렬과 관련이 없다고 강력히 의심한다. –모든 소스 코드를 첨부 할 수 있습니까? 어쨌든 –
고마워. 존 스키켓 (Jon Skeet)이 잘못했다고 말했고 지금은 바뀌 었습니다. @JonSkeet 감사합니다! – Daedric