0

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

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

我尝试按如下方式实现它..但我被困在存储用户输入以便可以使用它打印printf()..我认为扫描仪适合获取用户输入..我似乎仍然无法存储输入供以后使用。

该课程Stack来自塞奇威克的书。

知道如何做到这一点吗?

 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);

        }
    }
4

1 回答 1

1

通过使用st.pop()它将删除并返回堆栈的最后一项。如果您不希望它被删除,您可以使用ArrayListCollection之类的命令并通过list.get或使用Iterator访问该项目。

另一个建议是创建一个对象来存储名称和 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);

     }
 }
于 2013-06-11T04:15:34.837 回答