Avatar billede markvejsen Nybegynder
19. marts 2005 - 21:12 Der er 55 kommentarer og
1 løsning

Gemme rsultater

Hej

Jeg har en opgave der går ud på at lave et lille program hvor man kan score nogle point i løbet af tre runder. Man er to der spiller og man får point efter hvordan man svarer i forhold til hinanden. Spillet hedder dilemma. Man kan svare Enig eller uenig. Nu er mit problem at programmet ikke gemmer resultaterne af runderne, dvs. lægger dem sammem, men kun viser resultatet af den aktuelle ruunde.

Det betyder at hvis jeg scorer 4 point i runde et og 2 i runde to, så viser den min samlede score til 2 point..... Hvilken comando skal jeg bruge for at få den til at lægge pointene sammen???

Håber at nogle kan hjælpe mig.....
Avatar billede alister_crowley Nybegynder
19. marts 2005 - 21:16 #1
Du laver bare en vector med tilhørende objekt som indeholder dine points, og så bruger du alm. matematik til at lægge dem sammen med.
Avatar billede markvejsen Nybegynder
19. marts 2005 - 21:19 #2
og hvordan gør man det med comandoer????
Avatar billede alister_crowley Nybegynder
19. marts 2005 - 21:24 #3
Hvis du ikke ved hvad noget som helst af det jeg skrev er, skal du i gang med at læse:

Dansk:
http://www.eksperten.dk/artikler/600 (Objekter)
http://www.eksperten.dk/artikler/608 (Metoder)

Engelsk:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Vector.html (Vektorere)

Kig også i http://javabog.dk/
Avatar billede kalp Novice
19. marts 2005 - 21:27 #4
Du kan også sende koden til adasdasdasd@hotmail.com så vil jeg gerne sætte det op så det kan..
Avatar billede kalp Novice
19. marts 2005 - 21:28 #5
poster selvfølgelig det jeg laver herinde så folk kan se det
Avatar billede markvejsen Nybegynder
19. marts 2005 - 21:40 #6
import java.util.Scanner;
import java.util.ArrayList;

public class Spiller
{
    private String name;
    private ArrayList<Moede> memory;

    private Scanner tastatur = new Scanner(System.in);

    private final Moede.Handling SAM = Moede.Handling.sam;
    private final Moede.Handling UDN = Moede.Handling.udn;


    public void Spiller(String na)
    {
        name = na;
        memory = new ArrayList<Moede>();
    }


    public Moede.Handling getAction()
    {
        String str;
        System.out.println(name+"");
        System.out.print("Tast s for at samarbejde eller tast u for at udnytte: ");
        str = tastatur.nextLine();
        System.out.println();
               
        do
        {
            if(str.charAt(0)=='s')
            {
                return SAM;
            }
           
            if(str.charAt(0) =='u')
            {
           
                return UDN;
            }
           
            System.out.print("Der skal tastes s eller u. Proev igen! : ");
            str = tastatur.nextLine();
            System.out.println();
        }
       
        while(true);
       
    }


    public void saveMoede (Moede.Handling a, Moede.Handling b)
    {
        Moede spil = new Moede(a, b);
        memory.add (spil);
    }


    public void recall()
    {
        System.out.println("antallet af handler er: " + memory.size());
        System.out.println("udfaldet af de spillede spil " + memory);
    }


    public int score()
    {
        int sum = 0;

        for (int i = 0; i < memory.size(); i++)
       
        {
            System.out.print(memory.get(i) + " ");
            sum += (memory.get(i)).value();
        }   
       
        return sum;
    }

}
Avatar billede kalp Novice
19. marts 2005 - 21:44 #7
okay lav en attribut øverst i klassen som hedder

int samlet = 0;

og lav en metode til den så man kan lægge nogen værdier til.

Når du så kan du kalder denne metode du har

score()

og gemme den i

samlet score..


så skal du selvfølgelig også have en get metode så du kan hente værdien i samlet
Avatar billede markvejsen Nybegynder
19. marts 2005 - 21:52 #8
Det synes jeg allerede jeg har gjort. Jeg forstår ikke det med den nye metode.

