2017-10-27 1 views
0

私は配列を使ってjavaでスタックデータ構造を書いています。問題は、表示されないユーザーのchar入力をプッシュしようとするときです。問題はこのコードにあります。 Javaの1行から複数​​のchar入力を受け取ります

public static void preSuf(Stack stack) { 
    Scanner key = new Scanner(System.in); 
    System.out.println("enter the values"); 



     while(key.hasNext()){  
      char c = key.next().charAt(0); 
      stack.push(c); 
     } 



} 

私はそれが動作しますが、それは一度だけを印刷し、itterateをdoesntのwhile(key.hasNext())if(key.hasNext())に変更

。この問題を解決するにはどうすればよいですか。

編集:ここでは、全体のコードは

ある
import java.util.Scanner; 

public class Stack { 

    private int top; 
    private char[] container; 
    private int size; 
    public static int pos = 0; 

    // constructor 
    public Stack(int N) { 
     container = new char[N]; 
     size = N; 
     top = 0; 
    } 

    public boolean isFull() { 
     return (size == top); 
    } 

    public void push(char string) { 
     if (!isFull()) { 
      container[top] = string; 
      top++; 
     } else { 
      return; 
     } 

    } 

    public int pop() { 
     int drop; 
     drop = container[top - 1]; 
     container[top] = 0; 
     top--; 
     return drop; 
    } 

    public int peek() { 
     int drop2; 
     drop2 = container[top - 1]; 
     return drop2; 
    } 

    public void display() { 

     for (int i = 0; i < container.length; i++) { 
      if (container[i] != 0) { 
       System.out.print(container[i]); 
      } 
     } 

    } 

    public static void preSuf(Stack stack) { 
     Scanner key = new Scanner(System.in); 
     System.out.println("enter the values"); 



      while(key.hasNext()){  
       char c = key.next().charAt(0); 
       stack.push(c); 

      } 



    } 

    public static void main(String args[]) { 
     Stack stack = new Stack(3); 
     preSuf(stack); 
     stack.display(); 
     stack.display(); 
     System.out.println(); 

    } 

} 
+0

問題の内容がわかりません。コードが正常に表示されます。各文字がスタックにプッシュされます。 –

+0

それはそれらを印刷しない私は問題が何であるかわからない –

答えて

0

問題は、あなたが実際にあなたのスタックの内容を印刷する任意のコードを書いていないということです。

whileループの後にループを記述して、スタックを繰り返し処理し、各文字を出力することができます。

また、whileループを終了する方法も必要です。あなたは特殊文字でこれを行うことができます。 if(c == '.') break;を押すか、Ctrl + Zを押すだけです。

EDIT:質問の編集と提示された完全なコードに基づいて、余分なループを必要とする提案は今や冗長です。あなたはstack.display()にそれがあります。あなたはただあなたのwhileループから抜け出す必要があります。

+0

それは今感謝します! –

+0

心配はいりません。あなたはそれを固定してうれしいです。 –

0
  1. ループを終了するタイミングは決まっていません。
  2. 何も入力せずにEnterキーを押すと、 というループが壊れてしまうと思いますが、それはnextの動作ではありません。 を入力せずに何も入力せずに、入力データを空白のみで入力すると、前にhasNext()を呼び出しても、 の入力を待つ間にブロックされます。が返されます。

解決策は、コントロールがループから脱出する条件を含むことです。

関連する問題