我正在编写一些代码来创建一个选择排序算法,该算法对距离类的对象进行排序。但是,当我运行程序时,程序返回错误:
> 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文件的输出中获取的数据进行排序。
如果有人可以解释此错误以及如何纠正错误,将会非常有帮助。
答案 0 :(得分:0)
在sort
方法中,for
循环以k=0
开头,findMax
将array.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])