java处理来自命令行的输入

时间:2013-06-11 03:56:07

标签: java command-line input

我试图实现一个java程序来处理来自命令行的用户输入。问题是Algorithms本书(sedgewick)中给出的问题

  

1.1.21编写一个程序,从标准输入读取行,每行包含一个名称和两个整数,然后使用printf()   打印一个包含名称,整数和列的列的表   将第一个除以第二个的结果,精确到三位小数   地方。您可以使用这样的程序来制作击球平均值   对于棒球运动员或学生的成绩。

我尝试按如下方式实现此功能..但我仍然存储用户输入,因此可以使用printf()打印。我认为Scanner适合于获取用户输入。我仍然可以似乎将输入存储起来供以后使用。

班级Stack来自sedgewick的书。

知道如何做到这一点吗?

 Scanner input = new Scanner(System.in);        
    Stack st = new Stack();
    while(input.hasNext()){
        String tkn =  input.next();
        st.push(tkn);           
        if (st.size()==3){
            int y = Integer.parseInt((String)st.pop());
            int x = Integer.parseInt((String)st.pop());
            String name = (String)st.pop();
            System.out.println("name="+name+",x="+x+",y="+y);

        }
    }

1 个答案:

答案 0 :(得分:1)

通过使用st.pop(),它将删除并返回堆栈的最后一项。如果您不希望它被移除,您可以使用ArrayList之类订购的Collection,并list.getIterator访问该项目。

另一个建议是创建一个对象来存储名称和y,x属性:

class MyObject {
    private String name;
    private int x;
    private int y;

   //... setter and getter methods for the properties
}

对您的代码的建议:它推送Stack中的输入,然后弹出项目以创建MyObject并添加到list

ArrayList listObjects = new ArrayList();
Scanner input = new Scanner(System.in);        
Stack st = new Stack();
while(input.hasNext()){
    String tkn =  input.next();
    st.push(tkn);           
    if (st.size()==3){
         int y = Integer.parseInt((String)st.pop());
         int x = Integer.parseInt((String)st.pop());
         String name = (String)st.pop();
         //create and add the object to the list for further use
         listObjects.add(new MyObject(name, x, y));
         System.out.println("name="+name+",x="+x+",y="+y);

     }
 }