public void saveMoede (Moede.Handling a, Moede.Handling b)
    {
        Moede spil = new Moede(a, b);
        memory.add (spil);
    }

Det virker ikke som om at det nye møde bliver gemt i memory.. Det bliver ikke skrevet ud, når jeg udskriver memoryen lige nede under...
Avatar billede kalp Novice
19. marts 2005 - 21:53 #9
din int sum er en lokal variabel og bliver overskrevet i næste runde

  public int score()
    {
        int sum = 0;

        for (int i = 0; i < memory.size(); i++)
       
        {
            System.out.print(memory.get(i) + " ");
            sum += (memory.get(i)).value();
        }   
       
        return sum;
    }


så må du smide

int sum = 0;


øverst i din klasse.
Avatar billede markvejsen Nybegynder
19. marts 2005 - 21:59 #10
Det godtager den ikke. kan du ikke vise hvad du mener?
Problemet er også at den ikke vil gemme det nye spil i listen sammen med det gamle..
Avatar billede kalp Novice
19. marts 2005 - 22:00 #11
Okay...

smid din sum her op


public class Spiller
{
    private String name;
    private int sum = 0;


og for at den skal huske det ja så må du selvfølgelig ikke oprette en ny instanse af dette objekt.
Avatar billede markvejsen Nybegynder
19. marts 2005 - 22:06 #12
ok ny kan den regne den summere summen, men jeg forstår desværre forsår jeg stadig ikke hvorfor den ikke vil gemme det nye møde efter det/de tidligere møder.
Avatar billede kalp Novice
19. marts 2005 - 22:08 #13
møder er spillerunder?
Avatar billede alister_crowley Nybegynder
19. marts 2005 - 22:09 #14
kalp

Skal variablen ikke være final, nu da det kun er værdien som må ændres. ?
Avatar billede kalp Novice
19. marts 2005 - 22:11 #15
alister_crowley>> nej... for når den er final kan man netop ikke ændre den:)
Avatar billede markvejsen Nybegynder
19. marts 2005 - 22:11 #16
ja et møde er en spillerunde
Avatar billede alister_crowley Nybegynder
19. marts 2005 - 22:13 #17
okay, var lidt i tvivl om hvordan final fungerede :)
Avatar billede kalp Novice
19. marts 2005 - 22:15 #18
final betyder at værdien ikke må ændres:) den kan sættes en gang og så er det det:)

markvejsen>>

Okay jeg er pisse dårlig til at danne mig et overblik over andres kode.. så hav det i mente hehe:)

private ArrayList<Moede> memory;

er det her du prøver at gemme resultaterne? for du skal ikke gemme dem i spilleren. du må undskylde hvis jeg er lidt forvirret men har aldrig før selv skrevet

ArrayList<Moede>

altså <Moede>
Avatar billede markvejsen Nybegynder
19. marts 2005 - 22:24 #19
Det er ok jeg takker bare for at du gider prøve :)

Nej jeg (tror) opretter den bare det jeg prøver på at gemme det nye spil i arrayListen  her:

public void saveMoede (Moede.Handling a, Moede.Handling b)
    {
        Moede spil = new Moede(a, b);
        memory.add (spil);
    }

den gemme oså godt nok det sidst spil, men når det så er kørt to spil og jeg vil udskrive udfaldet at spilENE og antallet de spillede spil lige nedenunder med:

public void saveMoede (Moede.Handling a, Moede.Handling b)
    {
        Moede spil = new Moede(a, b);
        memory.add (spil);
    }

Så uskriver den kun det spil der er spillet sidst
Avatar billede kalp Novice
19. marts 2005 - 22:27 #20
okay udskriver du det der er i din arraylist via en løkke? for det skal du
Avatar billede markvejsen Nybegynder
19. marts 2005 - 22:27 #21
undskyld det var det forkerte jeg indsatte til sidst. jeg udskriver selvfølgelig med
public void recall()
    {
        System.out.println("antallet af handler er: " + memory.size());
        System.out.println("udfaldet af de spillede spil " + memory);
    }
