读取数组列表(Java)

时间:2016-01-22 02:57:46

标签: java arrays list input

我正在尝试从用户那里获取输入,然后将该输入排序为数组。输入必须是int,double或string。我现在所拥有的只是一个循环,要求输入用户。

如何阅读/识别输入并将其存储到正确的ArrayList

到目前为止我所拥有的:

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

public class userInput {

public static void main(String [] args){
     ArrayList<String> randomTextlist = new ArrayList<String>();
     ArrayList<Double> doublelist = new ArrayList<Double>();
     ArrayList<Integer> intlist = new ArrayList<Integer>();
     boolean input = true;

 Scanner scan = new Scanner(System.in);

 while (input){
      System.out.print("Input string, int, or double.");
      intlist.add(scan.next());
 }

我是朝着正确的方向前进吗?如果是这样,你如何建议确保将输入放入正确的ArrayLists中?

4 个答案:

答案 0 :(得分:3)

这将继续收集,直到您键入“q”,然后在每个ArrayList中打印所有结果。您可以从那里进行修改以满足您的需求。

while (input) {
    System.out.println("Input string, int, or double:");
    if(scan.hasNextInt()) {
        intlist.add(scan.nextInt());
    } else if(scan.hasNextDouble()) {
        doublelist.add(scan.nextDouble());
    } else {
        String str = scan.next();
        if(str.equals("q")) 
            break;

        randomTextlist.add(str);
    }
}

// sort the lists
Collections.sort(intlist);
Collections.sort(doublelist);
Collections.sort(randomTextlist);

// print the lists
System.out.println(intlist);
System.out.println(doublelist);
System.out.println(randomTextlist);

答案 1 :(得分:2)

试试这个:

public static void main(String [] args){
    ArrayList<String> randomTextlist = new ArrayList<String>();
    ArrayList<Double> doublelist = new ArrayList<Double>();
    ArrayList<Integer> intlist = new ArrayList<Integer>();
    boolean input = true;

    Scanner scan = new Scanner(System.in);

    while (input){
        System.out.print("Input string, int, or double.");
        //exit loop case: input false, or how would you exit the loop?
        if (scan.hasNextBoolean()){
            break;
        }

        if (scan.hasNextDouble()){
            doublelist.add(scan.nextDouble());
        }
        else if (scan.hasNextInt()){
            intlist.add(scan.nextInt());
        }
        else{
            randomTextlist.add(scan.next());
        }
    }
    Collections.sort(doublelist);
    System.out.println(doublelist);
    Collections.sort(intlist);
    System.out.println(intlist);
    Collections.sort(randomTextlist);
    System.out.println(randomTextlist);
    }

答案 2 :(得分:2)

像245这样的数字是整数,也是双数,所以你必须将它添加到intListdoubleList
但是像235.35这样的数字只有两倍,所以你必须只将它加到{{ 1}}
其他输入(不是完全数字输入)不是int或double,因此您必须将它们添加到doubleList

现在我们如何检测输入是哪一个?
使用randomTextlist语句很简单。如何?

首先检查输入是否为try/catch?如果它确实是Integer,当您尝试解析它时,它会抛出Integer,以便您可以检测到输入不是NumberFormatException

Integer声明中,您必须检查输入是否为catch,如果输入为Double。如上所述,它会抛出NumberFormatException因此输入不是Double,现在我们确定它属于randomTextlist

但是如果是Integer,你必须将它添加到int和double列表中, 等等 现在观看这段代码,以便你了解我试图告诉你的内容!

   while (input) {
        String next = scan.next();
        try {
            /*
             check if input is integer or not,
             if it not ,  it throws NumberFormatException
             */
            int n = Integer.parseInt(next);

            // if input was integer it does'nt throw any exception 
            // so add input to your lists
            intlist.add(n);
            doublelist.add(new Double(n));

        } catch (NumberFormatException e) {
            try {
                 /*
                 check if input is double or not,
                 if it not , it throws NumberFormatException
                 */
                double n = Double.parseDouble(next);

                // like above there is no exception so input is double 
                // and we add it to doublelist
                doublelist.add(n);
            } catch (NumberFormatException ex) {
                // after two NumberFormatExceptions we are sure that  
                // input isn't integer or double so add it to randomTextlist
                randomTextlist.add(next);
            }
        }
    }

答案 3 :(得分:1)

首先,您需要弄清楚您拥有的数据类型。

首先尝试解析为Integer,然后作为Double解析,如果其他所有失败则默认为String。未经测试的例子:

String scannedValue = scan.next();
try {
    intlist.add(Integer.parseInt(scannedValue));
} catch (NumberFormatException e1) {
    try {
        doublelist.add(Double.parseDouble(scannedValue));
    } catch (NumberFormatException e2) {
        randomTextlist.add(scannedValue);
    }
}

现在为排序列表的东西。目前,您只是将值添加到列表中。

由于IntegerDoubleString都实施Comparable,您可以使用sort上的Collections方法对列表进行排序:

Collections.sort(randomTextlist);
Collections.sort(doublelist);
Collections.sort(intlist);