2014-08-28 5 views
-4

괜찮아요.이 질문에 대한 답변이 여러 번 나왔다는 것을 알았습니다. 그러나 나는 심각하게 잘못된 일을 파악하지 못했습니다.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); 
}}; 
+3

Machine.machineIdNumberComparator은 짧지 만 * 전체 * 프로그램이 보여주는 문제를 보여주십시오, 그리고 * 전체 * 오류 메시지를 제공해야합니다. "arraylist는 기호 오류를 찾을 수 없으며 machineIdNumberComparator도 마찬가지입니다"- 어떤 기호입니까? 그리고 왜 'inventoryArray.machineIdNumberComparator'로 비교자를 참조하려고합니까? 내가 희망하는 클래스에있을 때 이것을'Machine'이라고 부릅니까? (나는'Machine.machineIdNumberComparator'를 기대하고있다.) 나는이 문제가 정렬과 관련이 없다고 강력히 의심한다. –

+0

모든 소스 코드를 첨부 할 수 있습니까? 어쨌든 –

+0

고마워. 존 스키켓 (Jon Skeet)이 잘못했다고 말했고 지금은 바뀌 었습니다. @JonSkeet 감사합니다! – Daedric

답변

0

Collections.sort()의 두 번째 인수는

+4

이것은 주석이어야합니다. –

+0

죄송합니다. 낮은 평판으로 인해 코멘트 할 수 없습니다. – dpassy

+0

@eldest mohaned가이 의견을 말한대로, 아주 괜찮습니다. 코멘트를 달려면 몇 가지 질문에 답하십시오. –