Avatar billede kalp Novice
19. marts 2005 - 22:27 #22
det er forkert
Avatar billede kalp Novice
19. marts 2005 - 22:28 #23
du skal jo udskrive alt i den arraylist
Avatar billede kalp Novice
19. marts 2005 - 22:29 #24
for(int i = 0; i < endDinArrayListStørrelse; i++)
{
System.out.println("antallet af handler er: " + ((moede)dinArrayList.get(i)).memory.size());
System.out.println("udfaldet af de spillede spil " + ((moede)dinArrayList.get(i)).memory);
}
Avatar billede kalp Novice
19. marts 2005 - 22:44 #25
Sig til hvis du ikke kan få det til at virke... resultaterne skal i hvertfald løbes igennem via. en løkke.
Avatar billede markvejsen Nybegynder
19. marts 2005 - 22:48 #26
jeg har lært at men ikke behøver at lave en forløkke for at udskrive indholdet i en ArrayList.

Den skriver også fint udfaldet at det spil der blev spillet sidst. Det er når der er spillet mere end et spil så udskriver den ikke udfaldet af alle tre spil men kun af det sidste spil samtidig siger den også af størelsen af Listen kun er 1
Avatar billede markvejsen Nybegynder
19. marts 2005 - 22:55 #27
Hvis jeg lave det via en forløkke har jeg samme problem med at den hele tiden syntes at størrelsen at listen er 1 og at den kun udskriver det sidste nye udfald.

Det er derfor jeg troede at det var fordi den overskres det sidse møde når jeg prøver at gemme det nye møde.
Avatar billede kalp Novice
19. marts 2005 - 22:56 #28
Hvis size er et så er det fordi du opretter objekted spiller igen efter hver runde!
Avatar billede markvejsen Nybegynder
19. marts 2005 - 23:02 #29
Det kan mulligvis godt være. Hvordan ser jeg om jeg har gjort det??
Avatar billede kalp Novice
19. marts 2005 - 23:07 #30
Hvis du siger

= new Spiller();

mere end en gang.. eller hvis det bliver gentaget efter hvert spil
Avatar billede markvejsen Nybegynder
19. marts 2005 - 23:12 #31
Det gør jeg ikke.
Spillet bliver gentaget via en forløkke hvor =new Spiller bliver bliver oprettet før forløkken.
Avatar billede kalp Novice
19. marts 2005 - 23:18 #32
må jeg ikke se det andet kode? jeg kan ikke se hvorfor det går galt i her.. man bør godt bare kunne sige add() i en arraylist så finder den selv ud af hvor tingene skal ligge
Avatar billede markvejsen Nybegynder
19. marts 2005 - 23:20 #33
Dette er programmet der køre på de to klasser

import java.util.Scanner;

