public static void main(String[] args) {
String[][] alunos = new String[100][2];
String[][] grelhaAvaliacao = null;
double classificacoes[][] = null;
int op, numAl = 0;
do {
op = menu();
switch(op) {
case 1:
numAl = carregarFicheiro(alunos, numAl);
break;
case 2:
numAl = lerInformação(alunos, numAl);
break;
case 3:
escreverFicheiroAlunos(alunos, numAl);
break;
case 0:
break;
default:
System.out.println("Introduza uma opção válida!");
break;
}
} while(op != 0);
}
public static int lerInformação(String[][] alunos, int numAl) {
do {
System.out.print("Nome do Aluno: ");
alunos[numAl][0] = ler.next();
System.out.print("Número do Aluno: ");
ler.nextLine();
alunos[numAl][1] = ler.next();
numAl++;
} while(numAl < alunos.length && (!alunos[numAl][0].equalsIgnoreCase("FIM")));
return numAl;
}
输出: 菜单: 1.Carregar ficheiro alunos 2.InserirInformaçõesparaAlunos 3.Gravaralteraçõesaoficeiro alunos 4.Carregar ficheiro Grelha 5.Mostrar Grelha 6.Inseririnformaçõesdecotação 7.Mostrarinformaçãocompleta 8.Nota final&gt; = 50% 9.Apresentar HTML 0.Sair
说明:2
Nome do Aluno:joao santos NúmerodoAluno:1140296 线程“main”中的异常java.lang.NullPointerException at aplicação_final.Aplicação_Final.lerInformação(Aplicação_Final.java:73) ataplicação_final.Aplicação_Final.main(Aplicação_Final.java:23) Java结果:1 BUILD SUCCESSFUL(总时间:8秒)
所以这是我的问题伙伴,那个错误。我知道这是因为 而声明,在这部分完全 (!alunos [numAl] [0] .equalsIgnoreCase(“FIM”))我只是不明白 为什么,这是一个我必须为学校计划的计划,它有更多 功能,但这里不需要它们我相信自从 错误就在那里,这个方法lerInformaçao,基本上要求用户 输入学生的姓名,然后询问他的学号( 学生的)它将一个保存在二维数组的第0列 第1列中的另一部分,我从那时起提到的部分 当用户输入单词时,语句应该结束读数 FIM(以葡萄牙语结尾),但它会导致错误,任何想法?
答案 0 :(得分:0)
!alunos[numAl][0].equalsIgnoreCase("FIM"))
永远无法评估您的需求。在评估条件时,alunos[numAl][0]
始终检查NULL条目,因为您已递增numAl
。 YODA条件为您做了一些不同的原因是因为“FIM”不等于NULL,这意味着!"FIM".equalsIgnoreCase(alunos[numAl][0]);
将始终求值为TRUE,因此循环仅基于.length()
条件继续。< / p>
试试这个:
public static int lerInformação(String[][] alunos, int numAl) {
do {
System.out.print("Nome do Aluno: ");
alunos[numAl][0] = ler.next();
System.out.print("Número do Aluno: ");
ler.nextLine();
alunos[numAl][1] = ler.next();
numAl++;
} while(numAl < alunos.length && (!alunos[numAl-1][0].equalsIgnoreCase("FIM"))); //numAl - 1, instead.
return numAl;
}
使用numAl - 1
您要检查最近的用户输入,这是在您增加numAl
之前发生的。但是,更好的解决方案是:
public static int lerInformação(String[][] alunos, int numAl) {
do {
System.out.print("Nome do Aluno: ");
alunos[numAl][0] = ler.next();
if(alunos[numAl][0].equalsIgnoreCase("FIM") {
break;
}
System.out.print("Número do Aluno: ");
ler.nextLine();
alunos[numAl][1] = ler.next();
numAl++;
} while(numAl < alunos.length);
return numAl;
}
这样,一旦用户输入FIM,就不会继续运行不必要的代码(例如提示Numero do Aluno)。 break
将立即退出循环。
但是,您仍然必须解决在用户生成的alunos
数组中存储命令(FIM)这一事实,这是不好的做法。您可以解决此问题,以便将相关代码更新为:
String userInput = ler.next();
if(userInput.equalsIgnoreCase("FIM") {
break;
}
else {
alunos[numAl][0] = userInput;
}