gpt4 book ai didi

java - 数组不保存信息

转载 作者:行者123 更新时间:2023-12-01 09:54:30 25 4
gpt4 key购买 nike

我的代码曾经可以工作,我的对象已正确保存到数组中,但现在突然无法工作,尽管事实上我有一段相同的代码可以工作。这是它最初的样子:

 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();
}

}
}

最佳答案

因为你的代码没有正确实现

这是您的 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 循环被破坏后,您将其增加到 1 n++ 并且在索引 1 处您没有任何值,因此您看到的是 null。

要正确地将增量 n++ 放入 while 循环中,并正确放置 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++;
}

为了打印值,请使用正确的索引。

希望有帮助。

关于java - 数组不保存信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37352605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com