Nu blir jag snart gråhårig... Finns det en vänlig själ där ute som har tid att hjälpa mig med två problem? (source koden är bifogad)
Jag försöker att göra ett frågesportspel... Där du får svara på olika frågor i olika katekorier/svårighetsgrader... Om du svarar rätt på nivå 1 går du vidare till nivå 2 osv... + att du får olika mycket poäng beroende på vilken nivå du klarar av...
nu till problemet...
kör jag koden nu så får jag inget fel, men svarar jag rätt på nivå 1 och nivå 2 skall komma upp, så verkar det som om min loop fastnar... det händer inget... svarar jag däremot fel så kommer nivå två upp.. (frågorna slumpas fram ifrån en array nivå 1 frågor 1-5 nivå 2 frågor 6-10 osv... de skall bara visas en gång.. troligen är det själva slumpningen och min koll av arrayen som blir fel... har någon tid, lust och ork att hjälpa mig?
Problem nummer två är att få highscore listan att fungera... skulle vilja ha en text fil som läses in, men detta fungerar inte alls..
som sagt var koden är bifogad...
min while loop ser ut som nedan följer...
while (frågesvar == true);
{
do
{
slumpatTal = 5+(int) (9*Math.random()); //slumpar ett tal mellan 5 - 10
}
while(tal[slumpatTal-1]!=0);
//Sätt talet som du har hittat till använt i arrayen
tal[slumpatTal-1]=1;
System.out.println("");
System.out.println("H„r kommer andra fr†gan...");
System.out.println(" ");
Nu blir jag snart gråhårig... Finns det en vänlig själ där ute som har tid att hjälpa mig med två problem? (source koden är bifogad)
Ja du... regel nummer ett är att dela upp huvudproblemet i mindre delar - inte tvärtom som i start.java ;)
En bra (och nödvändig) start är att skissa på hela programmet och "gruppera" vad man vill ha gjort. Att bara hacka ned programflödet från början till slut är sällan lyckat, speciellt om man som i ditt fall har flera val att göra.
Eftersom det här är java är ju byggandet av klasser och objekt utmärkta verktyg till detta. Men tänk då på att man med klasser ska "kapsla in" varje problem för sig och är det något som ständigt återkommer är det bättre göra klasserna generella så att det går att göra flera instanser av dem.
kan man inte använda if (frågesvar == true); kör nedanstående else break; ?
Jo, men den kod som skall köras om if-satsen är sant måste ligga inom ett { }-block. Du avslutar ju if-satsen med semikolon och då avslutas if-satsen direkt och koden under körs oavsett vilkoret, så här skall det se ut:
if (frågesvar) [b]{[/b]
// vilkoret sant. gör någonting här
[b]}[/b] else [b]{[/b]
// vilkoret falskt. gör något annat här
[b]}[/b]
Det jag babblade om är inte java-specifikt, ett bra strukturerat program ska bestå av flera delar som bryter ned problemen i så små delar det bara går och samtidigt vara generellt utfört. Du har t.e.x lagt in console-specifik syntax direkt i klasserna (System.println...) vilket gör det knepigt att porta till exempelvis en applet. En ny variant av t.ex klassen Data skulle kunna se ut så här:
public class Data {
private String quest;
private String word;
private int points;
public Data(String q,String w,int p)
{
quest = q;
word = w;
points = p;
}
String question()
{
return quest;
}
int chAnswer(String a)
{
if(a.equals(word))
return points;
return 0;
}
}
Då överlåter man ansvaret för hur datan ska representeras på den klass eller metod som behandlar objektet ... som då kan vara en applet eller vad som helst.
För att sen behandla själva "spelmotorn" kan det vara lättare om man även gör en egen klass av den.. som poängberäkningen, sparandet av highscore m.m...
Men i huvudfilen initierar man datastrukturen och "snackar" med spelmotorn.
while loopen avslutas väl när den har hittad ett slumptal den kan presentera?
Nej, du har ju satt semikolon direkt efter, men ingen "do" innan, så loopen är endast den raden... ;) Generellt sett så skulle det vara bättre om du delade upp alla små varianter i switch-satsen till metoder (kan ligga kvar i huvudfilen - tills vidare) och på så vis fick ned switch-satsens storlek. Då är det lättare att överblicka dina loopar och du får betydligt enklare att själv följa programflödet.
det jag sedan försökte att göra i en setPoäng var att hämta 10 och lägga till den minPoäng om svaret var rätt...
public void setPoäng() //metodnamn
{
if (minGissning.compareTo(mittSvar) ==0)
minPoäng = minPoäng + poäng;
System.out.println("\\nR„tt svar! Du har "+minPoäng+ " poäng");
}
men nu till problemet... svarar du fel får du 0 poäng svarar du rätt får du 10.... när sedan fråga 2 laddas så skall den ha 20 + 10 om föregående fråga var rätt, men den sätter bara värdet till 20 den tar inte med fråga 1...