-1

我有以下问题...我想从输入中读取未知数量的字符串。因此,我创建了一个 arraylist 'words' 并添加了输入中的所有字符串。然后我想把这个数组列表转换成更简单的字符串数组'wordsarray'(String [])......正如我所做的那样,我想检查一切是否正常(如果单词保存在'wordsarray'中)所以我试图打印出来整个数组......但它没有给我我想要的东西......我的代码似乎不起作用。问题出在哪里?谢谢你的帮助

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    List<String> words = new ArrayList<String>();

    while(sc.hasNextLine()) {
         words.add(sc.nextLine());
    }

    String[] wordsarray = new String[words.size()];

    for(int i = 0; i < words.size(); i++) {
        wordsarray[i] = words.get(i);
    }

    for(int i = 0; i < words.size(); i++) {
        System.out.println(wordsarray[i]);
    }
}
4

2 回答 2

4

有一种预先准备好的方法可以做你想做的事情:

ArrayList<String> words = new ArrayList<String>();
String[] array = words.toArray(new String[words.size()]);

但是您的代码似乎是正确的,您确定在ArrayList?

根据您的评论,我猜问题在于您没有将所有内容都放在循环中。这段代码:

while(sc.hasNextLine()) {
  words.add(sc.nextLine());
}

只工作一次。如果您继续插入单词并按 Enter,则您已经在循环之外,因为Scanner已经达到了没有更多行可取的点。

您应该执行以下操作:

boolean finished = false;

while (!finished) {
  while(sc.hasNextLine()) {
      String line = sc.nextLine();
      if (line.equals(""))
        finished = true;
      else
        words.add(sc.nextLine());
    }
  }
}
于 2013-01-03T18:06:58.587 回答
0

这对我来说很好:

import java.util.*;

public class a
{
  public static void main (String [] args) throws Exception
  {
    Scanner sc = new Scanner(System.in);

    List<String> words = new ArrayList<String>();

    while(words.size () < 3 && sc.hasNextLine ()) {
        String s = sc.nextLine();
        System.out.println ("Adding " + s);
        words.add(s);
    }

    String[] wordsarray = words.toArray(new String [] {});

    for(int i = 0; i < words.size(); i++) {
       System.out.println("Printing ..." + wordsarray[i]);
    }
  }
}

输出:

java a
1
Adding 1
2
Adding 2
3
Adding 3
Printing ...1
Printing ...2
Printing ...3
于 2013-01-03T18:32:03.167 回答