2

データをスタックに保存しようとしています。間違っていたら訂正してください。スタックは後入れ先出しタイプです。だから、私のプログラムの出力がちょっと逆になると思っていました。しかし、出力が異なると言うのは悲しいことです。コードのどの部分が間違っているのかわかりません。

助けてください:|

コード:

`

public class CorruptQueue {

public static void LineUp(){

    BufferedReader br = null;

try {

    String line;
    Stack nameStack = new Stack();
    Stack statusStack = new Stack();
    Stack stack = new Stack();

    br = new BufferedReader(new FileReader("C:/Users/user/Desktop/School Files/Project/CorruptOffice/input.txt"));

    while ((line = br.readLine()) != null) {


       StringTokenizer stringTokenizer = new StringTokenizer(line, " ");

       while (stringTokenizer.hasMoreElements()) {


        String lineup = stringTokenizer.nextElement().toString();
        String name = stringTokenizer.nextElement().toString();
        String status = stringTokenizer.nextElement().toString();



            nameStack.push(name);
            statusStack.push(status);
            System.out.println("Now serving "+ nameStack.pop() + " a " + statusStack.pop());



        /*StringBuilder sb = new StringBuilder();
        sb.append("" + lineup);
        sb.append(" " + name);
        sb.append("" + status);
        sb.append("\n\n");

        System.out.println(sb.toString());*/
       }

    }

    System.out.println("Done");

} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if (br != null)
            br.close();

    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

    }



public static void main(String[] args) 
{
     LineUp();

} }`

入力:

ラインナップ ジョンレギュラー

ラインナップ ボブ レギュラー

ラインナップ トムレギュラー

ラインナップ サラ VIP

ラインナップ マリー VIP

ラインナップ ジョアン VIP

ラインナップ Bea VIP

ラインナップ ハンク レギュラー

ラインナップ アートレギュラー

ラインナップ デイジー VIP

ラインナップ マリウス レギュラー

ラインナップ デーン VIP

出力:

現在、ジョンのレギュラーにサービスを提供しています

現在、ボブに定期的にサービスを提供しています

現在、トムに定期的にサービスを提供しています

サラに VIP を提供するようになりました

現在、マリーに VIP を提供しています

Joan に VIP を提供しています

Bea に VIP を提供中

現在、ハンクに常連としてサービスを提供しています

現在アートを定期的に提供しています

現在、デイジーに VIP を提供しています

現在、マリウスに常連としてサービスを提供しています

現在、デーンに VIP を提供しています

終わり

4

3 に答える 3

8

あなたのスタック操作はここにあるようです

nameStack.push(name);
statusStack.push(status);
System.out.println("Now serving "+ nameStack.pop() + " a " + statusStack.pop());

何かをポップし始める前にそれらをすべてプッシュすると、スタックは名前を逆にしますが、一度に1つのアイテムを同時にプッシュしてポップします。

したがって、本質的にはスタックにプッシュnamestatusて積み上げますが、他のものをアンタイする前に、それらをポップしてコンソールに出力するだけです。

あなたのスタックは実際には何もしていません。


実際に出力を逆にしたい場合は、

System.out.println("Now serving "+ nameStack.pop() + " a " + statusStack.pop());

最初のループから出て、新しいループに入れます。

于 2013-02-25T16:17:04.493 に答える
5
  nameStack.push(name);
  statusStack.push(status);
  System.out.println("Now serving "+ nameStack.pop() + " a " + statusStack.pop());

わかった。つまり、名前をスタックにプッシュします。そしてすぐにその名前をスタックからポップします。そうです、LIFO ですが、スタックには 1 つの要素しかありません。ポップ操作を while ループの外に完全に移動してみてください。次に、スタックが空になるまで要素をポップし続ける別の while ループを作成します。

于 2013-02-25T16:16:56.877 に答える
1

コードには次のセクションがあります。

 nameStack.push(name);
 statusStack.push(status);
 System.out.println("Now serving "+ nameStack.pop() + " a " + statusStack.pop());

値をスタックにプッシュすると、再びすぐにポップされます! それらをすべてオンにしてから、すべてオンにした後でポップオフする必要があります。

スタックを理解するために、スタックについてもう少し読む価値があるかもしれません:)

于 2013-02-25T16:18:27.423 に答える