【发布时间】:2016-07-04 00:55:50
【问题描述】:
我是新来的,目前正在为大学编写一些代码。
我已经为我的项目开发了一个代码,但我的列表的头部和尾部总是返回 null,即使程序本身读取了它假定从中获取信息的文件。你们能帮帮我吗?
这是有问题的代码:
package projectosalarios;
import java.io.BufferedWriter;
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
class Funcionario{
String Nome;
String BI;
int Departamento;
int Cargo;
int Salario;
public Funcionario(String Nome, String BI, int Departamento, int Cargo, int Salario){
this.Nome = Nome;
this.BI = BI;
this.Departamento = Departamento;
this.Cargo = Cargo;
this.Salario = Salario;
}
}
class Lista {
Node head;
Node tail;
public static void add(Lista Lista, Funcionario NovoFuncionario) {
Node novoNo = new Node (NovoFuncionario);
if(Lista.head == null){
Lista.head = novoNo;
Lista.tail = novoNo;
}else {
novoNo.next = Lista.head;
Lista.head = novoNo;
}
}
}
class Node{
Funcionario value;
Node next;
public Node(Funcionario value){
this.value = value;
}
}
public class ProjectoSalarios {
public static void main(String[] args) throws IOException {
String NomeFicheiro = "C:\\Users\\Nelson\\Documents\\NetBeansProjects\\ProjectoSalarios\\funcionarios.txt";
String NomeFicheiro2 = "C:\\Users\\Nelson\\Documents\\NetBeansProjects\\ProjectoSalarios\\salarios.txt";
Lista ListaFuncionario = new Lista();
int ArraySalario[];
ArraySalario = new int[15];
try{
File Ficheiro2 = new File(NomeFicheiro2);
try (Scanner leitorFicheiro = new Scanner (Ficheiro2)) {
while(leitorFicheiro.hasNextLine()){
String linha = leitorFicheiro.nextLine();
String dados[] = linha.split(":");
int Cargo = Integer.parseInt(dados[0]);
int Valor = Integer.parseInt(dados[1]);
ArraySalario[Cargo-1]= Valor;
}
}
} catch (FileNotFoundException exception) {
String mensagem = "Erro: o ficheiro " + NomeFicheiro2 + " não foi encontrado.";
System.out.println(mensagem);
}
try{
File Ficheiro = new File(NomeFicheiro);
Scanner leitorFicheiro = new Scanner(Ficheiro);
Funcionario NovoFuncionario;
while(leitorFicheiro.hasNextLine()){
String Linha = leitorFicheiro.nextLine();
String dados[] = Linha.split(":");
String Nome = dados[0];
String BI = dados[1];
int Departamento = Integer.parseInt(dados[2]);
int Cargo = Integer.parseInt(dados[3]);
NovoFuncionario = new Funcionario(Nome, BI, Departamento, Cargo, ArraySalario[Cargo-1]);
Lista.add(ListaFuncionario, NovoFuncionario);
}
}catch (FileNotFoundException exception) {
String mensagem = "Erro: o ficheiro " + NomeFicheiro + " não foi encontrado.";
System.out.println(mensagem);
}
try (BufferedWriter Writer = new BufferedWriter ( new FileWriter("C:\\Users\\Nelson\\Documents\\NetBeansProjects\\ProjectoSalarios\\output.txt"))) {
Writer.write(ProcurarSalario(ListaFuncionario, "12312355"));
Writer.write(SomaSalario(ListaFuncionario, 1));
Writer.write(SomaSalarioCargo(ListaFuncionario, 1));
Writer.write(SalarioAlto(ListaFuncionario, 1000));
Writer.write(SalarioAltoPessoas(ListaFuncionario, 1000));
Writer.write(SalarioBaixo(ListaFuncionario, 1000));
Writer.write(SalarioBaixoPessoas(ListaFuncionario, 1000));
Writer.write(SalarioAltoDepartamento(ListaFuncionario, 1));
Writer.write(SalarioBaixoDepartamento(ListaFuncionario, 1));
Writer.write(Duplicados(ListaFuncionario, "12312355"));
}
}
static int ProcurarSalario(Lista Lista, String BI){ //1
Node Copy = Lista.head;
while(Copy!=null){
if(Copy.value.BI.equals(BI)){
return Copy.value.Salario;
}
Copy = Copy.next;
}return 0;
}
static int SomaSalario(Lista Lista, int Departamento){ //2
Node Copy = Lista.head;
int Sum= 0;
while(Copy !=null){
if(Copy.value.Departamento == 10){
Sum+=Copy.value.Salario;
}
Copy = Copy.next;
}return Sum;
}
static int SomaSalarioCargo(Lista Lista, int Cargo){ //3
Node Copy = Lista.head;
int Sum = 0;
while (Copy !=null){
if(Copy.value.Cargo == 3){
Sum+=Copy.value.Salario;
}
Copy = Copy.next;
}return Sum;
}
static int SalarioAlto(Lista Lista, int Salario){ //4
Node Copy = Lista.head;
while(Copy !=null && Copy.next != null){ //CHECK HERE
if(Copy.value.Salario < Copy.next.value.Salario ){
Copy = Copy.next;
}else{
Copy.next = Copy.next.next;
}
}return Copy.value.Salario;
}
static int SalarioAltoPessoas(Lista Lista, int Salario){ //5
Node Copy = Lista.head;
int i = 1;
while(Copy !=null && Copy.next != null){ //CHECK HERE
if(Copy.value.Salario < Copy.next.value.Salario ){
Copy = Copy.next;
i=1;
}else if(Copy.value.Salario > Copy.next.value.Salario){
Copy.next = Copy.next.next;
}else{
i++;
Copy.next = Copy.next.next;
}
}return i;
}
static int SalarioBaixo(Lista Lista, int Salario){ //6
Node Copy = Lista.head;
while(Copy !=null && Copy.next != null){ //CHECK HERE
if(Copy.value.Salario > Copy.next.value.Salario ){
Copy = Copy.next;
}else{
Copy.next = Copy.next.next;
}
}return Copy.value.Salario;
}
static int SalarioBaixoPessoas(Lista Lista, int Salario){ //7
Node Copy = Lista.head;
int i = 1;
while(Copy !=null && Copy.next != null){ //CHECK HERE
if(Copy.value.Salario > Copy.next.value.Salario ){
Copy = Copy.next;
i=1;
}else if(Copy.value.Salario < Copy.next.value.Salario){
Copy.next = Copy.next.next;
}else{
i++;
Copy.next = Copy.next.next;
}
}return i;
}
static int SalarioAltoDepartamento(Lista Lista, int Departamento){ //8
Node Copy = Lista.head;
int departamento [] = new int [10];
while(Copy!=null){
departamento[Copy.value.Departamento-1] += Copy.value.Salario;
Copy=Copy.next;
}
int Maximo=departamento[0];
int Codigo=0;
for(int i : departamento) {
if(departamento [i] > Maximo){
Maximo = departamento[i];
Codigo=i+1;
}
}return Codigo;
}
static int SalarioBaixoDepartamento(Lista Lista, int Departamento){ //9
Node Copy = Lista.head;
int departamento [] = new int [10];
while(Copy!=null){
departamento[Copy.value.Departamento-1] += Copy.value.Salario;
Copy=Copy.next;
}
int f=0;
if(departamento[f] == 0){
f++;
}
int Minimo = departamento[f];
int Codigo=0;
for(int i : departamento) {
if(departamento [i] <= Minimo && departamento [i] != 0){
Minimo = departamento[i];
Codigo=i+1;
}
}return Codigo;
}
static String Duplicados(Lista Lista, String BI){
Node Copy = Lista.head;
String Escrita =BI;
while(Copy!=null){
if(!Copy.value.BI.equals(BI)){
Copy = Copy.next;
}else{
Escrita += ";" + Copy.value.Nome ;
Copy = Copy.next;
}
if(Escrita.equals(BI)){
Escrita = "Nenhum";
}
}return Escrita;
}
}
*编辑:
在文件中你可以找到:
funcionarios.txt
Victor Valente:12312355:1:1
João Neves:12312777:10:1
Ivo Leite:12343119:10:2
Osvaldo Pires:12312765:2:1
Tiago Santos:12302050:2:2
Joana Cegripe:12999121:2:3
João Almeida:12340050:5:3
Rui Sebastião:12319101:10:3
Miguel Patrocínio:14233000:3:2
Raquel Cunhada:14244111:2:7
Luís Prima:12319101:1:1
salarios.txt
1:1000
2:1050
3:1200
4:1080
5:1700
6:1081
7:1700
8:1010
9:1910
10:890
我也尝试过调试,但没有迹象表明我的代码有什么问题。
*编辑: 代码已更新,但仍未填满我的列表。
【问题讨论】:
-
在不知道文件内容的情况下很难提供帮助。请阅读How to create a Minimal, Complete, and Verifiable example。或者,尝试调试您的代码。
标签: java list nullpointerexception tail head