-1
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.io.FileNotFoundException;

import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;

import java.util.List;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class database {
    String fileName;
    Scanner input;
    String[][] data;
    List<String> useful_list;
    List<String> records;
    ArrayList<Object> handles;

    public database(String fileName) {
        this.fileName = fileName;
    }

    public void openFile() {
        try {
            input = new Scanner(new File(fileName));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            return;
        }
    }

    public void readRecords() {
        // Read all lines (records) from the file into an ArrayList
        records = new ArrayList<String>();
        try {
            while (input.hasNext())
                records.add(input.nextLine());

        } catch (Exception e) {
            // TODO: handle exception
        }

    }

    public void parseFields() {
        String delimiter = ",\n";

        // Create two-dimensional array to hold data (see Deitel, p 313-315)
        int rows = records.size(); // #rows for array = #lines in file
        data = new String[rows][]; // create the rows for the array
        int row = 0;

        for (String record : records) {
            StringTokenizer tokens = new StringTokenizer(record, delimiter);
            int cols = tokens.countTokens();
            data[row] = new String[cols]; // create columns for current row
            int col = 0;
            while (tokens.hasMoreTokens()) {
                data[row][col] = tokens.nextToken().trim();

                col++;

            }

            row++;

        }

    }

    public static void main(String[] args) {
        String filename = null;
        String[] values = new String[4];
        String input = null;

        BufferedReader reader = new BufferedReader(new InputStreamReader(
                System.in));

        try {
            filename = reader.readLine();
            input = reader.readLine();
            values = input.split(",");

        } catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.println("Invalid Input");
            return;
        }

        int[] input1;
        input1 = new int[4];

        try {
            for (int j = 0; j < values.length; j++) {
                input1[j] = Integer.parseInt(values[j]);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println("Invalid Input");
            return;
        }

        if (input1[0] >= 4 || input1[0] <= 0) {
            System.out.println("Invalid Input");
            return;
        }

        database file1 = new database(filename);
        file1.openFile();
        file1.readRecords();
        file1.parseFields();
        file1.search(input1[1]);
        if (file1.useful_list.size() == 0) {
            System.out.println("Data Unavailable");
            return;
        }

        file1.sortarray(input1[0] - 1);

        int width = input1[2];
        int skip = (input1[3] - 1) * width;
        Iterator<Object> it = file1.handles.iterator();
        for (int i = 1; i <= skip; i++) {
            if (it.hasNext()) {
                it.next();
            } else {
                System.out.println("Data Unavailable");
                return;
            }

        }

        for (int j = 1; j <= width && it.hasNext(); j++) {
            String[] a = (String[]) it.next();
            for (int i = 0; i < a.length; i++)
                if(i<a.length-1)
                System.out.print(a[i] + ",");
                else
                    System.out.print(a[i]);
            System.out.println();
        }

    }

    void sortarray(final int index) {
        handles = new ArrayList<Object>();
        for (int i = 0; i < data.length; i++)
            handles.add(data[i]);

        Collections.sort(handles, new Comparator<Object>() {
            public int compare(Object o1, Object o2) {
                String[] a = (String[]) o1;
                String[] b = (String[]) o2;
                if (index == 1 || index == 0) {
                    int left = Integer.parseInt(a[index]);
                    int right = Integer.parseInt(b[index]);
                    return Integer.compare(left, right); //Line 165 
                } else {

                    if (a.length == 0 && b.length == 0)
                        return 0;
                    if (a.length == 0 && b.length != 0)
                        return 1;
                    if (a.length != 0 && b.length == 0)
                        return -1;
                    return a[index].compareTo(b[index]);
                }
            }

            public boolean equals(Object o) {
                return this == o;
            }

        });

    }

    void search(int searchs) {
        useful_list = new ArrayList<String>();

        for (int row = 0; row < data.length; row++) {

            if (Integer.parseInt(data[row][0]) == searchs) {
                // store in array list
                useful_list.add(data[row][0] + "," + data[row][1] + ","
                        + data[row][2] + "," + data[row][3]);

            }
        }
        if (useful_list.size() == 0) {
            return;
        }
        String delimiter = ",\n";

        // Create two-dimensional array to hold data (see Deitel, p 313-315)
        int rows = useful_list.size(); // #rows for array = #lines in file
        data = new String[rows][]; // create the rows for the array
        int row1 = 0;

        for (String record : useful_list) {
            StringTokenizer tokens = new StringTokenizer(record, delimiter);
            int cols = tokens.countTokens();
            data[row1] = new String[cols]; // create columns for current row
            int col1 = 0;
            while (tokens.hasMoreTokens()) {
                data[row1][col1] = tokens.nextToken().trim();

                col1++;

            }

            row1++;

        }

    }

}

this code is working fine on eclipse .
but if i submit it for my online compilation ..
it shows compile time error.

error message
*database.java 163 cannotfindsymbolsymbol methodcompare int int location class java.lang.Integer return Integer.compare left right ;^1error*

4

2 回答 2

4

Integer.compare was introduced to Java in version 1.7. Chances are that the online compiler has an earlier version of the compiler

于 2013-08-20T14:49:20.213 回答
3

Integer.compare(int,int) was introduced in Java 1.7. I expect you are seeing that error because Java 6 or earlier is used to compile the code. The docs. themselves (linked above) show how to do it for earlier Java (you should consult them at times like this).

Integer.valueOf(x).compareTo(Integer.valueOf(y))
于 2013-08-20T14:53:11.310 回答