metoda i konstruktor - problem z tablica

0

Stawiam dopiero pierwsze kroki w Javie, jak również w programowaniu obiektowym. Stąd moje pytanie gdy np mam takie cos

class SitoErastotenesa
{
 SitoErastotenesa(int m){ //konstruktor

boolean tablica[] = new tablica [1000];

//tutaj algorytm sita


}


public static boolean prime(int n){

if(tablica[m]) //jak odwolac sie do tablicy z konstruktora zeby byl dostepny w tej metodzie
//to zrob cos tam
}



}

to jak powinno wygladac odwołanie w metodzie do jakiegos elementu tablicy ktora jest inicjowana w konstruktorze.</quote>

0

na przykład tak:

class SitoErastotenesa{
  private boolean tablica[];
  SitoErastotenesa(int m){ //konstruktor
    this.tablica[] = new tablica [1000];
    //...
  }
  public boolean prime(int n){ // BEZ STATIC
     if(this.tablica[m]) //jak odwolac sie do tablicy z konstruktora zeby byl dostepny w tej metodzie
    //to zrob cos tam
  }
}

Zmienną lokalną zamieniasz na pole obiektu.

Kilka dodatkowych uwag:

  1. W konstruktorze nie umieszczaj algorytmu liczącego. konstruktor jak sama nazwa wskazuje służy do tworzenia obiektu, a nie prowadzenia wyliczeń.
  2. Obliczenia przenieś do metody oblicz()
  3. Skoro tworzysz obiekt to chcesz używac jego pól i metoda. Nie ma potrzeby uzywania metod statycznych.
0

teraz wyskakuje mi błąd illegal start of expression this.tablica[] = new tablica[1000];
^

public class SitoErastotenesa 
{
  	private boolean tablica[];
	SitoErastotenesa(int n) 
	{
		int i,j,zakres;

		this.tablica[]= new tablica[1000];

		
		
		zakres = (int) Math.floor(Math.sqrt(n));


		//inicjuj tablice

		for (i=2; i<=n; i++) this.tablica[i]=true;


		for(i=2;i<zakres;i++) // sito
		{      		
			if(this.tablica[i]) 
			{
				for(j=i+i;j<n;j+=i) 
				{
					this.tablica[j]=false;
				}
			}
		}

		
	}


	public boolean prime(int m)
	{
		
		if(this.tablica[m]) return true;
		else return false;

	}	
0

W klasie zadeklarowałeś zmienną o nazwie tablica i typie boolean[]. Java dopuszcza dwa sposoby deklarowania tablic:

boolean tablica[];
boolean[] tablica;

Przy czym według mnie ładniejszy jest sposób drugi. W każdym razie skoro masz już zadeklarowaną zmienną, to jej inicjalizacja powinna wyglądać tak:

this.tablica = new boolean[100];

Polecam jakąkolwiek książkę do javy, dobry jest też tutorial suna: http://java.sun.com/docs/books/tutorial/

0

Lektura rzeczywiście się przyda.
Funkcję prime() można (IMO również powinno) się zapisać krócej

        public boolean prime(int m)
        {               
                return tablica[m];
        }  

Wypełnianie tablicy stała wartością można zrobić szybciej tak:

Arrays.fill(tablica,true);

pozdrawiam

0

dzieki za wszystkie rady pozdro

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