2016-07-22 8 views
1

これで、Javaのサマーコースを取っています。はい、これはクラス内の課題ですが、私は困惑しており、すでに休憩を取っており、論理エラーが何であるかを理解できないようです。私はリンクリストを使用してスタックを作成します。 OuterクラスとInnerクラスは、UserStackで実装する必要があります。 UserStackは教師が提供するMyStackを実装しています。 StackAppにはメインが格納されています。コンパイルして実行します。これは、整数を入力するように正しく要求します。削除するものがある場合は削除し、表示するものがある場合は覗き見します。しかし、それは常にそれが削除されている、または番号0を表示していると言います。私はtoStringのオーバーライドを行う必要がありますか?私は教授に尋ねたところ、他の生徒のようにGoogleに行くように教えてくれました。Java Stack peekメソッドは、正しい番号の代わりに0を表示します。

MyStack.java

public interface MyStack 
{ 
    public void push (int item); 

    public int pop(); 

    public int peek(); 

    public boolean isEmpty(); 

} 

UserStack.java

import java.util.NoSuchElementException; 

public class UserStack implements MyStack 
{ 
    private class Node 
    { 
     public int value; 
     public Node link; 

     public Node(int data) 
     { 
      data = value; 
     } 
    } 

    private Node head = null; 

    public void push (int item) 
    { 
     Node newHead = new Node(item); 
     newHead.link = head; 
     head = newHead; 
    } 

    public int pop() 
    { 
     if(isEmpty()) 
      throw new NoSuchElementException(); 
     int tmp = head.value; 
     head = head.link; 

     return tmp; 
    } 

    public int peek() 
    { 
     if(isEmpty()) 
      throw new NoSuchElementException(); 

     int tmp = head.value; 

     return tmp; 
    } 

    public boolean isEmpty() 
    { 
     return head == null; 
    } 
} 

StackApp.java

import java.util.Scanner; 

class StackApp 
{ 
    UserStack stack = new UserStack(); 
    public void displayMenu() 
    { 
     System.out.println ("1) Add an integer to the list\n" + 
          "2) Remove last integer entered\n" + 
          "3) Look at last integer entered\n" + 
          "0) Exit the program"); 
     System.out.print ("Selection: "); 
    } 

    public StackApp() 
    { 
     int option; 
     Scanner input = new Scanner(System.in); 

     do{ 
     displayMenu(); 
     option = input.nextInt(); 

     switch (option) 
     { 
      case 1: 
       int number; 
       System.out.println("Enter integer to add: "); 
       number = input.nextInt(); 
       stack.push(number); 
       break; 
      case 2: 
       int number2 = stack.pop(); 
       System.out.println("Interger removed: " + number2); 
       break; 
      case 3: 
       int number3 = stack.peek(); 
       System.out.println("Next Interger: " + number3); 
       break; 
      case 0: 
       System.out.println("Goodbye"); 
       break; 
      default: 
       System.err.println("Unrecongized choice"); 
       break; 
     } 
     }while(option != 0); 
    } 

    public static void main(String[] args) 
    { 
     new StackApp(); 
    } 
} 
+2

' Node'コンストラクタ: 'data = value;'は 'value = data;'でなければなりません。 –

+0

ありがとうございました。私は月曜日からこれを見つめていて、それに気付かなかった。 – GenCrash10

答えて

0

あなたは新しいアイテムのvalueを設定されることはありません。

+0

問題は 'push'ではなく' Node'コンストラクタではかなりわかります。 –

+0

専門家には明らかなことは初心者ではないかもしれません。 – SomeStudent

+0

@SomeStudent Jonはこの回答の前の状態を指しています。 – EJP

-1

メイト、あなたのノードのコンストラクタに値の割り当ての周りに切り替えてみてください:

オリジナル:

public Node(int data) 
     { 
      data = value; 
     } 

新:また

public Node(int data) 
     { 
      this.value = data; 
     } 

、キーワードの使い方 "これは" でありますこのクラス・レベルの変数「値」をデータの値に設定したいということをプログラムに知らせることが重要です。そのため、キーワード「this」を使用する必要があります。私はあなたの "データ"を "値"と同じように設定すると、あなたの割り当てがちょっとちょっと残っていることを確信しています。値に明示的に初期値が設定されていないので、デフォルトは0です。

+0

'this'は*必須ではありません*ここでは必須ではありませんが、コンストラクタでは同じ名前を使用していたのと同じことが良いことに同意します。 – EJP

関連する問題