Java обработки ввода из командной строки

Я пытался реализовать 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);

        }
    }

1 ответ

Решение

Используя st.pop(), он удалит и вернет последний элемент стека. Если вы не хотите, чтобы он был удален, вы можете использовать один заказанный Collection как ArrayList и получить доступ к элементу через list.get или с помощью итератора.

Еще одно предложение - создать один объект для хранения имени и свойств 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);

     }
 }
Другие вопросы по тегам