数组中的奇怪问题

时间:2010-10-01 10:07:01

标签: java arrays

我正在使用Java开发一个小型服务器应用程序。所以,我从不同的客户端获取信息,如果信息进来,则调用以下方法:

public void writeToArray(String data) {
    data = trim(data);
    String[] netInput = new String[5];
    netInput[0]="a";
    netInput[1]="a";
    netInput[2]="a";
    netInput[3]="a";
    netInput[4]="a";
    netInput = split(data, ",");
    pos_arr = PApplet.parseInt(netInput[0]);
    rohr_value = PApplet.parseInt(netInput[1]); // THIS LINE KICKS OUT THE ERROR.
    if(pos_arr >0 && pos_arr<100) {
        fernrohre[pos_arr] = rohr_value;
        println("pos arr length: " + fernrohre[pos_arr]);
        println("pos arr: " + pos_arr);
    }

OS X上的控制台给出了以下错误:

Exception in thread "Animation Thread"
java.lang.ArrayIndexOutOfBoundsException:1
 at server_app.writeToArray(server_app.java:108) at server_app.draw(server_app.java:97)
 at processing.core.PApplet.handleDraw(PApplet.java:1606)
 at processing.core.PApplet.run(PApplet.java:1503)
 at java.lang.Thread.run(Thread.java:637)

如您所见,我尝试使用至少5个条目填充数组netInput,因此不会出现ArrayIndexOutOfBoundsException。

我不明白,我很感谢你的帮助!

如果我能抓住错误并继续使用该应用程序,那对我来说已经有用了。

6 个答案:

答案 0 :(得分:10)

你把5个字符串放入数组中,但是用这一行撤消你所有的好工作;

netInput = split(data, ",");

data显然没有任何逗号。

答案 1 :(得分:2)

<强>更新

split()方法是自定义的,而不是String.split。它也需要检查,看看出了什么问题。感谢@Carlos将其指出。

原始答案

考虑这一行:

netInput = split(data, ",");

这将使用逗号分隔data字符串作为分隔符。它将返回一个(逗号数+ 1)结果元素的数组。如果您的字符串没有逗号,您将获得单个元素数组。

显然,您的输入字符串没有任何逗号。这将导致单个元素数组(第一个元素,即index = 0将是字符串本身)。因此,当您尝试索引第二个元素(index = 1)时,它会引发异常。

答案 2 :(得分:2)

在这一行

netInput = split(data, ",");

您的阵列正在重新初始化。你的split方法可能返回一个只有1个元素的数组(我猜这个数据字符串不包含任何“,”)。

答案 3 :(得分:1)

你做  netInput = split(data, ","); 和
split(data,“,”);

returns one element array

答案 4 :(得分:1)

您在调用netInput方法时重新分配split()变量。

新值的数组可能没有5。

您能提供split()方法的来源吗?

答案 5 :(得分:1)

你需要一些防御性代码,

if(netInput.length > 1)
   pos_arr = PApplet.parseInt(netInput[0]);
   rohr_value = PApplet.parseInt(netInput[1]);