Otóz pisze program który sitem Erastotenesa wyszukuje i wsazuje liczby pierwsze. Program ma obsługiwać wyjatki. Jako, że jestem początkujacy w Javie nie za bardzo wiem dlaczego mój kompilator gwizda. Kod jest podzielony na dwa pliki. Bład polega na tym ze program nie widzi nowo powstałego obiektu p który jest wepchany w klauzule try mimo że w catchu mam return. Po zakomentowaniu wyjatku pojawia sie również komuniakt o błedzie tym razem w funkcji prime lub w miejscu gdzie ona jest uzyta. Bardzo prosze o pomoc. Podaje kody dwóch plików :
class Wyjatek1 extends Exception {}
//class Wyjatek2 extends Exception{};
public class SitoErastotenesa {
private boolean tab[];
private int n;
void obliczSito()
{
int i;
int j;
for (i = 2; i < n ; i++)
{
if (tab[i])
{
for(j = 2*i; j < n ; j+= i ) tab[i] = false;
}
}
}
public boolean prime(int m)
{
if (tab[m]) return true;
else
return false;
}
SitoErastotenesa(int n) throws Wyjatek1
{
if (n <= 0 ) throw new Wyjatek1();
n = this.n;
int i;
tab = new boolean[n + 1];
for(i = 0; i < n + 1; i++)
tab[i] = true;
tab [0] = tab[1] = false;
}
}
I drugi:
public class SitoErastotenesaTest {
public static void main(String[] args) {
int i;
int pom1;
int pom2;
try {
pom1 = Integer.parseInt(args[0]);
pom2 = Integer.parseInt(args[1]);
}
catch (NumberFormatException ex)
{
System.out.println("Blad!!");
return;
}
for (i = 0; i < args.length; i++)
{
if (pom2 > pom1) pom1 = pom2;
pom2 = Integer.parseInt(args[i]);
}
try {
SitoErastotenesa p = new SitoErastotenesa(pom1);
}
catch (Wyjatek1 e)
{
System.out.println("Liczba musi byc dodatnia.");
return;
}
p.obliczSito();
for (i = 0; i < args.length; i++)
{
if (p.prime(Integer.parseInt(args[i]))) System.out.println(args[i] + " jest liczba pierwsza");
else System.out.println(args[i] + " jest liczba zlozona");
}
return;
}
}