“线程中的异常”;“主要”;java.lang.NullPointerException
我的错误是:“线程中的异常”;“主要”;java.lang.NullPointerException,java,nullpointerexception,Java,Nullpointerexception,我的错误是: Exception in thread "main" java.lang.NullPointerException at ClienteDB.incluir(ClienteDB.java:30) at ClienteInterface.main(ClienteInterface.java:16) 我只是检查了一些其他问题,但没有发现为什么会发生这种情况。 通常人们说有一些值为null的变量。首先,变量将为null,但我没有使用null进行赋值 第30行为:c[np
Exception in thread "main" java.lang.NullPointerException
at ClienteDB.incluir(ClienteDB.java:30)
at ClienteInterface.main(ClienteInterface.java:16)
我只是检查了一些其他问题,但没有发现为什么会发生这种情况。
通常人们说有一些值为null的变量。首先,变量将为null,但我没有使用null进行赋值
第30行为:c[npp].setCpf(ccpf);
这是我程序中的一种方法,但也是唯一一种不起作用的方法
提前感谢您的帮助
import javax.swing.JOptionPane;
public class ClienteDB
{
Cliente c[]= new Cliente[11];
public void incluir() {
int flag = 0;
String np = JOptionPane
.showInputDialog("Entre a posição que você deseja incluir um usuário (1 a 10):");
int npp = Integer.parseInt(np);
if (c[npp] != null) {
JOptionPane.showMessageDialog(null,
"Já possui um cliente neste campo.");
} else {
String ccpf = JOptionPane.showInputDialog("Qual o cpf do cliente "
+ npp + "?");
for (int np2 = 1; np2 < 11; np2++) {
if ((c[np2] != null) && (c[np2].getCpf().equals(ccpf))) {
JOptionPane.showMessageDialog(null,
"Existe um usuário com este CPF.\n");
flag = 1;
break;
} else {
c[npp].setCpf(ccpf);
break;
}
}
if (flag != 1) {
String cnome = JOptionPane
.showInputDialog("Qual o nome do cliente " + npp + "?");
c[npp].setNome(cnome);
String cend = JOptionPane
.showInputDialog("Qual o endereço do cliente " + npp
+ "?");
c[npp].setEndereco(cend);
String ctel = JOptionPane
.showInputDialog("Qual o telefone do cliente " + npp
+ "?");
c[npp].setTelefone(ctel);
}
}
}
}看起来您忘记初始化阵列了。你做了什么
c = new (data_type)[length]
现在我们知道它是哪一行了,问题就在于这个
if
if (c[npp] != null) { // HERE YOU CHECK IT IS NOT NULL
JOptionPane.showMessageDialog(null,
"Já possui um cliente neste campo.");
} else {
// PASS THIS POINT, c[npp] CAN ONLY BE NULL
String ccpf = JOptionPane.showInputDialog("Qual o cpf do cliente "
+ npp + "?");
for (int np2 = 1; np2 < 11; np2++) {
if ((c[np2] != null) && (c[np2].getCpf().equals(ccpf))) {
JOptionPane.showMessageDialog(null,
"Existe um usuário com este CPF.\n");
flag = 1;
break;
} else {
c[npp].setCpf(ccpf); // NULL POINTER... FOR A GOOD REASON
break;
}
}
还是你想写
c[np2].setCpf(ccpf);
相反
我知道如果设置正确,EclipseIDE可以在运行中找到它。如果您没有使用IDE,我强烈建议您开始使用。在第30行之前,打印出
c[npp]的值
。Eclipse或其他IDE调试器在这类问题上会比我们快得多。选择更有意义的变量名称可能会对您有所帮助。如果不知道第30行是什么,没有人可以帮助您。c是一个数组而不是数组列表,尽管您在其他方面是对的。对的,谢谢您在那里找到了第30行?由于未显示c
初始化,这可能是真的,但这充其量只是一个猜测。该方法中似乎没有任何东西需要初始化,除了c。数组的内容也可能为null,c[npp]。setNome(cnome)即使数组存在,code>也会抛出NPE。我没有使用IDE。我现在正在使用jGRASP进行大学评分。但是你的回答不能解决我的问题:/我可能会试试IDE。非常感谢你的帮助!
if (c[npp] == null) {
c[np2].setCpf(ccpf);