Java 要放入向量的字符串数组

Java 要放入向量的字符串数组,java,Java,我在下面的代码中遇到了这个问题,因为它没有运行,但生成了nullpointer异常。我在这里要做的是得到一个字符串数组的输入,然后用逗号表示,然后将它传递给Integer类型,然后将它存储在向量中。然后从该数组中获取最大数量。代码没有显示错误,但很难找到错误 import java.util.Collections; import java.util.Vector; public class Splitting { /** * @param */ protected in

我在下面的代码中遇到了这个问题,因为它没有运行,但生成了nullpointer异常。我在这里要做的是得到一个字符串数组的输入,然后用逗号表示,然后将它传递给Integer类型,然后将它存储在向量中。然后从该数组中获取最大数量。代码没有显示错误,但很难找到错误

import java.util.Collections;
import java.util.Vector;

public class Splitting {

  /**
  * @param   
  */

protected int[] temp;
Vector<Integer> vec = new Vector<Integer>();

public void split(String input) {
    if (input == null) {
      String[] str;
      str = input.split(",");
      temp = new int[str.length];

      for (int i = 0; i < str.length; i++) {
            temp[i] = Integer.parseInt(str[i]);
            vec.add(temp[i]);
        }
    }
    System.out.println(vec);
    Collections.sort(vec);

    System.out.println(vec);
    Collections.max(vec);
}



public static void main(String[] args) {
    // TODO Auto-generated method stub

    Splitting obj = new Splitting();

    obj.split("12,65,21,23,89,67,12");



}

}
您必须创建一个数组。替换

temp = null;

另一个小问题:您测试输入!=将while循环用于拆分后,在while循环中为null。因此,如果使用空值调用方法,则在执行while语句之前,您将获得一个NPE。您可以删除while语句并添加测试

if (input == null) {
   // return or throw exception
}
在你的方法的开始

您的代码已经很接近了-我想我可以展示一个参考实现来进行比较:

public void split(String input) {
  if (input == null) {
     // if the input is null, print a message and return
     System.out.println("Input must not be null");
     return;
  }

  String[] numbers = input.split(",");  // changed the name to show the content
  int[] temp = new int[numbers.length];

  for (int i=0; i < numbers.length; i++) {
     try {
        temp[i] = Integer.parseInt(str[i]);
     } catch (NumberFormatException nfe) {
        // if a number can't be parsed, print a message and return
        System.out.println("Input contains an illegal entry (non-integer value");
        return;
     }
     vec.add(temp[i]);
  }
  System.out.println(vec);
  Collections.sort(vec);

  System.out.println(vec);
  Collections.max(vec);
}

您的问题在于这一行temp=null。拆下这条线。这是投掷你的NPE。您试图访问的字段为空

而是在split方法中声明temp


int[]temp=新int[str.length]

CoolBeans和AndreasD指出不应将temp初始化为null。让我补充一下,temp不应该作为数组存在,句号。您正在创建一个重复结构,一次作为数组temp,另一次作为向量vec

因此,这里有一些可能的变化。temp只是变成了一个int-not数组,在所有有temp[i]的地方,替换为temp。或者,完全去掉temp,只使用vec.addinger.parseIntstr[i]

你可以这样做

String[] strArr = "12,65,21,23,89,67,12".split(",");
int[] intArr = new int[strArr.length];

for (int i = 0; i < strArr.length; i++) {
    intArr[i] = Integer.parseInt(strArr[i]);
}

Ints.max(intArr); // 89, with Google Guava Ints.max

@安德烈亚斯对此表示感谢。我是一个Java初学者,但我做了你说的改变,我应该按照我所理解的做,但它似乎仍然不起作用。sorry@Splitter-易于修复:将开始时的条件更改为输入!=null-如果输入不为null,则希望执行下一个块;@CoolBeans-这部分恐怕是错误的newint[input.length]@拆分器抱歉,我选择了错误的变量名。它应该是str.length。
String[] strArr = "12,65,21,23,89,67,12".split(",");
int[] intArr = new int[strArr.length];

for (int i = 0; i < strArr.length; i++) {
    intArr[i] = Integer.parseInt(strArr[i]);
}

Ints.max(intArr); // 89, with Google Guava Ints.max