我的App中有两个类,我们将其称为A和B。A类在一种方法中使用B类的String数组,该方法应该使该数组变大并为最后一个索引分配一定的值。
我的问题是,即使在将类B声明为静态变量时也可以正常工作,看来它并不会使数组大1。
我引用B的String数组的方式:
environment: &environment
我在做什么错了?
我的实际代码段:
public class classA {
void myMethod() {
classB instance = new classB();
instance.array1 = Arrays.copyOf(instance.array1, instance.array1.length +1);
instance.array1[(instance.array1.length -1)] = someValue;} }
class classB{
String[] array1 = new String[0];
}
void save() {
try {
QAData qaObject = new QAData();
File file = new File("path");
boolean fileIsOk = file.isFile() && !(tf3.getText().equals("")) && !(file.isDirectory());
if (fileIsOk) {
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
qaObject.question = Arrays.copyOf(qaObject.question, qaObject.question.length + 1);
qaObject.question[(qaObject.question.length - 1)] = tf1.getText();
qaObject.answer = Arrays.copyOf(qaObject.answer, qaObject.answer.length + 1);
System.out.println(qaObject.question.length );
qaObject.answer[(qaObject.answer.length - 1)] = tf2.getText();
oos.writeObject(qaObject.question);
oos.writeObject(qaObject.answer);}
for (int i = 0; i < qaObject.question.length; i++) {
System.out.println("question is: " + qaObject.question[i]);
}
for (int i = 0; i < qaObject.answer.length; i++) {
System.out.println(("answer is: " + qaObject.answer[i]));
}
} catch (IOException e) {
System.out.println("I/O exception during the save");
e.printStackTrace();
}
catch (NullPointerException e){
System.out.println("The object you are trying to save has the null value");
e.printStackTrace();
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println("error!!!!!");
}
finally {
if (oos != null) {
try{
oos.close();
} catch (IOException e) {
System.out.println("IO Exception!");
}
}
}
}
答案 0 :(得分:0)
我不确定您最终要达到的目标。我工程师的大脑说,有一种简单的方法可以完成您要尝试执行的操作。
我可以看到的最大问题是您使用的是裸露的Array
。请改用ArrayList
。使用ArrayList
,您可以完成所有调整大小的操作。
如果您承诺使用Array
,请至少在classB
中提供一个公共方法,该方法可以处理调整数组大小等所有繁重的工作。声明如下:
public void addOneToEnd( String someValue )
类应该处理自己的数据,并且不要让外部类弄乱它。即使您使用ArrayList
(您应该这样做),也应该使用方法方法。
祝你好运!
答案 1 :(得分:0)
这似乎对我有用。除非我缺少任何东西:
public class Tester {
public static void main(String[] args) throws JsonProcessingException {
classA a = new classA();
a.myMethod();
}
}
class classA {
void myMethod() {
classB instance = new classB();
instance.array1 = Arrays.copyOf(instance.array1, instance.array1.length + 1);
instance.array1[(instance.array1.length - 1)] = "someValue";
System.out.println(instance.array1[(instance.array1.length -1)]);
}
}
class classB {
String[] array1 = new String[0];
}
它为我打印someValue
。数组的初始长度为0,现在为1。
如果以下行:instance.array1[(instance.array1.length - 1)] = "someValue";
没有给您例外,则表示大小实际增加了。您的初始大小为0。否则,该行会给您java.lang.ArrayIndexOutOfBoundsException: -1
。
java.lang.ArrayIndexOutOfBoundsException: -1