代码编译,但当您运行它时,会出现错误消息,给出空指针异常。如底部所见。代码应该从程序中输入的txt文件中读取文本,然后创建一个新的txt文件,其中包含按服务年限排序的第一个txt文件的内容。但是,我一直收到该错误消息。任何帮助都将不胜感激。我在底部添加了错误消息,感谢所有帮助您的人,非常感谢:)
(25分)定义一个Java的类,名为员工。该类有数据成员,并为以下六个数据项中的每一个提供访问器和修改器方法。(这涉及创建文件Employee.java.)
>
服务年限(整数)(25分)创建一个文本(数据)文件,其中包含至少五个不同员工(对象)的数据。让每个数据项位于文本文件中自己的行上。例如,文件的前六行可能如下所示:
086244
莎莉·史密斯
100000
会计
经理
7个
(50分)'Heap'是满足heap属性的基于树的数据结构。max-heap是一个完整的二叉树,其中每个内部节点中的值大于或等于该节点子节点中的值。
有了堆(或满足堆属性的数组),在数组上执行重要任务会更有效(通常更快),比如找到数组中的最大元素(并删除它)和对数组排序。
在这个作业中,你必须写一个从文件中读取雇员名单的程序。该文件的名称将为“Employee.txt”。程序应该将排序后的数组输出到一个名为“SortedEmployee.txt”的文件堆html" target="_blank">排序代码:
public class HeapSort
{
//heap sort method
public static <Employee extends Comparable<Employee>> void heapSort(Employee[] list)
{
//create a Heap of integers
Heap<Employee> heap = new Heap<>();
//add elements to the heap
for (int i = 0; i< list.length; i++)
heap.add(list[i]);
//remove elements from the heap
for(int i = list.length - 1; i >= 0; i--)
list[i] = heap.remove();
}
}
堆代码:
import java.util.ArrayList;
public class Heap<Employee extends Comparable<Employee>>
{
private ArrayList<Employee> list = new ArrayList<>();
public Heap(){}
public Heap(Employee[] objects)
{
for(int i = 0; i < objects.length; i++)
add(objects[i]);
}
public void add(Employee newObject)
{
list.add(newObject);
int currentIndex = list.size() - 1;
while(currentIndex > 0)
{
int parentIndex = (currentIndex -1)/2;
if(list.get(currentIndex).compareTo(list.get(parentIndex)) > 0)
{
Employee temp = list.get(currentIndex);
list.set(currentIndex, list.get(parentIndex));
list.set(parentIndex, temp);
}
else
break;
currentIndex = parentIndex;
}
}
public Employee remove()
{
if(list.size() == 0) return null;
Employee removeObject = list.get(0);
list.set(0, list.get(list.size() -1));
list.remove(list.size() -1);
int currentIndex = 0;
while(currentIndex < list.size())
{
int leftChildIndex = 2 * currentIndex + 1;
int rightChildIndex = 2 * currentIndex + 2;
if(leftChildIndex >= list.size()) break;
int maxIndex = leftChildIndex;
if(rightChildIndex < list.size())
{
if(list.get(maxIndex).compareTo(list.get(rightChildIndex)) < 0)
maxIndex = rightChildIndex;
}
if(list.get(currentIndex).compareTo(list.get(maxIndex)) < 0)
{
Employee temp = list.get(maxIndex);
list.set(maxIndex, list.get(currentIndex));
list.set(currentIndex, temp);
currentIndex = maxIndex;
}
else
break;
}
return removeObject;
}
public int getSize()
{
return list.size();
}
public void print()
{
for (int i = 0; i <= getSize()-1; i++)
{
System.out.print("Index: " + i + " Data: " + list.get(i));
System.out.println();
}
}
}
员工对象类:
public class Employee implements Comparable<Employee>
{
private String id;
private String name;
private double salary;
private String department;
private String position;
private int yos;
public Employee(String id, String name, double salary,String department,String position,int yos)
{
this.id = id;
this.name = name;
this.salary = salary;
this.department = department;
this.position = position;
this.yos = yos;
}
public void setid(String id)
{
this.id = id;
}
public void setname(String name)
{
this.name = name;
}
public void setsalary(double salary)
{
this.salary = salary;
}
public void setdepartment(String department)
{
this.department = department;
}
public void setposition(String position)
{
this.position = position;
}
public void setyos(int yos)
{
this.yos = yos;
}
public String getid()
{
return id;
}
public String getname()
{
return name;
}
public double getsalary()
{
return salary;
}
public String getdepartment()
{
return department;
}
public String getposition()
{
return position;
}
public int getyos()
{
return yos;
}
public int compareTo(Employee emp)
{
return (this.yos - emp.yos);
}
public String toString()
{
return "ID=" + this.id+ ", name=" + this.name+ ", salary= $" + this.salary+ ", department:" + this.department+ ", postion:" + this.position+ ",yos= $" + this.yos + "]\n";
}
}
演示代码:
import java.util.*;
import java.io.*;
public class EmployeeDemo
{
public static void main(String[] args)throws IOException
{
Employee[] list = new Employee[5];
Scanner keyboard = new Scanner(System.in);
System.out.println("Please enter the text file: ");
String fileName = keyboard.nextLine();
File myFile = new File(fileName);
Scanner inputFile = new Scanner(myFile);
//Read all of the values from the file
//and calculate their total
//Read a value from the file
String id = inputFile.nextLine();
String name = inputFile.nextLine();
double salary = inputFile.nextDouble();
String clear = inputFile.nextLine();
String department = inputFile.nextLine();
String position = inputFile.nextLine();
int yrService = inputFile.nextInt();
String llear = inputFile.nextLine();
list[0] = new Employee(id,name,salary,department,position,yrService);
//close the file
// File o = new File("SortedEmployee.txt");
//o.createNewFile();
System.out.println("Enter the file name to be transfered to: ");
String filename = keyboard.nextLine();
PrintWriter outputFile = new PrintWriter(filename);//dont need the top
//HeapSort<Employee> h = new heapSort<Employee>(Employee);
HeapSort.heapSort(list);
//Display the sum of the numbers
while(inputFile.hasNext())//this loop is wrong too
{
outputFile.println(list[0].toString());
}
outputFile.close();
inputFile.close();
System.out.print("File Sorted and Transferred");
}
}
这是我收到的错误消息:
Please enter the text file:
C:\Users\jose385\Desktop\Employee.txt
Enter the file name to be transfered to:
green
Exception in thread "main" java.lang.NullPointerException
at Heap.add(Heap.java:22)
at HeapSort.heapSort(HeapSort.java:13)
at EmployeeDemo.main(EmployeeDemo.java:50)
----jGRASP wedge2: exit code for process is 1.
----jGRASP: operation complete.
您使< code>List的大小为5
Employee[] list = new Employee[5];
但只添加一个元素
list[0] = new Employee(id,name,salary,department,position,yrService);
实际上,只对一个元素排序有什么意义
还要尝试按照有关实现可比
性的正确方法的教程进行操作
主要内容:选择结构,循环结构C语言中常用的编程结构有三种(其它编程语言也是如此),它们分别是: 顺序结构:代码从前往后依次执行,没有任何“拐弯抹角”,不跳过任何一条语句,所有的语句都会被执行到。 选择结构:也叫分支结构。代码会被分成多个部分,程序会根据特定条件(某个表达式的运算结果)来判断到底执行哪一部分。 循环结构:程序会重新执行同一段代码,直到条件不再满足,或者遇到强行跳出语句(break 关键字)。 选择结构 选择结构
任何编程语言中最常见的程序结构就是顺序结构。顺序结构就是程序从上到下逐行的执行,中间没有任何判断和跳转。 如果 main 方法的多行代码之间没有任何流程控制,则程序总是从上向下依次执行,排在前面的代码先执行,排在后面的代码后执行。这意味着:如果没有流程控制, Java 方法里的语句是一个顺序执行流,从上向下依次执行每条语句。 不论哪一种编程语言,都会提供两种基本的流程控制结构:分支结构和循环结构。
在android a有一个URL像http://api.openweathermap.org/data/2.5/forecast/daily?q=khulna 所以我使用Uri构建器 但输出 http://api.openweathermap.org/data/2.5/forecast/daily?q=khulna 这里有两个额外的字符'&'和'='; 我将这个URI转换为字符串,并使用repla
我试图创建一个简单的while循环,它将运行start、stop、quit和help命令。“启动”、“停止”和“帮助”将仅显示一些打印文本。在它们运行之后,我希望它继续执行另一个命令。然而,在退出时,我希望整个程序停止。
6.2.3 循环结构 循环结构是一个重要的程序结构,它具有重复执行某段程序的功能。通常,循环结构包括以下四个组成部分: 1、循环初始化部分——初始化循环控制变量、循环体所用到变量; 2、循环体部分——循环结构的主体; 3、循环调整部分——循环控制变量的修改、或循环终止条件的检查; 4、循环控制部分——程序执行的控制转移。 以上四部分可以在程序中用各种不同的形式体现出来,有时也并非清析地表达出来。常