Avatar billede mannik Nybegynder
16. oktober 2003 - 12:43 Der er 20 kommentarer og
2 løsninger

jeg kan heller ikke få hul på denne , random tal

Hej

Jeg skal simulere et simpelt spil, man skal kunne indtaste et heltal der skal så ud fra dette generes et tilfældigt tal som man så skal gætte. Gætter man forkert skal der komme en meddelse : Dit gæt er for lille eller : Dit gæt er for højt. Gætter man skal man naturligvis have det at vide. Samtdig skal der skrives hvor mange gæt det er brugt. Jeg er ikke ude efter en hel løsning men lidt hjælp til hvordan jeg komme igang. Jeg er blevet kastet en måned for sent ind i et datamatiker forløb så jeg har en del at indhente hvis detoverhovedet kan lade sig gøre . Det jeg har bikset sammen indtil nu kommer herunder det er ikke så meget men jeg er gået i stå . På forhånd tak

import java.util.*;
import javax.swing*;

public class Numgame
{
  private static Random rand = new Random;

  public static int getNum()
  {
  return rand. int ntal (n);
  }
  public static int tal
  {
int tal = JOptionPane.showInputDialog(null, "Indtast tal")
 
  public static void main (String args [])
Avatar billede arne_v Ekspert
16. oktober 2003 - 13:01 #1
new Random()

med parenteser.

rand.nextInt(n)

giver tal 0..(n-1)
Avatar billede arne_v Ekspert
16. oktober 2003 - 13:03 #2
Den sidste del er vist rodet læid sammen.
Avatar billede arne_v Ekspert
16. oktober 2003 - 13:03 #3
lidt sammen
Avatar billede arne_v Ekspert
16. oktober 2003 - 13:04 #4
Du bør nok starte med at beskrive programmet rent logisk.

Præcist hvad skal det gøre.

Og så transformere det til konkret Java syntax.

Altså fokusere påfunktionaliteten og logikken først og så vente med
Java syntax til senere.
Avatar billede gimmer Nybegynder
16. oktober 2003 - 16:19 #5
random generatoren skal laves således:
import java.util.Random;
Random generator= new Random();
int tal =generator.nextInt('så et tal her maksimum tal her');

Resten kan klares med en if løkke:
if (tal>gaet)
{
System.out.println("tallet er for lille")
antal_gaet++
}
Håber det kan løse din opgave og jeg ikke har hjulpet for meget!
Ps god arejdslyst!
Avatar billede gimmer Nybegynder
16. oktober 2003 - 16:20 #6
så skal du selvfølgelig lave flere if løkker!
vh Gimmer
Avatar billede mannik Nybegynder
17. oktober 2003 - 09:45 #7
Jeg begraver mig i det nu her om lidt, jeg har nok flere spørgsmål, det er ikke så nemt når man lige bliver smidt på hovedet ind idet. Tak indtil videre, jeg vender tilbage med point men vil ikke lukke endnu.
Avatar billede wtd_nielsen Nybegynder
23. oktober 2003 - 23:10 #8
jeg er ikke helt god i java, jeg forsøgte mig frem, det virker dog ikke helt:
import java.io.*;
import java.util.Random;
class tal1
{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   
    Random generator= new Random();

    public tal1()
    {   
    }
    public int getTal()
    {
        int tal=generator.nextInt(100);
        System.out.println(tal);
        return tal;   
    }
   
    public int indtastTal() throws IOException
    {
        System.out.print("Gæt Tal: ");
        int tal2=Integer.parseInt(br.readLine()); 
        return tal2;
    }   
   
    public void sammenlign() throws IOException
    {
            if (getTal()==indtastTal())
               
                System.out.println("Rigtigt");
            else
                System.out.println("Forkert");
               
                /*if (int getTal> int indtastTal)
                    System.out.println("Tallet er større");
                else
                    System.out.println("Tallet er mindrer");
                */               
                   
    }
   
   
    public static void main(String[] args) throws IOException
    {
    tal1 t=new tal1();
    t.sammenlign();
       
    }
}
Avatar billede wtd_nielsen Nybegynder
23. oktober 2003 - 23:14 #9
hvorfor kan jeg ikke skrive if (tal<tal2) i sammenlign()?
den kender ikke de variabler, men er de ikke public?
min if som jeg har kommenteret væk er meget forkert, ved jeg godt var lige noget jeg forsøgte, sq ha været if (tal<tal2) istedet
Avatar billede arne_v Ekspert
23. oktober 2003 - 23:19 #10
tal og tal2 er lokale i de de metoder hvor de skabes.
Avatar billede arne_v Ekspert
23. oktober 2003 - 23:19 #11
private int tal;
    public int getTal()
    {
        tal=generator.nextInt(100);
        System.out.println(tal);
        return tal; 
    }
    private int tal2;
    public int indtastTal() throws IOException
    {
        System.out.print("Gæt Tal: ");
        tal2=Integer.parseInt(br.readLine());
        return tal2;
    }
Avatar billede mannik Nybegynder
24. oktober 2003 - 14:16 #12
Ok jeg tror jeg er ved at have det men ikke helt ; jeg får en fejl i min system out og hvorfor gør jeg så det? import java.util.*;
import javax.swing.*;

public class Numgame
{

public static int getTal ()
{
int getTal=Integer.parseInt(JOptionPane.showInputDialog(null, "Indtast tal"));
}
public static int nyTal ()
{
  Random generator= new Random();
int nyTal =generator.nextInt(100);
}

public static int talTo ()
  {
int talTo=Integer.parseInt(JOptionPane.showInputDialog(null, "Indtast tal"));
  }
  public static void main (String args [])

  {
  if (talTo == nyTal ( JOptionPane.showMessageDialog(null, "Rigtigt gættet")));
  else
  if (talTo > nyTal ( JOptionPane.showMessageDialog(null, "Tallet er for stort")));
  else
  if (talTo < nyTal ( JOptionPane.showMessageDialog(null, "Tallet er for lille")));
    }

  System.exit(0);

  }
  }

Jeg er heller ikke sikker på hvordan jeg tæler og viser antal gæt
Avatar billede arne_v Ekspert
24. oktober 2003 - 14:55 #13
Ovenstående compiler ikke.

Det er en god skik hele toden at have sine kode compiler bar.

Her er et lille eksempel der compiler:

import java.util.Random;

import javax.swing.JOptionPane;

public class Guess {
    private static Random generator = new Random();
    private static int getNumber() {
        return generator.nextInt(10);
    }
    private static int getGuess() {
        return Integer.parseInt(JOptionPane.showInputDialog(null, "Enter number"));
    }
    public static void main(String[] args) {
        int number = getNumber();
        int guess = getGuess();
        if(number == guess) {
            JOptionPane.showMessageDialog(null, "Correct");
        } else {
            JOptionPane.showMessageDialog(null, "Wrong");
        }
    }
}

for at tælle antal gæt skal du vel have en løkke lagt ind i dit
program.
Avatar billede mannik Nybegynder
24. oktober 2003 - 15:16 #14
Mange tak . jeg kan nok se hvor jeg har fejl og jeg er klar over at den ikke compiler, det skulle jeg måske have sagt tydeligere, jeg får en fejl på system. exit og hvorfor gør jeg det? Jeg kæmper videre
Avatar billede wtd_nielsen Nybegynder
25. oktober 2003 - 14:39 #15
programmet skal køre indtil at man har gættet rigtigt, så det er jo også en løkke, måske noget boolean?
Avatar billede arne_v Ekspert
25. oktober 2003 - 16:12 #16
Umiddelbart vil jeg tro at en do while løkke vil være sagen.
Avatar billede mannik Nybegynder
25. oktober 2003 - 18:31 #17
Ok, jeg er kommet så langt at det compiler , jeg arbejder nu på min løkke. det jeg er kommet frem til med hjælp fra arne ser således ud ;
import java.util.*;
import javax.swing.*;

public class Numgame
{

public static int getTal ()
{
int getTal=Integer.parseInt(JOptionPane.showInputDialog(null, "Indtast tal"));
return getTal;
}
public static int nyTal ()
{
  Random generator= new Random();
  return generator.nextInt(100);
}

public static int talTo ()
  {
int talTo=Integer.parseInt(JOptionPane.showInputDialog(null, "Indtast tal"));
return talTo;
  }

