“线程中的异常”;“主要”;执行选择排序时发生java.lang.NullPointerException?
我正在编写一些代码来创建一个选择排序算法,该算法对distance类的对象进行排序。但是,当我运行程序时,程序返回错误:“线程中的异常”;“主要”;执行选择排序时发生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
> 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);
}