Avatar billede TinaH Nybegynder
03. oktober 2002 - 12:07 Der er 6 kommentarer og
1 løsning

Array-problem

Jeg har et program som skal slå 4 terninger, lægge disse sammen og derefter trække den mindste fra. Dette skal ske 6 gange og hvert resultat skal lægges ind på en plads i arrayet "Stats".
Mit problem er at alle pladserne i arrayet får samme resultat, nemlig det første som er blevet slået og de fem andre resultater bruges ikke. Hvad kan jeg tilføje/ændre for at få de 6 forskellige resultater ind på 6 forskellige pladser i arrayet?

Min kode:
import java.math.*;
import cs1.Keyboard;
public class Stats
{
    private static int terning1=1;
    private static int terning2=1;
    private static int terning3=1;
    private static int terning4=1;
    private static int mindst;
    static int Stats[] = new int[6];
     
    public static void main (String[] args)
    {
        char valg;
 
        for(int i=0;i<=5;i++)
        {
          slaa();
        sorter();
       
          if (i==5)
          {
              udskriv();
              System.out.println("Vil du slå igen? 
              j/n");
              valg=Keyboard.readChar();
              if (valg=='j') 
                  i=0;
          }
        }
    }
   
    public static void slaa()
    {
        terning1=(int)(Math.random()*6+1);
        terning2=(int)(Math.random()*6+1);
        terning3=(int)(Math.random()*6+1);
        terning4=(int)(Math.random()*6+1);
    }   

    public static void sorter()
    {
        for (int a=0; a<=5; a++)
        {
        mindst=terning1;
        if (terning1<mindst)
        mindst=terning1;
        if (terning2<mindst)
        mindst=terning2;
        if (terning3<mindst)
        mindst=terning3;
        if (terning4<mindst)
        mindst=terning4;
        Stats[a]=(terning1+terning2+terning3+terning4)-
        mindst;
      }
    } 
   
    public static void udskriv()
    {
        for (int indeks = 0; indeks <= Stats.length-1;
        indeks++)
        System.out.println("Stat:"+ Stats[indeks] );
    } 
}
Avatar billede disky Nybegynder
03. oktober 2002 - 12:11 #1
I din sorter() metode løber du igennem terningerne 5 gange, og sætter stats[] med det samme.

Din sorter skal jo kun udregne en værdi, men få sorter() til at returnere resultatet, og så sætte stats[] i din main ud fra den løkke du kører der uden
Avatar billede =maddog= Nybegynder
03. oktober 2002 - 12:15 #2
Lewis og Loftus er sandelig blevet populær.
Avatar billede jakoba Nybegynder
03. oktober 2002 - 12:23 #3
ret i funktionen sorter:

    public static void sorter()
    {
        for (int a=0; a<=5; a++)
        {
        slaa();    // få nogen nye terningkast at sortere.
        mindst=terning1;
//        if (terning1<mindst) // overflødig. vi VED mindst == terning1 her
//        mindst=terning1;
        if (terning2<mindst)
            mindst=terning2;  // indrykninger, indrykninger, indrykninger.
        if (terning3<mindst)
            mindst=terning3;
        if (terning4<mindst)
            mindst=terning4;
        Stats[a]=(terning1+terning2+terning3+terning4) - mindst;
            // mindst lignede en ny sætning når den stod sådan.
      }
    }

mvh JakobA
Avatar billede TinaH Nybegynder
03. oktober 2002 - 12:39 #4
Hvis jeg indsætter "slaa();" i sorter bliver der slået en god del over 6 gange, men ellers virker det. Hvad kan jeg så gøre for at den kun slår 6 gange (har fjernet slaa(); fra main)
Avatar billede disky Nybegynder
03. oktober 2002 - 12:41 #5
du skal fjerne din for løkke i din main metode.

Dog ville jeg klart foretrække at sorter() kun håndtere en omgang slag med terningerne istedet for jakoba's løsning som klarer alle 6 omgange.

Men du skal kun bruge en for løkke i alt.
Avatar billede jakoba Nybegynder
03. oktober 2002 - 12:50 #6
Ups. havde overset den der løkke i main.

men enig med disky  sorter skal kun håndtere een sortering:

forløkken i main:
        for(int i=0;i<=5;i++)
        {
          slaa();
        sorter(i);  // fortæl sorter hvilken celle denne gang.
     
          if (i==5)
          {
              udskriv();
              System.out.println("Vil du slå igen?
              j/n");
              valg=Keyboard.readChar();
              if (valg=='j')
                  i=-1;  // der incrementeres til 0 ved løkkeslut.
          }
        }

funktionen sorter
    public static void sorter( int a )
    {
//        slaa();    // fder blev slået i main.
        mindst=terning1;
        if (terning2<mindst)
            mindst=terning2;
        if (terning3<mindst)
            mindst=terning3;
        if (terning4<mindst)
            mindst=terning4;
        Stats[a]=(terning1+terning2+terning3+terning4) - mindst;
    }
Avatar billede TinaH Nybegynder
03. oktober 2002 - 12:55 #7
Den sidste kode virkede fint, tak for hjælpen!
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