2013-01-06, 15:32
  #1
Medlem
Zoems avatar
Hej! Vi har som ni ser nedan gjort en lottorad. Som skrivs ut och sorteras. Denna fungerar (ska dock nämna att jag kanske inte vart drivande) . Det jag nu har en fråga om är inte på hela alltet utan snarare en specifik. Uppgiften går ut på att: Göra ett program som slumpar ut 7 tal av 35 möjliga, genom användandet av en vektor. Sekundärt är sedan att dessa ska sorteras

Frågan: I for loopen ligger en while loop. I boolean vektorer är ju alla siffror falska. While loopen är ju även den till för att kontrollera att ett tal inte upprepar sig själv. Men vart säger egentligen whileloopen det?
Som jag ser det så blir ett tal true, direkt i forloopen och därav önskar den gå in i whileloopen direkt iaf?

Jag förstår att skolfrågor inte är det som önskas här och förstår även avsaknad av svar därmed!Men är det någon vänlig skäl som önskar förklara sambandet och logiken bakom denna for/while loop i syftet att se till att talen blir unika så är jag dig mer än tacksam!

import java.util.*;
public class Lotto {
public static void main(String[] args){
Lotto l=new Lotto();
System.out.println(l.getLottorad());
}

private String getLottorad() {

//Skapar Vektor! Deklaration av variabler: index och tal, rad och r.
boolean Vektor[]=new boolean[35];
int i,tal;
String rad="";
Random r=new Random();

//Räknar upp till 7 slumpmassiga tal.
for (i=0;i<7;i++){
tal=r.nextInt(Vektor.length);


//Kollar om talet redan "har varit".
while(Vektor[tal]==true){
tal=r.nextInt(Vektor.length);

}

//Skriver ut en rad med tal + 1 eftersom man inte kan få noll i lotto.
Vektor[tal]=true;
rad=rad+" "+(tal+1);
}
System.out.println(rad);
rad="";

//Sorterar raden!
for(i=0;i<Vektor.length;i++){
if(Vektor[i]==true)
rad=rad+" "+(i+1);
}
//Skriver ut rad.
System.out.println(rad);
return "Programmet är klart." ;
}

}

Det handlar alltså om att förstå på vilket sätt whileloopen i detta fall fungerar och säkrar att det inte blir upprepning!
Tacksam för all hjälp jag kan få!
Citera
2013-01-06, 15:46
  #2
Moderator
Protons avatar
Till att börja med ska du använda php-taggarna eller code-taggarna när du postar kod, då bibehålls indenteringen.

För det andra, vad har du själv för tankar kring koden i fråga? Hur är din tolkning av while-loopens funktion?

För det tredje sker ingen sortering alls där kommentaren i koden påstår att det sker en sortering, vad är det som sker där istället tror du?
__________________
Senast redigerad av Proton 2013-01-06 kl. 15:49.
Citera
2013-01-07, 11:21
  #3
Medlem
rjonssons avatar
Om du nu vill lära dig lite och inte har varit så delaktig i denna koden så kan du ändra algoritmen så att när du tagit ut ett slumpat nummer så tar du bort det från listan. Istället för att ha en lista med 35 booleans som mappas mot tal så kan du ha en lista med tal direkt. Det blir en snyggare lösning eftersom du slipper attt kontrollera om talet redan har slumpats fram.

Ett annat sätt är att slumpa 7 tal till ett Set, slumpa talen till ditt Set tills den innehåller 7 tal, ett Set innehåler inga kopior.

I er while-loop så kollar ni om booleanen i Vektor[x] (hemsk namn på en variabel) är true, då tar ni ut ett nytt nummer, kollar i while-loopen igen, är den oxå true så fortsätter ni tills ni fått ett tal som är false.

Ibland kan det vara nyttigt att köra igenom programmet med papper o penna, eller med debugger.
__________________
Senast redigerad av rjonsson 2013-01-07 kl. 11:25.
Citera
2013-01-07, 13:48
  #4
Medlem
Citat:
Ursprungligen postat av Zoem
Frågan: I for loopen ligger en while loop. I boolean vektorer är ju alla siffror falska. While loopen är ju även den till för att kontrollera att ett tal inte upprepar sig själv. Men vart säger egentligen whileloopen det?

While-loopen kollar om ditt tal är true, och om det är det slumpar den fram ett nytt tal.

Citat:
Ursprungligen postat av Zoem
Som jag ser det så blir ett tal true, direkt i forloopen och därav önskar den gå in i whileloopen direkt iaf?

Ett tal blir inte true före while-loopen, utan efter:

Kod:
Vektor[tal]=true

Som ett tips kan jag ju tycka att lagra lottoraden som en sträng är konstigt. Uppgiften gick ut på att använda en vektor, ni använder visserligen en vektor med booleans men om ni använder en vektor med lottotalen istället får ni säkert högre betyg.
__________________
Senast redigerad av poussard 2013-01-07 kl. 13:54.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in