2013-02-23 58 views
0

首先,代碼很長,但我只關心toString方法。我貼上了所有相關的情況。不打印第一個節點進入堆棧(toString)

代碼應該檢查輸入的元素是否小於堆棧頂部的元素。我有那一部分想通了。當我調用我的toString方法來打印保存的輸入時,它不打印添加到堆棧的第一個節點。但是,它會打印所有剩餘的輸入。在註釋

import java.util.*; 
import java.lang.Comparable; 

public class PyramidStack<E extends Comparable<E>> extends Stack<E> { 

@Override 
public void push(E item) throws IllegalArgumentException { 

    if (super.size == 0) { 
     super.push(item); 

    } 
    else if(item.compareTo(super.peek()) <= 0) { 

     super.push(item); 
    } 
    else { 
     System.out.println("String NOT saved. " + countBefore(item) + " strings that should come before this one."); 
    } 
} 

@Override 
public String toString() { 
    Node<E> node; 
    node = this.top; 
    String s = ""; 

    while(node.getNext() != null){ 
     s += node.getData() + " "; 
     node = node.getNext(); 
    }  
    return s; 
} 


public int countBefore(E item) { 
    Node<E> node; 
    node = this.top; 
    int i = 0; 

    while(node.getNext() != null){ 
     if(item.compareTo(super.peek()) <= 0) { 
     node = node.getNext(); 
     } 
     else{ 
     i++; 
     node = node.getNext(); 
     } 
    } 
    return i; 
} 
} 

棧的方法和節點法如下:

testing 
test 
te 
t 

What its currently outputing: 
t te test 

What it needs to output: 
t te test testing 

主要:

import java.util.*; 

public class Stack { 
public static void main(String args[]) { 
    int loopInt = 1; 
    PyramidStack<String> stringStack = new PyramidStack<String>(); 
    PyramidStack<Integer> intStack = new PyramidStack<Integer>(); 

    System.out 
      .println("This program will save some of the strings you enter. "); 
    System.out 
      .println("Can you predict which ones will be saved? (Enter nothing to quit.)"); 
    Scanner sc = new Scanner(System.in); // Opens Scanner for keyboard input 

    try { 
     do { 
      System.out.print("Enter a String: "); 
      String input = sc.nextLine(); 

      if (input.length() > 0) { 

       if (stringStack.size() == 0) { 
        intStack.push(input.length()); 
        stringStack.push(input); 
        System.out.println("String Saved"); 
       } 

       else if (input.length() < intStack.peek()) { 
        stringStack.push(input); 
        intStack.push(input.length()); 
        System.out.println("String Saved"); 

       } 
       else { 
        System.out.println("String NOT saved. Already saved " 
          + intStack.countBefore(input.length()) 
          + " strings that should come before this one."); 
       } 
      } else { 
       System.out.println(); 
       System.out.println(stringStack.toString()); 
       System.out.println(intStack.toString()); 

       loopInt--; 
       sc.close(); 
      } 
     } while (loopInt > 0); 

    } catch (NullPointerException e) { 
     System.out.println("No strings have been entered. Ending the program."); 
    } 
} 
} 

PyramidStack方法,如果用戶輸入的下述A的例子是。

+0

節點和堆棧類的粘貼bin.http://pastebin.com/N4Q1j6Tn – 2013-02-23 08:47:38

回答

2

while(node.getNext() != null){ s += node.getData() + " "; node = node.getNext(); }

這是你缺少打印的最後一個數據..你正在檢查node.getnext()爲空..所以它跳過最後一個對象,並且不打印..你的條件應該
node != null
OR
循環結束後,有這個
s += node.getData() - 這不會給空指針異常的節點不爲空..因爲它沒有檢查node.getnext()

希望它有幫助

+0

這基本上是我正在尋找的解釋。這就是我所認爲的問題,只是不知道如何實現它。謝謝您的幫助! – 2013-02-23 08:58:11

+0

歡迎:) – asifsid88 2013-02-23 09:01:13