Avatar billede ejldk Nybegynder
22. november 2007 - 16:37 Der er 21 kommentarer og
1 løsning

Gentage program x antal gange og tæl rigtige og forkerte op

Hej Eksperten.dk!
Jeg er for nylig startet på Java, og er gået igang med at kode et tabeltræningsystem.
Men jeg er æløbet ind i et problem:
Jeg har en metode, udregning(), som jeg godt vil ha gentaget fx 10 gange. For hver gang den gentage kommer der et nyt regnestykke. Ny vil jeg godt have den til at tælle op hvor mange rigtige og hvor mange forkerte man har. Jeg har gjort et forsøg med en while-løkke, og en slags optælling, ved at lægge én til "antalRigtige" hver gang man har svaret rigtigt. Men systemet bliver ved med at give nye regnestykker, efter den har nået fx 10.
Her er koden:

import java.util.Scanner;

public class Tabel
{
    public static void main(String[] args)
    {
        System.out.println("Hej og velkommen!");
        udregning();
    }
   
    public static void udregning()
    {
        java.util.Scanner tastatur = new java.util.Scanner(System.in);
        int randomInt, randomInt2, gaet, resultat, antalStykker, antalRigtige, antalForkerte;
        antalStykker = 1;
        antalRigtige = 0;
        antalForkerte = 0;
        randomInt = 2 + (int)(Math.random() * 9);
        randomInt2 = 2 + (int) (Math.random() * 9);
        while (antalStykker < 5)
        {
            System.out.println("Stykke: " + randomInt + "*" + randomInt2 + ".");
            gaet = tastatur.nextInt();
            resultat = randomInt * randomInt2;
            if (gaet == resultat)
            {
                System.out.println("Du gaettede paa " + gaet + "... og det er .. RIGTIGT!!");
                antalRigtige = antalRigtige + 1;
                udregning();
            }
            else if (gaet != resultat)
            {
                System.out.println("Du gaettede paa " + gaet + "... og det er .. FORKERT!!");
                antalForkerte = antalForkerte + 1;
                udregning();
            }
        }
        System.out.println("Du har nu svaret på 50 regnestykker.");
        System.out.println("Rigtige: " + antalRigtige);
        System.out.println("Forkerte: " + antalForkerte);
    }
}

Er jeg inde på noget af det rigtige, eller er det helt forkert?
Avatar billede _carsten Nybegynder
22. november 2007 - 16:44 #1
-->  while (antalStykker < 5)

Du glemmer bare at forøge antalStykker

Altså

        while (antalStykker < 5)
        {
            System.out.println("Stykke: " + randomInt + "*" + randomInt2 + ".");
            gaet = tastatur.nextInt();
            resultat = randomInt * randomInt2;
            if (gaet == resultat)
            {
                System.out.println("Du gaettede paa " + gaet + "... og det er .. RIGTIGT!!");
                antalRigtige = antalRigtige + 1;
                udregning();
            }
            else if (gaet != resultat)
            {
                System.out.println("Du gaettede paa " + gaet + "... og det er .. FORKERT!!");
                antalForkerte = antalForkerte + 1;
                udregning();
            }
        }
        antalStykker++;
Avatar billede _carsten Nybegynder
22. november 2007 - 16:49 #2
Og så har du sikkert en lærer som vil forsøge at ændre java verdenen ved at lære dig en ny måde at sætte braces på '{}'

    public static void udregning()
    {

    public static void udregning(){ Flyt start brace her op

Jeg medgir at din/lærerens måde kan findes i flere lærebøger, men i den virkelige verden ses det ekstremt sjældent/aldrig.

Bare for at knytte en kommentar som overhovedet ikke har noget med spm. at gøre :)
Avatar billede ejldk Nybegynder
22. november 2007 - 16:50 #3
selvfølgelig.
Det kan jeg da godt se.
Lige en ting:
Du skriver:
antalStykker++;
Gør det det sammen som at skrive:
antalStykker = antalStykker + 1;
?
Avatar billede ejldk Nybegynder
22. november 2007 - 16:51 #4
har ingen lærer;) men en god bog som fortæller mig at jeg skal sætte start-brace på næste linie;)
Avatar billede _carsten Nybegynder
22. november 2007 - 16:51 #5
Og så skal den selvfølgelig INDENFOR while løkken

        ....
        antalStykker++;
        }
