Generator losowych liczb

Odpowiedz Nowy wątek
2006-11-29 23:09
Poczatkujacy7
0

Witam

Mam problem ze wstawianiem losowych liczb... Jak to wyglada w javie?

Zalozmy cos takiego:

public class Macierz { 
    int kolumny; 
    int wiersze; 
    int wartosc; 
    int[][] tab; 

    public Macierz(int kolumny, int wiersze) { 
        this.kolumny=kolumny; 
        this.wiersze=wiersze; 
    } 

    public int[][] utworz(){ 

        this.tab=new int[this.kolumny][this.wiersze]; 
        for(int i=0;i<this.kolumny;i++) 
            for(int j=0;j<this.wiersze;j++){ 
            this.tab[i][j]=wartosc; 
            } 
            return this.tab;            
    } 
    public void wypisz(){ 
        System.out.println("Macierz: "); 
        for(int i=0;i<this.tab.length;i++){ 
            for(int j=0;j<tab[i].length;j++){ 
                    System.out.print(tab[i][j]); 
        } 
            System.out.println(); 
    } 

}

I teraz jak uzupelnic te macierz losowymi liczbami? Czy pod zmienna wartosc wstawiac jakas losowa wartosc? Tylko jak: /? A moze jakis inny sposob...

Pozostało 580 znaków

2006-11-29 23:11
0

O ile pamietam, to klasa Random jest w javie:

public int[][] utworz(){
  Random randomGenerator() = new Random();
  this.tab=new int[this.kolumny][this.wiersze];
  for(int i=0;i<this.kolumny;i++)
    for(int j=0;j<this.wiersze;j++)
      this.tab[i][j]=randomGenerator.nextInt();
  return this.tab;           
} 

ew. zastanow sie nad wersja konstruktora Random(int seed).


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-11-30 00:41
Poczatkujacy7
0

Dziekuje, miales racje: )

Coprawda zadzialalo przy takiej konstrukcji:

public int[][] utworz(){
        this.tab=new int[this.kolumny][this.wiersze];
        Random generator = new Random();
        for(int i=0;i<this.kolumny;i++)
            for(int j=0;j<this.wiersze;j++){
            this.tab[i][j]=generator.nextInt(10);
            }
            return this.tab;            
    }

ale trop byl dobry; )

Przy okazji znalazlem jeszcze jeden sposob:

public int[][] utworz(){
        this.tab=new int[this.kolumny][this.wiersze];
        for(int i=0;i<this.kolumny;i++)
            for(int j=0;j<this.wiersze;j++){
            this.tab[i][j]=(int)(Math.random()*10);
            }
            return this.tab;            
    }

tez dziala, moze sie komus w przyszlosci przyda; )

Tak na marginesie moze ktos wie czym sie roznia te dwa sposoby losowan?

Pozostało 580 znaków

2006-11-30 01:15
0

Math.random() to posrednie wykonanie:

Random randomGenerator = new Random();
randomGenerator.nextDouble();

tak pisze dokumentacja. Te dwa sposoby roznia sie zatem tylko zakresem i typem zwracanych liczb (bo nextInt() i nextDouble()) ;)


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-11-30 12:01
Poczatkujacy77
0

Chcialem zrobic porownywanie, zeby dodawac(samo dodawanie jest ok) tylko macierze, ktorych wymiary sa rowne...

public void dodaj(Macierz A, Macierz B){
    boolean czy=A.equals(B);

    if(czy){
        ...
    }
    else{
        System.out.println("Macierze roznych wymiarow");
    }
    }

... i niezaleznie czy jest if(czy) czy if(!czy) zawsze wywala "Macierze roznych wymiarow": / Trzeba napisac osobna metode do sprawdzania czy mozna to jakos poprawic: /?

Pozostało 580 znaków

2006-11-30 12:30
0

Musisz przeladowac metode equals dla klasy Macierz, tak by sprawdzala wymiary. Jesli tego nie zrobiles to domyslna wersja sprawdza czy referencje odnosza sie do tego samego obiektu w pamieci, a w Twoim wypadku zazwyczaj tak nie bedzie (chyba, ze w parametrach wywolania dasz ten sam obiekt dwa razy).


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-12-01 17:08
0
Random rand=new Random(System.currentTimeInMilis())
int x= (int)(rand.nextDouble()*ZAKRES) //ZAKRES = max int

w ten sposob masz pelna kontrole

natomiat zgodnie z tym co powiedzial przedmowca Eqals musisz przeciazyc oraz getHashCode() (tak to chyba jakos lecialo) przy zalozeniu, ze jesli dla dwoch obiektow Equals zwraca true to HashCode jest taki sam

pozdr

Pozostało 580 znaków

2006-12-06 13:49
Poczatkujacy77
0

Dziekuje za odpowiedzi. Uproscilem wszystko maksymalnie narazie-podaje tylko jeden parametr przy tworzeniu macierzy i operuje na kwadratowej.

A teraz, jeszcze takie pytanie-jak zaimplementowc, zeby metoda pobierala jako parametr dowolny obiekt klasy: / Bo ciagle pisze, np. public void pomnoz(Macierz A, Macierz B){...}
i pozniej tworze Macierz A=new Macierz(3);
Macierz B=new Macierz(3);
Macierz tmp=new Macierz(3);


i wywoluje
`tmp.pomnoz(A,B);`
chcialem dopisac do konstruktora pole char nazwa, tak zeby chrakteryzowac macierz po nazwie i tworzyc np. Macierz A=new Macierz(3,'A'); ale jak wtedy pobrac macierz do metody poprzez te nazwe: /? public void pomnoz(???, ???){...} : /

Pozostało 580 znaków

2006-12-06 14:15
0

Nie zrozumialem tego co chcesz zrobic. Ale sposob w jaki to robisz jest kiepski. Duzo bardziej intuicyjnie zrobic tak:

public void pomnoz(Macierz druga){}

Macierz A = new Macierz(3);
Macierz B = new Macierz(3);
Macierz C = A.pomnoz(B);

A z ta nazwa nie zalapalem.


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-12-06 16:44
Poczatkujacy77
0

Tak myslalem, ze zamotam i ciezko bedzie to zrozumiec:D A to co napisales rzeczywiscie ma sens tylko podczas kompilacji blad:
...\Test.java\src\test\Main.java:34: incompatible types
found : void
required: test.Macierz
Macierz C = A.pomnoz(B);

Pozostało 580 znaków

2006-12-12 01:50
Poczatkujacy77
0

Ok, juz sobie poradzilem... Jeszcze nie jest do konca tak jakbym chcial, ale to narazie mniej wazne. A teraz jeszcze sprawa, ktora ciezko bedzie mi samemu wymyslic, wiec jesli ktos moze poratowac podpowiedzia i/lub kawalkiem kodu dotyczacego jak policzyc macierz odwrotna i/lub rzad macierzy to bylbym wdzieczny naturalnie. Do odwrotnej potrzebny jest wyznacznik, ktory napisalem-narazie tylko dla macierzy 2x2 i 3x3, ale narazie wystarczy;)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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