0

我陷入了一个问题,我必须在字符串数组中分配字符串对象问题是我不知道我将在这个数组中放入多少字符串对象。

代码

   static String[] decipheredMessage;
   static int pointer=0;

   // in another function i have this code
   if(sentenceFormationFlag==true) {
   // System.out.println(" " + word);  // prints the words after sentence formation                 
   // add the words to an array of strings
   decipheredMessage[pointer] = new String();
   decipheredMessage[pointer++] = word;
   return true;

我在这里所做的是我已经声明了一个字符串数组,因为我不知道我的数组将包含多少个字符串,所以我动态创建字符串对象并将其分配给数组。

错误

$ java SentenceFormation 武器

Exception in thread "main" java.lang.NullPointerException
at SentenceFormation.makeSentence(SentenceFormation.java:48)
at SentenceFormation.makeSentence(SentenceFormation.java:44)
at SentenceFormation.makeSentence(SentenceFormation.java:44)
at SentenceFormation.main(SentenceFormation.java:16)

我不知道为什么我会遇到这个问题,任何人都可以帮助我解决这个问题。提前致谢。

4

3 回答 3

2

如果您不知道数组将包含多少个元素,您可以使用这样的List实现。ArrayList

static List<String> decipheredMessage = new ArrayList<>();
...
decipheredMessage.add("my new string");

查看List文档(上面链接)以了解可用的 API。
如果您使用的是 Java 5 或 6,则需要在上面的尖括号中指定类型,即new ArrayList<String>().

于 2013-09-14T14:12:30.723 回答
2

动态数组在 Java 中不起作用。您需要使用集合框架的优秀示例之一。导入java.util.ArrayList.

static ArrayList<String> decipheredMessage=new ArrayList<>();;
static int pointer=0;

// in another function i have this code
if(sentenceFormationFlag==true) {
// System.out.println(" " + word);  // prints the words after sentence formation                 
 // add the words to an array of strings
decipheredMessage.add(new String());
decipheredMessage.add(word);
return true;
于 2013-09-14T14:13:08.933 回答
1

尝试这样的事情,并阅读列表

  List<String>  decipheredMessage = new ArrayList<String>();
   static int pointer=0;

   // in another function i have this code
   if(sentenceFormationFlag==true) {
   // System.out.println(" " + word);  // prints the words after sentence formation                 
   // add the words to an array of strings
   decipheredMessage. add("string1");
   decipheredMessage.add("string2");
   return true;
于 2013-09-14T14:14:59.823 回答