:)
Avatar billede _carsten Nybegynder
22. november 2007 - 16:52 #6
Ja

antalStykker = antalStykker + 1;

er det samme som antalStykker++;
Avatar billede _carsten Nybegynder
22. november 2007 - 16:54 #7
++ lægger én til variablen
-- trækker én fra variablen
Avatar billede ejldk Nybegynder
22. november 2007 - 16:54 #8
godt;)
Kan man så bruge antalStykker+++; til at ligge 2 til antalStykker?

Smid et svar, så får du point..
Avatar billede _carsten Nybegynder
22. november 2007 - 16:57 #9
Nej det kan du ikke, men du kan eksempelvis sige

antalStykker += 2;  // forøger antalStykker's værdi med 2
antalStykker += 100; // forøger antalStykker's værdi med 100
Avatar billede ejldk Nybegynder
22. november 2007 - 17:00 #10
øhm, et problem.. det virker ikke...
Den fortsætter med at komme med regnestykker.
Her er hele min kode:

[code]
import java.util.Scanner;

public class Tabel
{
    public static void main(String[] args)
    {
        System.out.println("Hej og velkommen!");
        udregning();
    }
   
    public static void udregning()
    {
        java.util.Scanner tastatur = new java.util.Scanner(System.in);
        int randomInt, randomInt2, gaet, resultat, antalStykker, antalRigtige, antalForkerte;
        antalStykker = 1;
        antalRigtige = 0;
        antalForkerte = 0;
        randomInt = 2 + (int)(Math.random() * 9);
        randomInt2 = 2 + (int) (Math.random() * 9);
        while (antalStykker < 5)
        {
            System.out.println("Stykke: " + randomInt + "*" + randomInt2 + ".");
            gaet = tastatur.nextInt();
            resultat = randomInt * randomInt2;
            if (gaet == resultat)
            {
                System.out.println("Du gaettede paa " + gaet + "... og det er .. RIGTIGT!!");
                antalRigtige = antalRigtige + 1;
                udregning();
            }
            else if (gaet != resultat)
            {
                System.out.println("Du gaettede paa " + gaet + "... og det er .. FORKERT!!");
                antalForkerte = antalForkerte + 1;
                udregning();
            }
            antalStykker++;
        }
        System.out.println("Du har nu svaret på 50 regnestykker.");
        System.out.println("Rigtige: " + antalRigtige);
        System.out.println("Forkerte: " + antalForkerte);
    }
}
[/code]
Avatar billede _carsten Nybegynder
22. november 2007 - 17:06 #11
Hov - ja, selvfølgelig

Din metode hedder udregning() og den kalder du i din man metode, hvilket er OK, MEN
du gør det og i din while løkke!


        while (antalStykker < 5)
        {
            System.out.println("Stykke: " + randomInt + "*" + randomInt2 + ".");
            gaet = tastatur.nextInt();
            resultat = randomInt * randomInt2;
            if (gaet == resultat)
            {
                System.out.println("Du gaettede paa " + gaet + "... og det er .. RIGTIGT!!");
                antalRigtige = antalRigtige + 1;
                udregning();  // <-------------------------------------  HER, FJERN DETTE KALD
            }
            else if (gaet != resultat)
            {
                System.out.println("Du gaettede paa " + gaet + "... og det er .. FORKERT!!");
                antalForkerte = antalForkerte + 1;
                udregning();  // <------------------------------------ HER FJERN DETTE KALD

            }
            antalStykker++;
        }
Avatar billede _carsten Nybegynder
22. november 2007 - 17:09 #12
Enten er jeg blind eller også ....

