Avatar billede mannik Nybegynder
07. november 2003 - 17:47 Der er 22 kommentarer og
1 løsning

random og array

Ja så spørger jeg igen 8(

Er der mon en der kan vise et eksempel på hvordan jeg skriver en random tipsrække (1,X,2 med 13 tegn)til et array? det der lige forvirre mig mest er sammenblandingen af char og int

På forhånd tak
Avatar billede soreno Praktikant
07. november 2003 - 17:56 #1
F.eks. kunne det gøres sådan:

import java.util.*;

public class Main
{
    private static final int ET = 0;
    private static final int KRYDS = 1;
    private static final int TO = 2;
   
    public static void main(String args[])
    {
        int tips[] = new int[13];
        Random rnd = new Random();

        for(int i=0;i<tips.length;i++)
        {
            tips[i] = rnd.nextInt(3);
        }

        for(int i=0;i<tips.length;i++)
        {
            switch(tips[i])
            {
                case ET:
                    System.out.print("x--");
                    break;

                case KRYDS:
                    System.out.print("-x-");
                    break;
               
                case TO:
                    System.out.print("--x");
                    break;
               
                default:
                    System.out.println("!!!");
                    break;                   
            }
            System.out.println("\t række " + (i+1));
        }
    }
}

Output:
-x-      rµkke 1
--x      rµkke 2
--x      rµkke 3
x--      rµkke 4
x--      rµkke 5
--x      rµkke 6
--x      rµkke 7
-x-      rµkke 8
--x      rµkke 9
x--      rµkke 10
x--      rµkke 11
x--      rµkke 12
-x-      rµkke 13
Avatar billede arne_v Ekspert
07. november 2003 - 18:34 #2
Det måda kunne gøres lidt kortere:

import java.util.Random;

public class Tips {
    private static Random rng = new Random();
    private static final char[] outcome = { '1', 'X', '2' };
    public static void main(String[] args) {
        char[] row = new char[13];
        for(int i = 1; i <= 13; i++) {
            row[i-1] = outcome[rng.nextInt(3)];
        }
        for(int i = 1; i <= 13; i++) {
            System.out.println(i + " " + row[i-1]);
        }
    }
}
Avatar billede mannik Nybegynder
07. november 2003 - 21:26 #3
Tak

jeg prøver lige og vender tilbage
Avatar billede mannik Nybegynder
08. november 2003 - 09:41 #4
Arne

det er elegant det må jg sige. Jeg har fundet nogle af de fejl jeg selv lavede og de oplysninger jeg manglede, kunne jeg lokke dig til at forklare hvorledes 'for' loop'ne virker? Jeg kan ikke helt gennemskue dem. På forhånd tak . Smid lige et svar
Avatar billede arne_v Ekspert
08. november 2003 - 10:58 #5
Begge for løkkerne udfører indholdet 13 gange med i værdier fra 1 til 13.

Den første løkke assigner tilfældige resultater over i et array.

Den anden løkek skriver det array ud.
Avatar billede arne_v Ekspert
08. november 2003 - 10:58 #6
svar
Avatar billede arne_v Ekspert
08. november 2003 - 11:00 #7
Iøvrigt hvis du tænker fodbold fremfor Java så er ovenstående måske
ikke så smart. Ovenstående forudsætter en sandsynlighedes fordeling
1/3 - 1/3 - 1/3 og i virkeligheden er den fordeling nok lidt anderledes !
Avatar billede mannik Nybegynder
08. november 2003 - 12:08 #8
Tak Arne , jeg skal nok være der med point, lige en sidste ting, jeg tænker ikke fodbold, det er en opgave jeg har til mit Java kursus. Kurset er ikke særlig godt dokumenteret så derfor er jeg nødt til at spørge her. Jeg skal nu have array'et lavet om til et 2 dim. og så skal man kunne indtaste antal rækker i en JOptionPane og så skal det antal rækker udskrives med System.out. jeg prøver om jeg kan finde ud af det. Bogen vi bruger er ikke god, syntes jeg, kan du evt. anbefale en ? sådan helt begynder!
Avatar billede arne_v Ekspert
08. november 2003 - 12:31 #9
Hvad skal der være i de 2 dimensioner ?  Jeg formoder at den ene
dimension er rækker - men hvad er den anden ? (de 3 outcomes som
Søren markerede ?)
Avatar billede arne_v Ekspert
08. november 2003 - 12:37 #10
Men ellers skal du jo læse et tal ind og bruge det i.s.f. 13 !
Avatar billede mannik Nybegynder
08. november 2003 - 13:25 #11
Hmmm... opgaven lyder, "skriv et program der ydfylder en tipskupon. Programmet skal repræsentere tipskuponen som et 2 dim. array" Så jeg formeoder at den ene dimension er rækken og den anden antal rækker, d.v.s at hvis jeg indtaster 8 i min JOptionPane så skal den udskrive 8 forskellige rækker hvis det er over 10 er der tale om en ulovlig handling. Jeg har taget opgaven bid for bid men det er måske en dårlig løsning ? Hele opgaven går ud på som nævnt ovenfor samt at man skal kunne indtaste en tipsrække og så få at vide om man har vundet.

Det der i første omgang bragte mig ud af fatning var at i den bog vi skal bruge står der at et array kun kan bestå af int og da der jo er et X (char) har jeg virkelig rodet rundt. Jeg har også fået modstridende oplysninger om metoder så det er lidt svært. Jeg giver dog ikke op selv om det har været tæt på!

Takker for hjælpen indtil videre, løsning på "bid 1" var rigtigt god og har hjulpet mig med at forstå en hel del.
Avatar billede arne_v Ekspert
08. november 2003 - 13:34 #12
Lidt ideer:

import java.util.Random;

import javax.swing.JOptionPane;

public class Tips2 {
    private static Random rng = new Random();
    private static final char[] outcome = { '1', 'X', '2' };
    public static void main(String[] args) {
        int nrow = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter no rows"));
        char[][] row = new char[nrow][3];
        for(int i = 1; i <= nrow; i++) {
            row[i-1][0] = '-';
            row[i-1][1] = '-';
            row[i-1][2] = '-';
            int res = rng.nextInt(3);
            row[i-1][res] = outcome[res];
        }
        for(int i = 1; i <= nrow; i++) {
            System.out.println(i + " " + row[i-1][0]+ row[i-1][1]+ row[i-1][2]);
        }
    }
}
Avatar billede mannik Nybegynder
08. november 2003 - 21:33 #13
tak Arne , nu har jeg nok til hele natten 8-) Skulle jeg mon lukke dette og så åbne et nyt når jeg (og det har jeg garenteret) har yderligere spørgsmål ?
Avatar billede mannik Nybegynder
09. november 2003 - 11:38 #14
Arne