public class Dilemma
{
    public static void main (String[] args)
    {
        String navnA, navnB;
               
        Scanner tastatur = new Scanner (System.in);
        Spiller player = new Spiller();

        //opretter spillerA el. 1. spiller
        System.out.println();
        System.out.print("1. spiller intast venligst dit navn: ");
        navnA = tastatur.nextLine();
               
        //opretter spillerB el. 2.spiller
        System.out.println();
        System.out.print("2. spiller intast venligst dit navn: ");
        navnB = tastatur.nextLine();
        System.out.println();
               
        for(int i=0; i<=2; i++)        //moedes 3 gange
        {
            player.Spiller(navnA);
            Moede.Handling resultA = player.getAction();
           
            spillerB.Spiller(navnB);
            Moede.Handling resultB = player.getAction();
           
            Moede moede = new Moede(resultA,resultB);
           
            player.saveMoede(resultA,resultB);
           
            player.recall();
           
            System.out.print("ialt har " +navnA+ " scoret:");
            System.out.println(player.score());
        }
       
        System.out.println("Spillet er slut");
    }
}
Avatar billede kalp Novice
19. marts 2005 - 23:25 #34
okay giv mig lige 5min.. har vist også lige fået koden via. mail
Avatar billede kalp Novice
19. marts 2005 - 23:28 #35
starter lige mit værktøj.. så jeg kan få et overblik:))
Avatar billede markvejsen Nybegynder
19. marts 2005 - 23:28 #36
Det er vist et stykke tid siden jeg har ændret den lidt siden men den skulle også være ok
Avatar billede kalp Novice
19. marts 2005 - 23:31 #37
Du skal gøre noget.. opret en helt ny klasse! en klasse som holder styr på kampene! for det går altså ikke de ligger i din spiller klasse
Avatar billede markvejsen Nybegynder
19. marts 2005 - 23:34 #38
Det må jeg ikke det skal gøres alene med de tre filer.
Avatar billede kalp Novice
19. marts 2005 - 23:36 #39
så gem det i klassen Dilema
Avatar billede markvejsen Nybegynder
19. marts 2005 - 23:37 #40
hvor meget og hvad havde du tænkt dig jeg skulle flytte?
Avatar billede kalp Novice
19. marts 2005 - 23:39 #41
Bare din ArrayList som gemmer runderne.. og derfor også din saveMoede() metode.. sæt dem ind i dilema.. på den må er du også stensikker på de bliver gemt igennem hele programmets leve tid
Avatar billede markvejsen Nybegynder
19. marts 2005 - 23:42 #42
Jeg ved du mener vel og jeg vil også gerne prøve det, men det er sådan at jeg har fået en liste over hvad klassen Spiller skal indeholde og der står ArrayListen på desværre :)
Avatar billede kalp Novice
19. marts 2005 - 23:51 #43
okay mon ikke den arraylist bare skal indholde værdien af hvad han har optjent for hver runde ? lige nu gemmer du også den anden spillers værdier i spillers 1's klasse hehe
Avatar billede markvejsen Nybegynder
19. marts 2005 - 23:57 #44
ja det er ikke meningen at jeg skal gemme spiller 2s score men jeg skal gemme udfaldet af hver spil dvs hvad hver spiller indtaster.
Avatar billede markvejsen Nybegynder
20. marts 2005 - 00:13 #45
Ok nu har jeg prøvet at lave to spillere hvor jeg så kun gemmer den ene spiller jave brokker sig ikke man jeg skal selvfølgelig ikke sige om det er rigtig. men det hjælper i alt falt ikke. Hvis du ikke har flere idere er det hélt i orden men jeg håber du lig vil kigge på det nedenstående om det var noget i den retning du tænkt før....
import java.util.Scanner;
public class Dilemma
{
    public static void main (String[] args)
    {
        String navnA, navnB;
        Scanner tastatur = new Scanner (System.in);
       
        //opretter spillerA el. 1. spiller
        Spiller spillerA = new Spiller();
        System.out.println();
        System.out.print("1. spiller intast venligst dit navn: ");
        navnA = tastatur.nextLine();
               
        //opretter spillerB el. 2.spiller
        Spiller spillerB = new Spiller();
        System.out.println();
        System.out.print("2. spiller intast venligst dit navn: ");
        navnB = tastatur.nextLine();
        System.out.println();
               
        for(int i=0; i<=2; i++)        //moedes 3 gange
        {
            spillerA.Spiller(navnA);
            Moede.Handling resultA = spillerA.getAction();
           
            spillerB.Spiller(navnB);
            Moede.Handling resultB = spillerB.getAction();
           
            Moede moede = new Moede(resultA,resultB);
           
            spillerA.saveMoede(resultA,resultB);
           
            spillerA.recall();
           
            System.out.print("ialt har " +navnA+ " scoret:");
            System.out.println(spillerA.score());
        }
        System.out.println("Spillet er slut");
    }
}
Avatar billede kalp Novice
20. marts 2005 - 00:19 #46
hmmm okay... prøv lige at udkommenter noget af din kode og prøv istedet min ... det eneste du skal gøre efter hver runde er at kalde

tilfoj(int plads, int score)

hvor den første hvilken plads i array'et værdien skal gemmes.. den anden scoren for runden.

import java.util.Scanner;
import java.util.ArrayList;

