Zadanie Sito Erastotenesa do sprawdzenia

2012-10-14 18:53
0
public class SitoEratostenesa {
        private boolean tab[];
        public SitoEratostenesa(int n)
        {
                int end;
                boolean[] tab = new boolean[n];
                end = (int) Math.floor(Math.sqrt(n));
                for (int i=2;i<end;i++ )
                {
                        tab[i]=true;
                }
                 for (int i=2;i<=Math.sqrt(end);i++) {
                         if (tab[i]==true) {
                         for(int j=i;j<end;j++) {
                         int number=j;
                         if (number % i == 0 && number != i) {
                         tab[j]=false;
                         }
                         }
                         }
                 }

        }
        public boolean prime(int m)
    {

            if(tab[m]) return true;
            else return false;

    }

}
edytowany 1x, ostatnio: aynama, 2012-10-14 18:53

Pozostało 580 znaków

2012-10-14 19:05
0

Póki nie poprawisz formatowania, nikt Ci nie pomoże...


Pozostało 580 znaków

2012-10-14 19:06
0

a jak to zrobić? Sorka ale jestem tutaj 2 dzień i nie kumam zbytnio a mam problem bo zadanie na jutro :(

Pozostało 580 znaków

2012-10-14 19:09
0

Formatowanie kodu to między innymi odpowiednie wstawianie spacji.
Porównaj te dwa kody:

if(xyz)a=foo()*2;                  else
a=lol();
if (xyz)
{
 a = 2*foo();
} else
{
 a = lol();
}

Który jest według Ciebie czytelniejszy?

Do poprawy jest ten fragment:

                 for (int i=2;i<=Math.sqrt(end);i++) {
                         if (tab[i]==true) {
                         for(int j=i;j<end;j++) {
                         int number=j;
                         if (number % i == 0 && number != i) {
                         tab[j]=false;
                         }
                         }
                         }

Nie widać, gdzie kończy się jeden blok, a zaczyna drugi.
Chodzi po prostu o to, aby nie było to zbite w jedną całość.


Pozostało 580 znaków

2012-10-14 19:11
0
public class SitoEratostenesa {
        private boolean tab[];
        public SitoEratostenesa(int n)
        {
                int end;
                boolean[] tab = new boolean[n];
                end = (int) Math.floor(Math.sqrt(n));
                for (int i=2;i<end;i++ )
                {
                        tab[i]=true;
                }
                 for (int i=2;i<=Math.sqrt(end);i++) 
                      {
                         if (tab[i]==true) 
                           {
                 for(int j=i;j<end;j++) 
                      {
                        int number=j;
                        if (number % i == 0 && number != i) 
                          {
                        tab[j]=false;
                         }
                  }
            }
       }

        }
        public boolean prime(int m)
    {

            if(tab[m]) return true;
            else return false;

    }

}

Jest chociaż odrobinę lepiej?

edytowany 2x, ostatnio: aynama, 2012-10-14 19:13

Pozostało 580 znaków

2012-10-14 19:13
0

Raczej:

for (int i=2;i<=Math.sqrt(end);i++) 
{
  if (tab[i]) // porównywanie `==true` jest zbędne 
  {
    for(int j=i;j<end;j++) 
    {
      int number=j;
      if (number % i == 0 && number != i)
       tab[j]=false;
    }
  }
}

edytowany 1x, ostatnio: Patryk27, 2012-10-14 19:14

Pozostało 580 znaków

2012-10-14 19:15
0

a w dalszej części jest okej?

Pozostało 580 znaków

2012-10-14 19:19
0

I zrobilem do nigo jeszcze taki plik bo bylo tak w zadaniu i wyskakuje mi błąd i nie wiem jak go poprawić

edytowany 1x, ostatnio: aynama, 2012-10-14 19:57
Jaki błąd? Poza tym znowu formatowanie składni jest słabe. Nie należy zbijać kodu w jeden blok! - Patryk27 2012-10-14 19:20

Pozostało 580 znaków

2012-10-14 19:23
0

Exception in thread "main" java.lang.NullpointerExceprion
at SitoErastotenesa.prime ( nr 29 linijki)
at SitoErastotenesaTest.prime (nr 29 linijki)

Pozostało 580 znaków

2012-10-14 19:31
0

Zarówno w klasie jak i w funkcji deklarujesz boolean[] tab; - powinieneś tylko jako pole klasy.


Pozostało 580 znaków

2012-10-14 19:41
0

Czyli w tym pierwszym pliku usunąć

boolean[] tab = new boolean[n];

tak?

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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