kunne jeg mon lokke dig til at forklare denne for løkke?
for(int i = 1; i <= nrow; i++) {
            row[i-1][0] = '-';
            row[i-1][1] = '-';
            row[i-1][2] = '-';
            int res = rng.nextInt(3);
            row[i-1][res] = outcome[res];
Jeg kan med mine manglende kundskaber ikke gennemskue den
Avatar billede arne_v Ekspert
09. november 2003 - 11:49 #15
For hver række sætter jeg alle 3 positioner til '-' og så sætter
jeg den calgte position til det markerings tegn som bruges  i
den position.
Avatar billede arne_v Ekspert
16. november 2003 - 22:04 #16
OK ?
Avatar billede mannik Nybegynder
18. november 2003 - 11:53 #17
Jeg er faktisk kommet en bid videre , jeg har dog et par yderligere spørgsmål ; hvorfor kan jeg ikke bruge break til at få koden til at holde op med at køre hvis man indtaster mere end 10 rækker? Jeg skal også kunne indtaste en tipsrække og så skal der komme en besked med om man har vundet (hvis der er mere end 10 rigtige) ville det være korrekt at anvende en switch til dette ? Min kode ser ud som følger lige nu :
import java.util.*;
import javax.swing.*;
  public class Tipskupon
  {
private static Random rng = new Random();

    private static final char[] outcome = { '1', 'X', '2' };



    private static char kupon[][];



    public static void main(String[] args) {

        int antal =Integer.parseInt(JOptionPane.showInputDialog(null, "Indtast antal rækker"));
        {
        if (antal > 10)
      JOptionPane.showMessageDialog(null, "Du har indtastet for mange rækker ");
        }
        kupon = new char[13][antal];

        for (int j = 0; j < antal; ++j) {

            for(int i = 1; i <= 13; i++) {

                kupon[i-1][j] = outcome[rng.nextInt(3)];

            }

        }

        for(int i = 1; i <= 13; i++) {

            for (int j = 0; j < antal; ++j) {

                System.out.print(kupon[i-1][j] +    " ");

            }

            System.out.println();


        }

    }

}
Avatar billede arne_v Ekspert
18. november 2003 - 11:58 #18
break virker kun med løkker og switch.

Men kan du ikke bare kalde:

System.exit(0);

?
Avatar billede mannik Nybegynder
18. november 2003 - 12:14 #19
tak for hurtig svar , jo det kunne jeg måske, jeg tænkte bare om der var en anden måde at gøre det på . Skulle du mon have et bud på det andet spørgsmål ? På forhånd tak
Avatar billede arne_v Ekspert
18. november 2003 - 12:30 #20
Umiddelbart tror jeg at du skal bruge en løkke til at sammenligne det valgte
med det rigtige.
Avatar billede mannik Nybegynder
19. november 2003 - 09:19 #21
Nu har jeg forsøgt mig hele natten, hvordan får jeg en løkke til at teste hvor mange rigtige der er ? Jeg kan ikke gennemskue det men har fundet masser af måder det ikke virker på, så kunne du mon sparke mig i den rigtige retning?
Avatar billede arne_v Ekspert
19. november 2003 - 11:03 #22
Du har et array med gæt og et array med forkert, så laver du en counter
og løber alle rækkerne igennem og tæller counter op, til sidste ser du
hvad counter er.
Avatar billede mannik Nybegynder
19. november 2003 - 19:58 #23
Jeg kan ikke få det til at virke , jeg kan ike få ind i mit lille (men tykke )hoved hvordan jeg skal få testet den rigtige række. Lad os sige at man vælger at udskrive 8 rækker men det er jo ikke sikkert at der er gevinst på nogen af dem ? Hvordan lokalisere jeg hvor mange rigtige der er ? Jeg har nok rodet for meget idag 8(
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