Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java random array

JimProfit [17.02.2009 16:57:40]

#

Osaisko joku sanoa toimiiko tämä nyt oikein, tai jos ei niin mikä tässä mättää?
Kone näyttää vain yhden arvotun numeron ja ohjelma käy kokoajan, mutta mitään muuta ei tapahdu; ei tule loppua :).

eli ohjelma arpoo 20 numeroa ja käyttää taltioi (array) ja tulostaa ne.

Tossa on vielä lisäksi tietenkin se package -> (public int pts;)

public static void main(String[] args) {

        Scanner reader = new Scanner (System.in);
        String number = "1234567890";

        Student [] myStudents = new Student [21];


         for (int i = 1; i < 21; i++) {

            int points=(int)(number.length()*Math.random());
            System.out.println(+points);

            points = reader.nextInt();
            Student s = new Student();
            s.pts = points;
            myStudents[i] = s;

        }

         for (int i = 1; i < 21; i++) {
            System.out.println("Number: " + i);

            System.out.println(myStudents[i].pts);
        }

    }
}

Mod. lisäsi kooditagit

Metabolix [17.02.2009 17:01:55]

#

System.out.println(points) tosiaan tulostaa sen luvun. Seuraavalla rivillä oleva reader.nextInt() odottaa, että käyttäjä syöttää luvun, ja tallentaa syötetyn luvun points-muuttujaan. Jos poistat nuo molemmat rivit, ohjelma ehkä toimii haluamallasi tavalla.

Tämänkin voisit ratkaista lukemalla itse koodia rivi kerrallaan ja miettimällä, mitä milläkin rivillä tapahtuu.

JimProfit [17.02.2009 17:05:16]

#

ok kiitos, se ei ollutkaan monimutkaista.

Tommittaja [20.02.2009 22:16:12]

#

Ja miksi tuossa koodissasi on

System.out.println(+piste);

kun se voisi olla:

System.out.println(piste);

tuota ylimääräistä '+'-merkkiä ei tarvita, se tulee vain, jos katenoidaan (=yhdistetään merkkijonoja), tai lisätään vain lukuja yhteen.

Säästyy hyvin pieneltä vaivalta, mutta onhan sekin jotain.. ;D

Tommittaja [20.02.2009 23:27:51]

#

ja miksi teet tuon Math.random()-metodin noin vaikealla tavalla? se voisi yhtä hyvin olla näin:

int points = (int)(10*Math.random());

Tuossa ei tarvitse mitään turhaa number-muuttujaa, vaan se arpoo sen suoraan, eikä tuo ohjelma sakota muutamaa tavua muistia lisää ;D

Edit: muuten, oliko tuo tehty jonkin harjoituksen pohjalta, koska tuon ko. tulostuksen voisi tehdä näin:

public class TulostaSatunnainen {
     public static void main(String[] args) {
          int i = 0;
          while (i < 20) {
               int arpaluku = (int)(10*Math.random());
               System.out.println("Luku oli: "+arpaluku);
               ++i;
          }
     }
}

Ajattelin vain, koska tuo oli aika vaikealla tavalla tehty, ainakin tuohon yllä olevaan verrattuna.. :D

Edit: hmm... laitoin tämän tähän, enkä tuohon edelliseen viestiini, koska jostain syystä en voinut muokata sitä.
ja sitten tietenkin, jos haluaa tuonne jonkinlaisen blockin, ettei ohjelma vain tulosta ja lopu, laittaa sen Scannerin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta