rozbicie na metody

0

Witam

Mam takie zadanko:

Napisać klasę służącą do generowania liczb pierwszych z zadanego zakresu (1...n). Liczby należy generować za pomocą sita Erastotenesa

http://www.math.edu.pl/sito-eratostenesa

Klasa ta powinna posiadać następujące metody:

konstruktor określający górną granicę (n); konstruktor alokuje i inicjuje tablicę odpowiednich rozmiarów
metodę odsiej() usuwającą z przygotowanej w konstruktorze tablicy liczby złożone
metodę wyswietl() wyświetlającą wszystkie liczby pierwsze z zakresu 1...n
metodę sprawdz(x) - sprawdzającą, czy liczba x jest liczbą pierwszą; uwaga - jeśli wcześniej wywołano metodę odsiej(), to sprawdzenie powinno mieć złożoność O(1) dla x z zakresu 1...n

Do tego udało mi się dopasować kod który robi to co potrzebuje (poza sprawdz) ale potrzebuję rozbić ten kod na wyżej wymienione metody. Dzis pierwszy raz się za javę zabrałem myśląc że szybko to zrobię ale w c++ to jednak trochę inaczej się to robi i jakoś nie bardzo moge sobie z tym poradzić a muszę to napisać w ciągu godziny, póltorej. Pomoże ktoś:)


import java.util.Scanner;

public class Liczbyp 
{
    public static void main(String[] args)
    {
        int n;
        System.out.println("Podaj n");
        Scanner odczyt = new Scanner(System.in);
        n = odczyt.nextInt();
        
        boolean[] numbersTable = new boolean[n+1];
        for(int i = 2; i*i <= n; i++)
        {
            if (numbersTable[i] == true)
                continue;
            for (int j = 2 * i ; j <= n; j += i)
                numbersTable[j] = true;
 
        }
        System.out.println("Liczby pierwsze z przedziału od 2 do " + n + ":");
        for (int i = 2; i <= n; i++)
            if (numbersTable[i] == false)
                System.out.println(i);
 
    }
}

0

Jakoś tak:

import java.util.Scanner;
import java.util.Arrays;
 
public class LiczbyP 
{
    private boolean[] numbersTable;
    private int n;
    public static void main(String[] args)
    {
        System.out.println("Podaj n");
        Scanner odczyt = new Scanner(System.in);
        int k = odczyt.nextInt();
        LiczbyP sito=new LiczbyP(k);
        sito.odsiej(); 
        sito.wyswietl();
    }
    public LiczbyP(int n)
    {
        this.n=n;
        numbersTable = new boolean[n+1];
        Arrays.fill(numbersTable,false);
    }
    private void odsiej()
    {    
        for(int i = 2; i*i <= n; i++)
        {
            if (numbersTable[i])
                continue;
            for (int j = 2 * i ; j <= n; j += i)
                numbersTable[j] = true;
 
        }
    }
    private void wyswietl()
    {
        System.out.println("Liczby pierwsze z przedzialu od 2 do " + n + ":");
        for (int i = 2; i <= n; i++)
            if (!numbersTable[i])
                System.out.print(i+",");
    }
}

Wreszcie wpisałem to do edytora, skompilowałem i uruchomiłem.

0

dzieki wielkie za zainteresowanie ale niestety to nie dziala

"sito.odsiej()" skad to sito? bo nigdzie tego nie ma i program glupieje

0

Sorki ze tak smiece konto sobie założę dzis bo przyda sie pewnie

zgłasza mi jeszcze 2 błedy

"Cannot make a static reference to the non-static field n"

w tych linijkach

n = odczyt.nextInt();
LiczbyP sito=new LiczbyP(n);

0

no jeszcze mi wyswietlanie nie działa , moglbys jeszcze to tez przerobic?:)

0

brakuje metody odpowiedzialnej za wyswietlanie, ona jest w tym moim poscie pierwszym tylko wycioles to w ktoryms momencie:)

0

bogdans DZIęKI WIELKIE za pomoc:) działa jak powinno tam jeszcze jedna rzecz miała być ale już i tak czasu nie ma musiałem wysłać. Uratowałeś mi d...:) Nie sądziłem że ktoś pomoże;) Dzięki naprawdę wielkie:)

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