Sådan skal den se ud

        while (antalStykker < 5) {
            System.out.println("Stykke: " + randomInt + "*" + randomInt2 + ".");
            gaet = tastatur.nextInt();
            resultat = randomInt * randomInt2;
           
            if (gaet == resultat)
                System.out.println("Du gaettede paa " + gaet + "... og det er .. RIGTIGT!!");
            else if (gaet != resultat)
                System.out.println("Du gaettede paa " + gaet + "... og det er .. FORKERT!!");
               
            antalStykker++;
        }
Avatar billede ejldk Nybegynder
22. november 2007 - 17:12 #13
problem igen.
Den stopper fint osv, men den kommer med de samme regnestykker igen og igen.
Men hvis jeg stopper programmet, og starter igen, så kommer et nyt regnestykke, som den også gentager.
har læst noget om at en computer ikke kan generere tilfældige tal, men laver et nyt tal hvert millisekund, eller sådan noget?
Avatar billede ejldk Nybegynder
22. november 2007 - 17:16 #14
hmm, er det bare mig eller kan jeg ikke finde det sted i
while (antalStykker < 5) {
            System.out.println("Stykke: " + randomInt + "*" + randomInt2 + ".");
            gaet = tastatur.nextInt();
            resultat = randomInt * randomInt2;
         
            if (gaet == resultat)
                System.out.println("Du gaettede paa " + gaet + "... og det er .. RIGTIGT!!");
            else if (gaet != resultat)
                System.out.println("Du gaettede paa " + gaet + "... og det er .. FORKERT!!");
             
            antalStykker++;
        }
hvor der b

liver lagt en ekstra i antalRigtige eller antalForkerte?
Avatar billede ejldk Nybegynder
22. november 2007 - 17:20 #15
hvis jeg kører det nu, får jeg de samme regnestykker og 0 rigtige og 0 forkerte når jeg har været alle regnestykker igennem.
Avatar billede _carsten Nybegynder
22. november 2007 - 17:24 #16
2 + (int)(Math.random() * 9); Computeren genererer en tilfældig værdi mellem 2 og 10

det betyder resultat a la 2,2,2,3,2,9,5 vilkårlig regnestykke == forskelligt resultat
Avatar billede ejldk Nybegynder
22. november 2007 - 17:28 #17
Hmm, det forstår jeg ikke.
For hvis jeg sætter den til at give mig 50 regnestykker får jeg halvtreds af de samme.
Hvordan kan jeg løse det?
Det virkede før vi tilføjede antalStykker++;
Avatar billede _carsten Nybegynder
22. november 2007 - 17:34 #18
Det er vist fordi jeg sover !
Dagen har måske været for lang !

Sorry!


while (antalStykker < 5) {
   
    System.out.println("Stykke: " + randomInt + "*" + randomInt2 + ".");
    gaet = tastatur.nextInt();
    resultat = randomInt * randomInt2;

    if (gaet == resultat){
        System.out.println("Du gaettede paa " + gaet + "... og det er .. RIGTIGT!!");
        antalRigtige = antalRigtige + 1;
    }
    else if (gaet != resultat){
        System.out.println("Du gaettede paa " + gaet + "... og det er .. FORKERT!!");
        antalForkerte = antalForkerte + 1;
    }

    antalStykker++;
}
Avatar billede ejldk Nybegynder
22. november 2007 - 17:41 #19
Hmm, den bliver ved med at komme med de samme regnestykker:S
Har du en ide om hvorfor det sker?
Avatar billede ejldk Nybegynder
22. november 2007 - 17:42 #20
nu ved jeg det. Det er fordi at linien hvor tallene genereres ikke er inde i while løkken, så de bliver som de er.
Avatar billede _carsten Nybegynder
22. november 2007 - 17:48 #21
Ja det er korrekt

        randomInt = 2 + (int)(Math.random() * 9);
        randomInt2 = 2 + (int) (Math.random() * 9);
skal indenfor

Tror jeg lukker for i dag, er vist ikke helt vågen mere :)
Avatar billede ejldk Nybegynder
22. november 2007 - 18:08 #22
skidegodt;)
Tak for hjælpen og især for din tålmodighed overfor min uforståelighed
her har du point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester