0

在我创建的一个方法中,我试图创建的目的是返回一个用户输入的字符串数组。我遇到的问题是编译器说userData可能没有在userData[i]=tempData;和 at初始化return userData;。我不确定为什么会发生此错误,并希望得到一些反馈。

public String[] getStringObj() {
    int i = 0;
    String tempData;
    String[] userData;
    Boolean exitLoop = false;
    System.out.println("Please list your values below, separating each item using the return key.  To exit the input process please type in ! as your item.");
    do {
        tempData = IO.readString();
        if (tempData.equals("!")) {
            exitLoop=true;
        } else {
            userData[i] = tempData;
            i++;
        }
    } while (exitLoop == false);
    return userData;
}
4

3 回答 3

0

userData尚未初始化,您正尝试userData[i]=tempData;在初始化之前在此处使用它。

将其初始化为

String[] userData = new String[20]; 

//20 is the size of array that I specified, you can specify yours

同样在您的while情况下,您可以拥有while(!exitLoop)而不是while(exitLoop==false)

于 2012-10-24T05:33:25.617 回答
0

你没有初始化String[]. 做吧String[] userData = new String[length]。如果您不确定长度,您可能只想使用ArrayList<String>.

于 2012-10-24T05:33:48.183 回答
0

为了提高代码质量:

  1. 你不需要那个exitLoop标志;做就是了

    while(true) {
        String input = IO.readString();
        if(input.equals("!")) {
            break;
        }
        /* rest of code */
    }
    
  2. 由于您似乎只想无限制地将东西添加到数组中,因此请使用 anArrayList而不是数组(额外的好处,这也摆脱i了):

    List<String> userData = new ArrayList<String>();
    ...
    userData.add(line);
    

如果你做这两件事,你的代码会更加简洁易懂。

于 2012-10-24T05:41:19.853 回答