Dlaczego nie działa a powinno..

0
public class LiczbyPierwsze
{ 
    private int tab[];
    int licznik = 0;
    
    public int liczba ( int m)
    {
     **return this.tab[m];**
   
    }
    
    public LiczbyPierwsze( int n)
    {
        int pomoc[] = new int[n];
        for (int i = 0; i < n; i++)
        {
            pomoc[i] = i + 1;
            //System.out.print(+pomoc[i]+ " | ");
        }

        pomoc[0] = 0;
        for (int i = 3; i < n; i++)
        {
            if (pomoc[i] != 0)
            {
                for (int j = 2; j < i; j++)
                {
                    if (pomoc[i] % j == 0)
                    {
                        pomoc[i] = 0;
                    }
                }
            }
            //System.out.println(+pomoc[i]);
        }

        for (int i = 0; i < pomoc.length; i++)
        {
            if (pomoc[i] != 0)
            {
                    licznik++;
            }

        }
        int tab[] = new int[licznik];
        int a = 0;
            for (int i = 0; i < n; i++) {
                if (pomoc[i] != 0) 
                {
                    tab[a]=pomoc[i] ;
                    System.out.println(+tab[a]); //test
                    a++;
                }
            }
         
   }
   
}



public class TestLiczbyPierwsze
{
  
  public static void main(String args[])
  {
    int n=0;
    try    
    {          
      n=Integer.parseInt(args[0]);
      if(n < 2)
      {
         System.out.println("Podano niepoprawną wartość zakresu poszukiwanie liczb pierwszych!");
         System.exit(0);
      }
    }
    catch (NumberFormatException ex)
    {   
      System.out.println("Podano niepoprawną wartość zakresu poszukiwanie liczb pierwszych!");
      System.exit(0);          
    }
   

    LiczbyPierwsze p = new LiczbyPierwsze(n);
  for(int i = 1; i<args.length; i++)
   {
     try    
     {          
       n=Integer.parseInt(args[i]);
       if(n < 0 || n >= p.licznik)
       {
         System.out.println(args[i]+" - Liczba spoza zakresu.");
         continue;
       }
     }
     catch(NumberFormatException ex)
     {
       System.out.println(args[i]+" - Nieprawidłowa dana.");
       continue;
     }
     **System.out.println(liczba(n));**
   }

  }
  
}


błąd z konsoli

Exception in thread "main" java.lang.NullPointerException
at LiczbyPierwsze.liczba(LiczbyPierwsze.java:8)
at TestLiczbyPierwsze.main(TestLiczbyPierwsze.java:39)

Dlaczego to nie działa a powinno?

0

Nie dostaję takiego błędu. W klasie* #TestLiczbyPierwsze.main:39* wołasz metodę z klasy LiczbyPierwsze, ale próbujesz wywołać metodę jak by była dostępna w klasie testowej.
Zamiast

System.out.println(liczba(n));

zrób

System.out.println(p.liczba(n));
0

Nie tylko nie powinno działać, ale i nie powinno się kompilować.

  }
     **System.out.println(liczba(n));**
   }

W klasie TestLiczbyPierwsze nie masz metody liczba.

0

Oj nie wiem czemu nie ma p.liczba w moim kodzie ;) Ale było tak wcześniej ;)
Niestety nie pomaga wciąż ten sam błąd

0

Bo przysłaniasz pole tab w klasie LiczbyPierwsze zmienną
int tab[] = new int[licznik]; w konstruktorze, przez co nie tworzysz w ogóle tablicy do której się potem odnosisz. Stąd NullPointer.

0

Okej, a jak to poprawić? Skoro potrzebuję tej tablicy zapełnionej by cokolwiek zwracać z niej, a to robię w konstruktorze

1

Zmień na tab = new int[licznik] po prostu. I popatrz na posty wyżej, rzeczywiście to się nie skompiluje.

0

Postąpiłem jak mówiłeś i sypie innym błędem

./LiczbyPierwsze.java:45: error: not a statement
        tab[] = new int[licznik];
           ^

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