Program testowy - interface StringStack - pomoc

0

Cześć,

Jestem na początku drogi programowania w Javie, potrzebuję pomocy w zrobieniu zadania które dostałem na uczelni, jeśli może to pokierujcie mnie trochę proszę.

Treść polecenia:

  1. Proszę napisać program testowy używający stosu napisów (interface StringStack)
    2.Przetestować ten program z wykorzystaniem dwóch przykładowych implementacji

do tego mam 3 załączniki
1.

public interface StringStack {
					public void put( String s );
					public String get();
					boolean isEmpty();
}
public class StringStack1 implements StringStack {

  public StringStack1( ) {
		this( 100 );
	}

  public StringStack1( int size ) {
    s= new String [ size ];
    n= 0;
  }

  @Override
  public void put( String o ) {
    if( n < s.length )
      s[n++]= o;
    // else ???
  }

  @Override
  public String get( ) {
    if( n > 0 )
      return s[--n];
    else
      return ""; // ???
  }

  @Override
	public boolean isEmpty() {
		return n == 0;
	}

  private String [] s;
  private int n;
} 
import java.util.*;

public class StringStack2 implements StringStack {

  public StringStack2( int size ) {
  }

	@Override
  public void put( String o ) {
	    s.add( o );
  }

	@Override
  public String get( ) {
	    if( s.size() > 0 )
		    return s.remove( s.size() - 1 );
		else
			return ""; // ???
  }

	@Override
	public boolean isEmpty() {
	  return s.size() == 0;
	}

  private ArrayList<String> s;
}
1

Jakie jest pytanie?
Z czym konkretnie potrzebujesz pomocy?

@Override
  public String get( ) {
    if( n > 0 )
      return s[--n];
    else
      return ""; // ???

Tutaj stworzyłbym sobie wyjątek, albo użył EmptyStackException- w końcu tak oryginalnie robi Stackowa metoda pop przy próbie uzyskania obiektu, kiedy stos jest pusty.
Do tego

@Override
  public void put( String o ) {
    if( n < s.length )
      s[n++]= o;
    // else ???
  }

jakiś FullStackException jeżeli ma to być stos nierozszerzalny, ewentualnie zerknij tutaj: dynamic array size

Weź tylko pod uwagę, że ja też jestem początkujący

0

Dzięki za pomoc i odpowiedź.

Generalnie nie za bardzo mam pomysł na to jaki napisać program testowy. W poście napisałem całe polecenie zadania, nie wiem czy dobrze je rozumiem, ale mam tutaj napisać program który wykorzysta poniższy stos, tak mi się wydaje, ze względu na mój początek i brak doświadczenia potrzbuję trochę pomysłu i ogólnych instrukcji jak to zrobić.

Niestety początki bywają trudne:)

Burdzi0 napisał(a):

Jakie jest pytanie?
Z czym konkretnie potrzebujesz pomocy?

@Override
  public String get( ) {
    if( n > 0 )
      return s[--n];
    else
      return ""; // ???

Tutaj stworzyłbym sobie wyjątek, albo użył albo użyć EmptyStackException- w końcu tak oryginalnie robi Stackowa metoda pop przy próbie uzyskania obiektu, kiedy stos jest pusty.
Do tego

@Override
  public void put( String o ) {
    if( n < s.length )
      s[n++]= o;
    // else ???
  }

jakiś FullStackException jeżeli ma to być stos nierozszerzalny, ewentualnie zerknij tutaj: dynamic array size

Weź tylko pod uwagę, że ja też jestem początkujący

0

Stwórz sobie klasę, w której wykorzystasz swoje Stacki ;)
Tworzysz sobie obiekt, zapełniasz go, próbujesz przepełnić, wyzerowujesz go, próbujesz pobrać obiekt, kiedy stos jest pusty, sprawdzasz czy jest pusty... Generalnie taki misz masz.
Wykorzystaj wszystkie metody Twoich stosów zarówno z pustym jak i pełnym stosem, sprawdź czy nic się nie wysypuje.
Chyba, że chodzi o JUnit, wtedy odpadam.

0

własnie staram się zrobić żeby tak było:)

0

dzieki,
jeśli mogę Cię prosić o przykład klasy z obiektem który chce zapełnić stosem, czy możesz mi pokazać taki przykład?

0

Przykład dla StringStack2

import java.util.EmptyStackException;

public class TestIt {

	public static void main(String[] args) {
		StringStack2 stack = new StringStack2(100);
		
		for (int i = 0; i < 50; i++) {
			stack.put(new String("Hello " + i));
		}
		
		System.out.println("Is stack empty? - " + stack.isEmpty());
		
		for (int i = 0; i < 50; i++) {
			System.out.println(stack.get());
		}
		
		System.out.println("Is stack empty? - " + stack.isEmpty());
		
		try {
			stack.get();
		} catch (EmptyStackException ex) {
			System.out.println("The stack is empty!\n Caught EmptyStackException");
		}
	}

}

Zauważ, że w tym przypadku nie możesz dokonać przepełnienia Twojego stosu, ponieważ korzystasz z obiektu, który dynamicznie zmienia swoją objętość.

Część try...catch występuje, ponieważ dopisałem do Twojego kodu takie cuś:

@Override
    public String get() {
        if(s.size() > 0)
            return s.remove(s.size() - 1);
        else
            throw new EmptyStackException(); // <---
    }
0

dzieki,
dlaczego i<50 a nie od 100?

0

Taki zwykły przykład, nie miałem nic konkretnego na myśli. 100 jest początkowym rozmiarem ArrayList, równie dobrze może go nie być (czyli możesz zrobić drugi konstruktor bez żadnego parametru, ale to tak na marginesie). Twoja kolej na testowanie drugiej klasy.

0

ok, dzieki własnie sie zastanawiałem czy wybrałes to losowo czy jakis zamysł w tym był.
dzieki za pomoc ,
zapomniałem wczesniej o EmptyStackException- w stringstack2, jak skoncze z powodzeniem to podesle kod:)

0

btw, mozesz polecić jakiś dobry tutorial na yt dla początkujących?

0

@r_p Nie uczyłem się z neta, ale podobno TheNewBoston całkiem nieźle tłumaczy

1 użytkowników online, w tym zalogowanych: 0, gości: 1