如何在2D数组上使用插入排序?

时间:2016-01-30 23:21:01

标签: java arrays csv

所以,我使这个代码几乎可以工作,但我想在数组上使用插入排序,并且输出显示仅按插入排序按产品ID排序的结果。每个产品ID应具有相同的相应数量的单位。单位不应单独分类。唯一的订单是产品ID是我基本上暗示的。

      import java.util.*;
      import java.io.*;
      class newversion {
        public static int [][] table; // the output table
        public static int numOfRows; //number of rows used up in the table

        public static int lookfor(int productID){
          int location = -1; //-1 an error
          for(int i = 0; i < numOfRows; i++){
            if (table[i][0] == productID){
              location = i;
            }
          }
          return location;
        }
      /*
        here is my modified bubble sort code. I based it on this, but done differently:

        http://stackoverflow.com/questions/23283655/bubble-sort-on-2d-array-java

        public static void swap(int int1, int int2, int[] array) {
          if(int1 == int2){
            return;
          }
          else{
          int temp = int2;
          array[int2] = array[int1];
          array[int2] = temp;
        }
        }
        but it didn't work and I had to try something else
      */
        public static boolean contains(int productID){
          if (lookfor(productID) == -1){
            return false;
          }
            return true;
        }

        public static void main(String[] args) {
          File file = null;
          Scanner scanner = null;
          try{
            file = new File("data.csv");
            scanner = new Scanner( file );
          }
          catch(Exception e){
            System.out.println("Error opening file!");
            System.exit(1);
          }

          //citation of idea for sorting method in 2D array: http://stackoverflow.com/questions/23283655/bubble-sort-on-2d-array-java
          //I'm using bubble sort on a 2D array
          //this is his code
          /*


          private static void bubblesort(Integer[] array) {
        for (int i = 0; i < array.length; i++) {
            for(int j = 0; j < array.length - 1; j++) {
                if(array[j].compareTo(array[j+1]) > 0) {
                    swap(j, j+1, array);
                }
            }
        }

      }

      private static void swap(Integer int1, Integer int2, Integer[] array) {
          if(int1 == int2)return;
          Integer temp = new Integer(array[int2]);
          array[index2] = array[int1];
          array[int1] = temp;

      }
          */
          //here's my idea for bubble sort on a 2D array
      /*
          for (int i = 0; i < numOfRows; i++){
            for(int j = 0; j < numOfRows - 1; j++) {
              if(table[j][0].compareTo(array[j+1][0]) > 0) {
                      swap(j, j+1, table);
                  }
          }
          //this didn't work well either
          //Now, I have to try another for-loop
      */
           //Count the number of lines in the file
           int size_of_file = 0;
           while (scanner.hasNextLine()){
             scanner.nextLine();
             size_of_file++;
           }
           table = new int[size_of_file][2];

           //reset scanner
           try{
             file = new File("data.csv");
             scanner = new Scanner( file );
           }
           catch(Exception e){
             System.out.println("Error opening file!");
             System.exit(1);
           }

          //save the title
          String titleLine = scanner.nextLine();
          System.out.println(titleLine);
          //for each line in the file, store and total it.
          numOfRows=0;
          while (scanner.hasNextLine()){
            String ln = scanner.nextLine();
            String[] row = ln.split(",");
            System.out.println(row[0] + ", " + row[1]);
            if (contains(Integer.parseInt(row[0]))){
              //This is the location in the table where the product id exists already.
              int location = lookfor(Integer.parseInt(row[0]));
              //add the units to what we have in the table
              table[location][1] += Integer.parseInt(row[1]);
            }
            else{
              table[numOfRows][0]= Integer.parseInt(row[0]);
              table[numOfRows][1]= Integer.parseInt(row[1]);
              numOfRows++;
            }
          }
          //output
          try{
            PrintWriter output = new PrintWriter("output.csv");
            output.println(titleLine);
            for(int i=0;i<numOfRows;i++){
                output.println(table[i][0] + "," + table[i][1]);
            }

            output.close();
          }
          catch(Exception e){
            System.out.println("Error writing file");
          }
        }
      }

我想了解如何更好地使用FileReader。我在这里读了一下:

https://www.caveofprogramming.com/java/java-file-reading-and-writing-files-in-java.html https://bytes.com/topic/java/answers/585814-reading-data-into-array-file

虽然我不认为我理解如何将它存储到数组中。有人可以解释我如何将FileReader类中的值存储到数组中吗?我希望它在2D数组中,其中行数只是我拥有的许多产品ID,并且总是有2列。

Excel文件阅读:

Product ID  Units                           
10002   4                           
10004   6                           
10008   2                           
10010   3                           
10010   3                                           

输出我现在得到:

Product ID  Units
    10002   20
    10004   72
    10008   12
    10010   37
    10007   28
    20003   42
    30019   56
    30020   29
    10006   36
    20005   32
    etc.

如果此更新应作为一个不同的问题发布,我道歉。让我知道所以我可以遵循社区标准。我发布的输出,你会注意到没有按productID排序。这是我想做的最后一件事。除此之外,它基本上有效。我很抱歉,如果有人想投票给我,因为没有发布答案,因为从技术上来说,这与最初的问题是相同的答案。如果此更新应该是另一个主题,请再次告诉我,我将进行编辑。

0 个答案:

没有答案