我试图实现一个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);
}
}
答案 0 :(得分:1)
通过使用st.pop(),它将删除并返回堆栈的最后一项。如果您不希望它被移除,您可以使用ArrayList之类订购的Collection
,并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);
}
}