0

javaコマンド ラインからのユーザー入力を処理するプログラムを実装しようとしていました。問題はAlgorithms書籍 ( sedgewick)に記載されていました。

1.1.21 標準入力から各行に名前と 2 つの整数を含む行を読み込み、printf() を使用して、名前、整数、およびその除算の結果の列を含むテーブルを出力するプログラムを作成します。小数点以下第 3 位までの精度で、1 秒ごとに表示されます。このようなプログラムを使用して、野球選手の打率や学生の成績を集計できます。

これを次のように実装しようとしました..しかし、ユーザー入力を保存して印刷できるようにすることに固執し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を使用してアイテムにアクセスできます。

もう 1 つの提案は、名前と y、x プロパティを格納する 1 つのオブジェクトを作成することです。

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 に答える