如何从命令行输入一串任意长度整数并存储

    在利用Java实现图论中一个简单算法的过程中,我遇到了如下问题:如何从命令行输入任意长度的一串数据,以空格隔开各个数据,并将数据存储起来。在这个问题中,程序要求的是输入整数。

    这个问题主要涉及两个子问题:1、如何实现从命令行输入数据到程序中;2、如何存储从命令行输入的任意长度的数据。

    针对第一个子问题,起初,我利用的是Scanner类中的nextInt()方法来获得从命令行获得输入的整数,但是我发现使用nextInt()方法需要输入一个额外的整数(标志输入结束),这样做不方便(考虑到需要输入的整数可以是任意的,标志输入结束的整数可能是需要输入的某个整数)。为了解决这一个问题,我利用的是Scanner类中的nextLine()方法,该方法读取命令行输入的一行,遇到行结束标识符即停止。nextLine()方法返回一个字符串,包含了从命令行输入的某一行元素,但不包括行结束标识符(如'\n')。比如在命令行输入1 2 3 4 5 6 7 8 9 \n,nextLine()方法返回的字符串为"1 2 3 4 5 6 7 8 9"。现在问题是如何将字符串中的整数提取出来,Java中Integer类提供了一个方法parseInt(),该方法可以将字符串转化为相应的整数,比如"1"转化为1,"-1"转化为-1,"0"转化为0。由于输入一串整数被当做成了一个字符串存储,为了将每个整数分开,可以使用String类中的split()方法,该方法可以按照给定的字符将字符串拆分成若干个子字符串。然后分别对每个字符串使用Integer.parseInt()方法转化为对应的整数存储。到这里,第一个子问题得到了解决。

    针对第二个子问题,可以利用栈和队列来实现对任意长度数据的存储。我的解决方法是使用栈来对数据进行存储。

    数据输入部分源代码如下:

class InputData {

    /**
     * @return returns an integer array
     */
    public static Stack inputData() {

        /**
         * this method is aimed at storing the input data and change it into an
         * integer array
         */
        Stack storeData = new Stack();
        String[] stringArray;
        String readString;
        int index = 0;

        //detect the input process
        try (Scanner scan = new Scanner(System.in)) {
            System.out.println("请输入相应的度序列:");
            readString = scan.nextLine();
            stringArray = readString.split("\\s");

            while (index < stringArray.length) {
                storeData.push(Integer.parseInt(stringArray[index]));
                index++;
            }
        } catch (Exception E) {
            //throw exception
            System.out.println("数据输入异常!!!");
            return null;
        }

        return storeData;
    }
}

    上述源代码中Stack是我自己定义的一个栈类,用来建立栈对象存取任意长度的数据。下面的源代码就是对Stack类的定义。

class Stack {

    /**
     * creates a stack blueprint
     */
    //field
    //defines a linked list
    private final LinkedList<Integer> stack = new LinkedList<>();

    //push into stack
    public void push(Integer i) {
        stack.addFirst(i);
    }

    //get top element
    public Integer peek() {
        return stack.getFirst();
    }

    //pop out stack
    public Integer pop() {
        return stack.removeFirst();
    }

    //number of elements in the stack
    public int size() {
        return stack.size();
    }

    总结:

    我的收获主要有两点:第一,从命令行输入数据到程序中;

                        第二,利用栈实现数据的存取。






你可能感兴趣的:(如何从命令行输入一串任意长度整数并存储)