【问题标题】:creating an array from a list of space separated integers从空格分隔的整数列表创建数组
【发布时间】:2015-01-30 22:03:51
【问题描述】:

我正在尝试制作一个 java 程序,它可以接受一个数字列表,每个数字由一个空格分隔(例如:1 2 3 5 69 3124124 等...)然后将这些数字放入一个数组并检查重复项.整个事情都很好,除了这个给我带来麻烦的方法:

public static List returnArray(){
System.out.println("type numbers here: ");
    while(sc.hasNextInt()){
        list.add(sc.nextInt());
    }
    return list;

"sc" 是数组列表

它工作得很好,除了让程序理解它已经完成输入的唯一方法是我在末尾添加一个字母或其他东西,所以输入 1 2 3 除了输入 1 之外什么都不做2 3 r 结果为 [1 2 3]。任何想法如何编写它以便它知道在多个空格后停止输入并且最后不需要其他字符?

【问题讨论】:

  • 我假设你的意思是 sc 是扫描仪?看起来list 是您的数组列表。

标签: java arrays list integer


【解决方案1】:

您可以先使用scan.readLine() 扫描整行(仅一行),然后解析该字符串。

基本上,读取一行(作为字符串),并使用空格将其拆分(split(" ") 函数),然后对于每个行,将其解析为一个整数并将其添加到 arraylist 列表中。最后返回列表。

eg:
public static List returnArray() {
    System.out.println("Type numbers here: ");
    String input = sc.readLine();
    String[] x = input.split(" ");
    for (String y : x) {
        Int tempInt = Integer.parseInt(y);
        list.add(tempInt);
    }
    return list;
}

【讨论】:

  • 我忘了指定它必须能够从多行读取
  • 你到底想让它做什么?输入 1 行,返回一个数组,然后再输入一个?还是一开始就全部输入,然后返回一个大数组?还是一开始就全部输入,返回一堆小数组?
【解决方案2】:

您可以使用比 Scanner 更快的 BufferedReader。 是这样的

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

StringTokenizer tokenizer = new StringTokenizer(reader.readLine()); //throws IOException
while(tokenizer.hasMoreTokens()) {
     list.add(Integer.valueOf(tokenizer.nextToken()));
}

【讨论】:

  • 不鼓励在新代码中使用StringTokenizer。它只是为了支持遗留代码而存在。
  • 它告诉我我不能使用带有默认构造函数的缓冲阅读器
  • @AdamP 哦,我明白了,但我一直被告知这是更快的方法,因为一旦我参加了需要在 0.1 毫秒以下的程序并且使用 java 的比赛,你只能赚取使用 StringTokenizer 点。
  • @MikeHawk 确保您使用以下方式定义 BufferedReader:new BufferedReader(new InputStreamReader(System.in));
  • @AdamP 无论我做什么,我都会收到此错误,阻止程序运行:未处理的异常类型 IOException
猜你喜欢
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多