我的代码曾经工作过,我的对象被正确地保存到数组中,但现在它无处不在,尽管事实上我有一个相同的编码片段可以正常工作。这就是它最初的样子:
if (a == 2) {
ObjectOutputStream utström = new ObjectOutputStream
(new FileOutputStream("register.data"));
int n = 0;
while (true) {
j[n] = new nyHund();
String s1 = JOptionPane.showInputDialog("Hundens namn?");
if (s1 == null)
break;
j[n].namn = s1;
s1 = JOptionPane.showInputDialog("Hundens mor?");
j[n].mor = s1;
s1 = JOptionPane.showInputDialog("Hundens far?");
j[n].far = s1;
}
n++;
}
utström.writeObject(j);
utström.close();
}
我放的时候:
JOptionPane.showMessageDialog(null, j[n].namn + j[n].mor + j[n].far);
" write.object"它只是给了我" nullnullnull",但当我把它直接放在
之后 j[n].far = s1;
有效。所以它只是没有妥善保存。我试过删除,添加,移动大括号和代码,它只是没有工作。我仍然怀疑它与牙箍有关。 这是整个计划。我有本地输入/输出流和类似的东西的原因是尝试解决这个问题,在开始时声明它们不会做任何事情。是的,这是非常基本的,但这就像我在Java中做的第一件事。
import javax.swing.*;
import java.util.*;
import java.io.*;
public class Kennel2 {
public static void main(String[] args) throws IOException {
Object [] fönster = {"Avregistrera hund","Registrera intressent",
"Registrera hund"};
int a = JOptionPane.showOptionDialog(null, "Välkommen till Hellbergs Kennel!",
"Hellbergs Kennel", JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null, fönster, fönster[2]);
nyIntr[]i = new nyIntr[100];
nyHund[]j = new nyHund[100];
boolean ok = true;
if (a == 1) {
ObjectOutputStream utström = new ObjectOutputStream
(new FileOutputStream("register.data"));
int n = 0;
while (true) { //Registrera ny intressent
i[n] = new nyIntr();
String s1 = JOptionPane.showInputDialog("Intressentens namn?");
if (s1 == null)
break;
i[n].namn = s1;
s1 = JOptionPane.showInputDialog("Intressentens telefonnummer?");
i[n].tlfNr = s1;
s1 = JOptionPane.showInputDialog("Vilken valp är hen intresserad av?");
i[n].valp = new nyHund();
if (i[n].valp.aktiv = true) {
j[n].intressent.namn = i[n].namn;
j[n].namn = i[n].valp.namn;
}
else {
JOptionPane.showMessageDialog(null, "Denna hund är ej tillgänglig");
break;
}
n++;
}
JOptionPane.showMessageDialog(null, i[n].namn + i[n].tlfNr);
utström.writeObject(i);
utström.close();
}
if (a == 0) {
ObjectInputStream inström = new ObjectInputStream
(new FileInputStream("register.data"));
ObjectOutputStream utström = new ObjectOutputStream
(new FileOutputStream("register.data"));
Scanner data = new Scanner (new File("register.data"));
int n = 0;
while (data.hasNext()) {
j[n] = new nyHund();
j[n].namn = data.next();
n++;
}
while (true) {
String sökt = JOptionPane.showInputDialog("Vilken hund söker du?");
if (sökt == null)
break;
int k = 0;
for (; k<n; k++)
if (j[n].namn.equals(sökt))
break;
if (k < n) {
j[n].aktiv = false;
JOptionPane.showMessageDialog(null, "Hunden är avaktiverad"); }
else {
JOptionPane.showMessageDialog(null, "Hunden kunde ej hittas");
break;
}
utström.writeObject(j);
data.close();
inström.close();
utström.close();
}
}
if (a == 2) {
ObjectOutputStream utström = new ObjectOutputStream
(new FileOutputStream("register.data"));
int n = 0;
while (true) { //Registrera ny hund
String s1 = JOptionPane.showInputDialog("Hundens namn?");
if (s1 == null)
break;
j[n] = new nyHund();
j[n].namn = s1;
s1 = JOptionPane.showInputDialog("Hundens mor?");
j[n].mor = s1;
s1 = JOptionPane.showInputDialog("Hundens far?");
j[n].far = s1;
s1 = JOptionPane.showInputDialog("Hundens födelseår?");
for (int k=1; k<s1.length(); k++)
if (s1.charAt(k) < '0' || s1.charAt(k) > '9'){
ok = false;
JOptionPane.showMessageDialog(null, "Ogiltigt format");
break;
}
else {
int l = Integer.parseInt(s1);
j[n].födelsedatum = l;
n++;
}
}
utström.writeObject(j);
utström.close();
}
}
}
答案 0 :(得分:1)
因为您的代码未正确实施
这是你的while循环,其中你没有递增n
while (true) {
j[n] = new nyHund();
String s1 = JOptionPane.showInputDialog("Hundens namn?");
if (s1 == null)
break;
j[n].namn = s1;
s1 = JOptionPane.showInputDialog("Hundens mor?");
j[n].mor = s1;
s1 = JOptionPane.showInputDialog("Hundens far?");
j[n].far = s1;
}
因此,您放置的所有值均为0
索引,并且每次都被新对象替换。
在while循环被破坏之后,你通过n++
将其增加到1并且在索引1
处你没有任何值因此你看到了null。
要更正您的while循环中的增量n++
并更正new nyHund()
的展示位置。
while (true) {
String s1 = JOptionPane.showInputDialog("Hundens namn?");
if (s1 == null)
break;
j[n] = new nyHund();
j[n].namn = s1;
s1 = JOptionPane.showInputDialog("Hundens mor?");
j[n].mor = s1;
s1 = JOptionPane.showInputDialog("Hundens far?");
j[n].far = s1;
n++;
}
要打印值,请使用正确的索引。
希望它有所帮助。
答案 1 :(得分:0)
您已在最后一次循环调用中迭代26366
10025
10026
10244
26595
26594
9026
9027
9029
9080
26597
10223
10287
10277
10215
10242
10243
9025
9030
9034
9051
9052
9055
10241
10067
超过数组中的最后一个元素。如果你的数组包含60个元素(0-59),在循环结束后n
,你就不会得到有意义的数据(因为你在{/ 1}之后 > strong>设置n = 60
)的数据。
在循环结束后添加n++
,或仅在创建新元素时迭代j[n]
。