public class Spiller
{
    private String name;
    private ArrayList<Moede> memory;
    private int[] liste = new int[3]
    private Scanner tastatur = new Scanner(System.in);

    private final Moede.Handling SAM = Moede.Handling.sam;
    private final Moede.Handling UDN = Moede.Handling.udn;


    public void Spiller(String na)
    {
        name = na;
        memory = new ArrayList<Moede>();
    }


    public Moede.Handling getAction()
    {
        String str;
        System.out.println(name+"");
        System.out.print("Tast s for at samarbejde eller tast u for at udnytte: ");
        str = tastatur.nextLine();
        System.out.println();
               
        do
        {
            if(str.charAt(0)=='s')
            {
                return SAM;
            }
           
            if(str.charAt(0) =='u')
            {
           
                return UDN;
            }
           
            System.out.print("Der skal tastes s eller u. Proev igen! : ");
            str = tastatur.nextLine();
            System.out.println();
        }
       
        while(true);
       
    }

public void tilfoj(int plads, int score)
{
liste[i] = score;
}


    public void saveMoede (Moede.Handling a, Moede.Handling b)
    {
        Moede spil = new Moede(a, b);
        memory.add (spil);
    }


    public void recall()
    {
        System.out.println("antallet af handler er: " + memory.size());
        System.out.println("udfaldet af de spillede spil " + memory);
    }


    public int score()
    {
        int sum = 0;

        for (int i = 0; i < memory.size(); i++)
       
        {
            System.out.print(memory.get(i) + " ");
            sum += (memory.get(i)).value();
        }   
       
        return sum;
    }

}
Avatar billede kalp Novice
20. marts 2005 - 00:28 #47
Hvis det ikke giver mening overhovedet så send mig problemformuleringen/spørgmålet så laver jeg det selv fra bunden af.. mere fordi jeg som sagt har dårligt overblik når jeg får andres kode:)

ikke at du skal bruge min kode men så findes løsningen i min kode!!

men det jeg lige har tilføjet i din kode er det jeg tror du rigtig skulle have gjort bare med en arraylist. sådan gemmes nemlig kun score for spilleren selv i objektet og ikke den andens spillers score
Avatar billede markvejsen Nybegynder
20. marts 2005 - 00:43 #48
jeg har sendt en email til dig med problemformuleringen og en den side der refereres til med hensyn til den ene klasse og e model for spiller klassen.

Jeg forventer du skal sætte livet på spil for mig jeg takker megetfor det du har gjort for mig.
Avatar billede kalp Novice
20. marts 2005 - 00:45 #49
det er fint:) jeg ser på det i morgen skal prøve at gøre det lidt tidligt og måske hvis jeg er heldig kan jeg se hvad det er du har prøvet med i din kode:)) så er den lige til at tilpasse!
Avatar billede markvejsen Nybegynder
20. marts 2005 - 00:48 #50
jeg takker og undskuller at jeg tager så meget af din tid.
Avatar billede kalp Novice
20. marts 2005 - 13:22 #51
jeg er klar igen!! sig lige til når du er online så lad os få det ordnet:)
Avatar billede markvejsen Nybegynder
20. marts 2005 - 14:37 #52
Jeg har selv fåe løst problemet.....

Men tak for al din tid og hjælp...
Avatar billede kalp Novice
20. marts 2005 - 14:38 #53
ahh okay det var godt nok:))
Hvis du selv har fået løst det kan du bare ligge et svar og acceptere det:)
Avatar billede markvejsen Nybegynder
20. marts 2005 - 14:39 #54
hvad mener du med at acceptere???
Avatar billede kalp Novice
20. marts 2005 - 14:41 #55
Vil du ikke have dine 200point igen?
Så skal du ligge et svar.. det gør du ved at sætte prik i "svar" nede i venstre hjørne.. skriver en kommentar og trykker send.

kig så nede i venstre hjørne igen nu kan du markere dit navn.. marker det og tryk på accepter. så får du dine 200point igen. så kan du bruge dem i et andet spørgsmål en anden god gang
Avatar billede markvejsen Nybegynder
20. marts 2005 - 14:42 #56
ok
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