Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“线程中的异常”;“主要”;执行选择排序时发生java.lang.NullPointerException?_Java_Sorting_Comparable_Selection Sort_Jgrasp - Fatal编程技术网

“线程中的异常”;“主要”;执行选择排序时发生java.lang.NullPointerException?

“线程中的异常”;“主要”;执行选择排序时发生java.lang.NullPointerException?,java,sorting,comparable,selection-sort,jgrasp,Java,Sorting,Comparable,Selection Sort,Jgrasp,我正在编写一些代码来创建一个选择排序算法,该算法对distance类的对象进行排序。但是,当我运行程序时,程序返回错误: > Exception in thread "main" java.lang.NullPointerException > at Distance.compareTo(Distance.java:28) > at Distance.compareTo(Distance.java:1) > at Driv

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

>  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.*;
公共类MakeDataFile
{
公共静态void main(字符串[]args)引发异常
{
系统设置(新的PrintStream(新的FileOutputStream(“data.txt”));
int numitems=(int)(Math.random()*25+50);
System.out.println(numitems);
for(int k=0;k
距离等级:

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. ";
   }
}
公共类距离{
私人整数米英尺,米英寸;
公共距离(){
我的脚=我的英寸=0;
}
公共距离(整数x,整数y){
我的脚=x;
我的英寸=y;
}
公共int getFeet(){
回到我的脚;
}
公共int getInches(){
返回我的英寸;
}
公共空间设置英尺(整数x){
我的脚=x;
}
公共空间设置英寸(整数x){
我的英寸=x;
}
公共整数比较(距离d){
int myTotal=我的英尺*12+我的英寸;
int dTotal=d.getFeet()*12+d.getInches();
返回myTotal-dTotal;
}
公共布尔等于(距离arg){
返回compareTo(arg)==0;
}
公共字符串toString()
{
返回我的英尺数+英尺数+英寸数+英寸数。“;
}
}
距离课程的目的是让我更容易比较距离

实际驾驶员:

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;
        }

   }
import java.io.*//文件类
导入java.util.*//扫描器类
公共类驱动程序05
{
公共静态void main(字符串[]args)引发异常
{
可比[]数组=输入(“data.txt”);
排序(数组);
输出(数组,“output.txt”);
}
公共静态可比较[]输入(字符串文件名)引发异常
{ 
扫描仪内嵌=新扫描仪(新文件(文件名));
int numitems=infle.nextInt();
可比[]数组=新距离[numitems];
int x=0;
对于(int k=1;k
驱动程序包含选择排序算法,该算法对从MakeData文件的输出中获得的数据进行排序


如果有人能解释这个错误以及如何纠正它,那将非常有帮助

sort
方法中,
for
循环以
k=0
开始,它将
findMax
中的endIndex作为
array.length
传递。但是数组的最后一个有效索引应该是
array.length-1

执行以下更改:

for(int k = 1; k <= array.length; k++)
         {
            maxPos = findMax(array, array.length - k);
            swap(array, maxPos, array.length - k - 1);
         }

for(int k=1;k)您忘记在循环中增加
x
for(int k = 1; k <= array.length; k++)
         {
            maxPos = findMax(array, array.length - k);
            swap(array, maxPos, array.length - k - 1);
         }