线程" main"中的例外情况执行选择排序时java.lang.NullPointerException?

时间:2018-05-15 02:56:41

标签: java sorting comparable selection-sort jgrasp

我正在编写一些代码来创建一个选择排序算法,该算法对距离类的对象进行排序。但是,当我运行程序时,程序返回错误:

>  Exception in thread "main" java.lang.NullPointerException    
>         at Distance.compareTo(Distance.java:28)
>       at Distance.compareTo(Distance.java:1)
>       at Driver05.findMax(Driver05.java:54)
>       at Driver05.sort(Driver05.java:43)
>       at Driver05.input(Driver05.java:26)
>       at Driver05.main(Driver05.java:7)

这是什么错误,我该怎么做才能解决它?

生成数据的文件(以英尺和英寸为单位随机生成数据):

import java.io.*;
   public class MakeDataFile
   {
      public static void main(String[] args) throws Exception
      {
         System.setOut(new PrintStream(new FileOutputStream("data.txt")));
         int numitems = (int)(Math.random() * 25 + 50);
         System.out.println(numitems);
         for(int k = 0; k < numitems; k++)
         {
            System.out.println((int)(Math.random() * 100));
            System.out.println((int)(Math.random() * 12));
         }
      }
   }

距离等级:

public class Distance implements Comparable<Distance> {
   private int myFeet, myInches;
   public Distance() {
      myFeet = myInches = 0;
      }
   public Distance(int x, int y) {
      myFeet = x;
      myInches = y;
   }

   public int getFeet() {
      return myFeet;
   }
   public int getInches() {
      return myInches;
   }

   public void setFeet(int x) {
      myFeet = x;
   }

   public void setInches(int x) {
      myInches = x;

   }
   public int compareTo( Distance d) {
      int myTotal = myFeet * 12 + myInches;
      int dTotal = d.getFeet() * 12 + d.getInches();
      return myTotal - dTotal;
         }
   public boolean equals(Distance arg) {
      return compareTo(arg) == 0;
   }
   public String toString()
   {
   return myFeet + " ft. " + myInches + " in. ";
   }
}

距离课程的目的是让我更容易比较距离。

实际驾驶员:

import java.io.*;      //the File class
   import java.util.*;    //the Scanner class
    public class Driver05
   {
       public static void main(String[] args) throws Exception
      {
         Comparable[] array = input("data.txt");
         sort(array);
         output(array, "output.txt");
      }

       public static Comparable[] input(String filename) throws Exception
      { 
         Scanner infile = new Scanner( new File(filename) );
         int numitems = infile.nextInt();
         Comparable[] array = new Distance[numitems];
         int x = 0;
         for(int k = 1; k < numitems; k = k+2)
         {
            int feetNum = infile.nextInt();
            int inchNum = infile.nextInt();
            array[x] = new Distance(feetNum, inchNum);
         }
         infile.close();

         sort(array);
         output(array, "output.txt");
         return array;
      }

       public static void output(Object[]array, String filename) throws Exception
      {
         System.setOut(new PrintStream(new FileOutputStream(filename)));
         for(int k = 0; k < array.length; k++)
            System.out.println(array[k].toString());
      }

       public static void sort(Comparable[] array)
      {
         int maxPos;
         for(int k = 0; k < array.length; k++)
         {
            maxPos = findMax(array, array.length - k);
            swap(array, maxPos, array.length - k - 1);
         }
      }

            private static int findMax(Comparable[] enterArray, int endIndex) {
               int max = 0;


               for(int x = 0; x < endIndex; x++) {

                  if (enterArray[max].compareTo(enterArray[x]) < 0) {
                     max = x;
                  }

                  }
                  return max;
               }

        private static void swap(Comparable[] enterArray,int maxIndex,int lastIndex) {
            Comparable temp;
            temp = enterArray[maxIndex];
            enterArray[maxIndex] = enterArray[lastIndex];
            enterArray[lastIndex] = temp;
        }

   }

驱动程序包含选择排序算法,该算法对从MakeData文件的输出中获取的数据进行排序。

如果有人可以解释此错误以及如何纠正错误,将会非常有帮助。

1 个答案:

答案 0 :(得分:0)

sort方法中,for循环以k=0开头,findMaxarray.length中的endIndex传递为array.length-1。但有效的数组最后一个索引应为for(int k = 1; k <= array.length; k++) { maxPos = findMax(array, array.length - k); swap(array, maxPos, array.length - k - 1); }

进行以下更改:

cars = {}

line = input('Car: ')
while line:
  cars[line] = cars.get(line, 0) + 1
  line = input('Car: ')

for colour in cars:
  print('Cars that are ' + colour + ':', cars[colour])