  public static void main (String args [])
  {
  int nyTal;
  int talTo;

  if (talTo() == nyTal())
  JOptionPane.showMessageDialog(null, "Rigtigt gættet");


  else if (talTo() > nyTal())
  JOptionPane.showMessageDialog(null, "Tallet er for stort");

  else if (talTo() < nyTal())
  JOptionPane.showMessageDialog(null, "Tallet er for lille");
  }
}


Jeg havde også glemt at erklærer mine variabler 8( Nu venter min Do / While
Avatar billede mannik Nybegynder
25. oktober 2003 - 21:35 #18
Hmmm .. Jeg har prøvet at indsætte do før min if sætning og så while talTo()!=nyTal() før min else sætning, det virker ikke, hvad mon jeg gør forkert?
og noget helt andet, hvis jeg får det til at virke og jeg bare for sportens skyld kunne tænke mig at lave det om til en applet så jeg kan lægge den på nettet, hvordan gør jeg det hvis det i det hele taget er muligt? Jeg mangler også en tæller der tæller hvormange gange der er gættet, kan jeg tælle en op på en variabel for hvert gennemløb ?
Avatar billede arne_v Ekspert
25. oktober 2003 - 21:59 #19
Du skal uden tvivl tælle en tæller op for hvert gennemløb.

Så tror jeg at du skal gøre ligesom mig og assigne funktionerne over i lokale
variable og sammenligne med dem.

Applet er muligt, men det skal vi nok snakke om - når det her virker.
Avatar billede cpufan Juniormester
29. oktober 2003 - 12:03 #20
Hej
Jeg har lavet en opgave der laver det lille spil:


import javax.swing.*;
import java.util.Random;
public class Opgave72
{
public static void main(String args[])
{
int heltal;
int skud;
int antalskud = 0;
do
{
heltal = indtastInt("Indtast et postivt tal");
}
while (heltal < 0);
    Random rand = new Random();
    int i = rand.nextInt(heltal);
do
{
skud = indtastInt("Indtast dit gæt");
++antalskud;
if(skud<i)JOptionPane.showMessageDialog(null,"computerens tal er højere");
if(skud>i)JOptionPane.showMessageDialog(null,"Computerens tal er mindre");
}
while  (skud !=  i);
JOptionPane.showMessageDialog(null,"Du har gættet tallet " + i + "\nDu brugte " + antalskud + " forsøg");
System.exit(0);
}

public static int indtastInt(String text)
{
int tal;
    do
    {
        String tekst = JOptionPane.showInputDialog(null,text);
        if (tekst == null) return Integer.MIN_VALUE;
        try
        {
            tal = Integer.parseInt(tekst);
            break;
        }
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null, "Ulovligt heltal");
        }
    }
    while (true); // while f.eks.(1 = 1)
    return tal;

}
}
Avatar billede cpufan Juniormester
29. oktober 2003 - 12:16 #21
int i = rand.nextInt(heltal);

burde nok være:

int i = rand.nextInt(heltal)+1;
for at undgå at tilfældigt tal kan være "0"
Avatar billede mannik Nybegynder
05. november 2003 - 17:25 #22
Jeg deler pointene, der er ikke mange men jeg håber at det går? Med jeres hjælp fik jeg løst opgaven, jeg er igang med en ny, der skal nok vise sig problemer her!
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