Java własne wyjątki

0

Witam mam mały problem z zadaniem otóż mam za zadanie stworzyć klasę WTP z konstruktorem WTP (int a) która za podany argument w wywołaniu konstruktora stworzy tablicę i zamieści w niej wyliczony wiersz trójkąta pascala (a) następnie mam stworzyć metodę wsp(int b) która za podany argument , miejsce w danym wierszu wywołanym przez konstruktor zwróci wartość trójkąta dla danego miejsca. Wywołanie konstruktora i metody ma się odbywać za pomocą konsoli np. po kompilacji wpisanie java zad1 2 0 1 program ma stworzyć 2 wiersz trójkata i zwrócić wartości które znajdują się na 0 i 1 miejscu. Zamieszczę to co napisałem do tej pory:


 import java.util.*;

 public class zad1
   {
   
       static public class WTP
		 {
		    int[] wiersz;
		 
		 
		    public int wsp(int g)
			  {
			    
				    return wiersz[g];
			      
			  }
		 
			int silnia(int a)
			  {
			    
				
				if (a == 0)
				 {
				   return 1;
				 }
				else
				 {
				   return a * silnia(a - 1);
				 }
			  }
		   
		   WTP(int n)
		     {
			   if(n<0)
			    {
				  System.out.println("Zla dana");
				}
			   else
                {
				 this.wiersz = new int[n+1];
               
                 for(int i = 0; i<n+1; i++)
                   {
				    wiersz[i] =  silnia(n) / ( silnia(n - i) * silnia(i) ); 
				   }
				}				
			  }
		  }
		  
		  
		  public static void main(String args[])
		   {
		     int a1 = Integer.parseInt(args[0]);
			 WTP tablica = new WTP(a1);
			 
			 
			 
			 
			 
			 for(int k = 1; k<args.length; k++)
			      {
				    int t = Integer.parseInt(args[k]);
				    int b = tablica.wsp(t);	
				    System.out.println(b);
				
				  }
			 
			}
      } 
   

Program działa dla podania prawidłowych danych, problem zaczyna się jak np. wpiszę w konsole 3 0 1 s 2. Nie wiem jak obsłużyć te błędy jeżeli ktoś za miejsce poda wartość ujemną, przekraczającą zakres tablicy lub literę. W treści zadania mam podane że muszę stworzyć dla tych sytuacji własny wyjątek jednak czytam o tym (uczę się z thinking in java Eckela.) i nie jestem w stanie pojąć na jakiej zasadzie to działa. Znalazł by ktoś chwilkę czasu i wytłumaczył mi to łopatologicznie najlepiej na jakimś konkretnym przykładzie jak wygląda to tworzenie wyjątków? Bardzo dziękuje za pomoc i czas mi poświęcony.

1
public class CustomException extends Exception {

    public CustomException(String message) {
        super(message);
    }

    public CustomException(String message, Throwable throwable) {
        super(message, throwable);
    }

}

w twoim kodzie, zakładam, że bedzie to wyglądało tak:

               if(n<0)
                {
                  throw new CustomException("Zla dana");
                }
0

Po użyciu tego w tym konkretnym przypadku dostaję błąd w lini throw new CustomException("Zla dana");

Non static variable this cannot be referenced from a static context, po zmianie classy ze statycznej na normalną za to otrzymuje taki sam komunikat o błędzie przy wywołaniu konstruktora w tej lini
WTP tablica = new WTP(a1); Myślałem że to jest normalne wywołanie nie ma tam żadnych zmiennych statycznych więc o co chodzi?

0

pokaż dokładnie kod (BTW. dziwnie budujesz strukturę klas, jak chcesz podzielić na zadania to podziel pakiety - niepotrzebna klasa w klasie)

0

@Yapeth, odwrotnie przetłumaczyłeś. Ty tworzysz niestatyczne pole tablica albo korzystasz z niestatycznej zmiennej a1 w "statycznym kontekście", zapewne w funkcji main. Tak nie można.

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