6

我正在努力在 Java 方面做得更好,我遇到的一个问题是接受用户输入,就像这样:

System.out.println("Please input numbers that you would like to work with");

    //Read in user input into ArrayList, taking into account that they may input Strings or anything else.

假设用户输入这样的内容

1、2、4、257、狗、兔、7、#

甚至

1 2 4 257 狗兔 7#

我在几个地方看到过如何一次读取一个输入,但我不确定一次读取动态 ArrayList 的最佳方式。

我并不真正关心使用逗号或不使用逗号的区别,因为从逻辑上讲,我认为我知道该怎么做,并且还没有尝试过,所以真正的主要问题是如上所述(将用户输入读取到 ArrayList用户一次输入所有数字时的动态大小)。谢谢,我不一定要寻找代码,这不是家庭作业,只是想知道最好的方法。只需从逻辑上说明它是如何完成的就可以了,但是代码是值得赞赏的。

4

4 回答 4

6

试试这个简单的例子来打印 arraylist 值

     import java.util.*;
        class SimpleArrayList{
            public static void main(String args[]){
                List l=new ArrayList();
                System.out.println("Enter the input");
                Scanner input=new Scanner(System.in);

                 String a =input.nextLine();
                 l.add(a);
       // use this to iterate the value inside the arraylist.
      /* for (int i = 0; i < l.size(); i++) {
          System.out.println(l.get(i));
              } */
                    System.out.println(l);

            }

        }
于 2013-09-15T01:40:23.427 回答
3

正如我认为关于如何从System.in,我将在这里采取不同的方法。首先你应该知道这不是在java中获取数据的主要方式。事实上,十多年来我从未使用过它。这就是为什么没有完整的现成解决方案可以将结构化数据放入某个容器(如 ArrayList)中。相反,每行只得到一个字符串。你必须自己处理。这个过程称为解析。根据所选语法的复杂性,有几种方法,例如在更复杂的情况下使用解析器生成器,或者在更简单的情况下手动编写解析器。我想了解您的第一个建议并将其描述为逗号分隔的可选空格。对于这样的语法,类 Scanner 提供了相当多的支持。可以识别数字并且标记化几乎是自动完成的。然而,如果你有更具体的数据,你可能需要做一些额外的工作,就像我用动物地图演示的那样,我用来转换那种非常特殊的数据类型。为了足够灵活地解决所有现实世界的问题,不可能有现成的解决方案。只有全面的支持才能构建您自己的。

  Map<String, Animal> animals = ...
  Scanner scanner = new Scanner("1, 2, 4, 257, dog, rabbit, 7, #").useDelimiter(",");
  while (scanner.hasNext()) {
    if (scanner.hasNextInt()) {
      result.add(scanner.nextInt());
    } else {
      String val = scanner.next();
      if (animals.containsKey(val)) {
        result.add(animals.get(val));
      } else {
        result.add(val);
      }
    }
  }
于 2013-09-15T11:29:40.453 回答
2

您可以尝试使用此代码在 arraylist 中动态获取输入并存储在 arraylist 中

import java.util.ArrayList;
import java.util.Scanner;

public class HelloWorld
{

 public static void main(String []args){
     Scanner sc=new Scanner(System.in);
     String j;
     ArrayList l=new ArrayList();
     for(int i=0;i<6;i++)
     {  j=sc.nextLine();
         l.add(j);
     }
    System.out.println("Hello World"+l);
 }
}
于 2016-12-06T07:27:01.060 回答
1

一种方法是对输入进行标记,然后将其添加到这样的数组中:


    Scanner scn = new Scanner(System.in);
    System.out.println("Put in a set: ");
    String input = scn.nextLine();
    System.out.println(input);
    Scanner tokenizer = new Scanner(input);
    tokenizer.useDelimiter(" ");
    ArrayList<Object> arr = new ArrayList<Object>();
    while(tokenizer.hasNext())
    {
        arr.add(tokenizer.next());
        System.out.println(arr.get(arr.size()-1));
    }
    System.out.println(arr);
于 2013-09-15T01:41:20.383 回答