Erste Schritte Random erzeugen

Devanther

Top Contributor
Klasse ZufallszahlenTester:
Code:
/**
* Beschreiben Sie hier die Klasse ZufallszahlenTester.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/

import java.util.Random;
import java.util.ArrayList;

public class ZufallszahlenTester
{
    // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
    private int x;
 
    private int zufallsgenerator;
 
    private ArrayList<String> dreiantworten;
 
    /**
     * Konstruktor für Objekte der Klasse ZufallszahlenTester
     */
    public ZufallszahlenTester()
    {
        dreiantworten =  new ArrayList<String>();// Instanzvariable initialisieren
        antwortlisteFuellen();
        x = 0;
    }
    public int eineZufallszahlAusgeben()
    { Random zufallsgenerator;
        zufallsgenerator = new Random();
        int index = zufallsgenerator.nextInt(); System.out.println(index);
    
        return index;
    }
 
    public int zufallszahlenAusgeben(int anzahl)
    {
        Random zufallsgenerator;
        zufallsgenerator = new Random();
        int index = zufallsgenerator.nextInt(); System.out.println(index);
    
        return index;
 
     
    }
 
    public int wuerfeln()
    {
     
    Random zufallsgenerator;
    zufallsgenerator = new Random();
    int index;
 
    index=zufallsgenerator.nextInt(6);
 
    return index;
    } 
     
    public String gibAntwort()
    {
        int index = zufallsgenerator.nextInt(dreiantworten.size());
        return dreiantworten.get(index);
    }
     
    private void antwortlisteFuellen()
    {
        dreiantworten.add("Ja");
        dreiantworten.add("Nein");
        dreiantworten.add("Vielleicht");
    } 
     
 
     
    /**
     * Ein Beispiel einer Methode - ersetzen Sie diesen Kommentar mit Ihrem eigenen
     *
     * @param  y    ein Beispielparameter für eine Methode
     * @return        die Summe aus x und y
     */
    public int beispielMethode(int y)
    {
        // tragen Sie hier den Code ein
        return x + y;
    }
}

Aufgabe:
Methode zufallszahlenAusgeben(int anzahl), die einen Parameter bekommt,
der angibt wie viele Zufallszahlen generiert und ausgegeben werden sollen.

Aufgabe:
Schreiben Sie eine Methode gibAntwort(), die zufällig eine der Zeichenketten
"ja", "nein", "vielleicht" ausgibt.

Ich habe schon einige Methoden selbst geschrieben(siehe Quelltext), aber ich bekomme
in der Methode gibAntwort() die Fehlermeldung von "nextInt" nicht weg.
Bzw. komm ich bei einigen Aufgaben nicht weiter.
http://imgur.com/a/iWeFH
Fehlermeldung: int cannot be dereferenced
 
Zuletzt bearbeitet:
in gibAntwort() beziehst du dich auf die Instanzvaribale zufallsgenerator und darauf kannst du keine Methoden anwenden. In allen anderen Methoden hast du eine lokale Variable zufallsgenerator vom Typ Random angelegt, welche in diesem Fall von verwendet wird.
 
Grundsätzlich find ich es lobenswert, dass du so hartnäckig deine Ziele verfolgst, aber wenn du weiterhin mit den gleichen Fragen, immer und immer wieder, hier auftauchst, dann fühle ich mich bemüßigt, deine Beiträge als Spam zu werten.

Ich biete dir eine letzte Chance nochmal über dein Vorgehen zu reflektieren und eventuell deine Strategie zu ändern, wie du deinen Lernfortschritt vorantreibst.

Es gilt noch immer, was ich letztes Mal gesagt habe: Wenn du Hilfe bei einem Grundverständnis brauchst, kannst du gerne hier eine Frage stellen. Doch Aufgaben für dich zu lösen, ist nicht Sinn deines Lernfortschrittes und dieses Forums.

Sieh's als good-will an - damit ich hier nicht nur der Buhmann bin - hier deine Aufgabe wie sie aussehen könnte.
Java:
/**
 * Eine Klasse die dazu gedacht ist, Anfängern das Programmieren beizubringen. Zuvor sollte
 * man jedoch die vorherigen Beispiele gelöst und verstanden haben.
 *
 * Wenn man die Aufgaben aus dieser Klasse nicht versteht oder lösen kann, dann geht man nochmal
 * zurück auf Anfang, bis man soweit ist, diese Aufgabe zu lösen.
 */
class ZufallszahlenTester {

  private final Random zufallsgenerator;
  private final List<String> dreiantworten;

  /**
   * Initialisiert einen neuen Zufallsgenerator und die Liste mit den Werten <code>Ja</code>,
   * <code>Nein</code>, <code>Vielleicht</code>
   *
   */
  public ZufallszahlenTester() {
    zufallsgenerator = new Random();
    dreiantworten = Arrays.asList("Ja", "Nein", "Vielleicht");
  }

  /**
   * Gibt eine Zufallszahl aus <code>[{@value Integer#MIN_VALUE}, {@value Integer#MAX_VALUE}]</code>
   *
   */
  public void eineZufallszahlAusgeben() {
    int rnd = zufallsgenerator.nextInt();
    System.out.println(rnd);
  }

  /**
   * Gibt <code>n</code> Zufallszahlen aus.
   *
   * @param anzahl Anzahl der auszugebenden Zufallszahlen
   *
   */
  public void zufallszahlenAusgeben(int anzahl) {
    for (int i = 0; i < anzahl; i++) {
      eineZufallszahlAusgeben();
    }
  }

  /**
   * Würfelt mit einem sechseitigen Würfel und gibt das Ergebnis zurück.
   *
   * @return die zufällige Augenzahl
   */
  public int wuerfeln() {
    return zufallsgenerator.nextInt(6) + 1;
  }

  /**
   * Gibt eine Zufällige Antwort aus  <code>Ja</code>, <code>Nein</code> oder <code>Vielleicht</code>
   * zurück
   *
   * @return zufällige Antwort
   */
  public String gibAntwort() {
    int index = zufallsgenerator.nextInt(dreiantworten.size());
    return dreiantworten.get(index);
  }
}
 
in gibAntwort() beziehst du dich auf die Instanzvaribale zufallsgenerator und darauf kannst du keine Methoden anwenden. In allen anderen Methoden hast du eine lokale Variable zufallsgenerator vom Typ Random angelegt, welche in diesem Fall von verwendet wird

Ja, danke! Jetzt geht auch alles!
 
Na dann kannst du ja als Übung noch 2 Methoden hinzufügen:

1. Schreibe eine Methode gibWuerfelsumme, welche eine Anzahl von Würfen übergeben bekommt und die Summe der insgesamt gewürfelten Augen zurückgibt.

2. Schreibe eine Methode gibWuerfeldurchschnitt, welche eine Anzahl von Würfen übergeben bekommt und den Durchschnitt der insgesamt gewürfelten Augen zurückgibt.
 
Jetzt hab ich mal eine kleine Frage dazu. Hätte man in @Flown Code in der Methode:
Java:
 public int wuerfeln() {
    return zufallsgenerator.nextInt(6) + 1;
  }
auch einfach:
Java:
 public int wuerfeln() {
    return zufallsgenerator.nextInt(7);
  }
7 in die Klammer setzen können? Also ich selbst würde sagen Ja, das Random ja auch bei 0 anfängt zu zählen oder? Danke.
 
Da steht aber eindeutig Imperativ. DH jemand muss dir diese Aufgabe gegeben haben. Und uns fragst du nach hilfe.
 
Es ist eine Aufgabe aus dem "Java lernen mit BlueJ" Buch.
Ich arbeite die Aufgaben aus diesem Buch durch.
Das ist ein gutes Training für mich.
 
Übungsaufgaben sind, meiner Meinung, zumindest teilweise aber Hausaufgaben!
Sei es so, dann geht das Thema eben weiter. 😉
 
1. Schreibe eine Methode gibWuerfelsumme, welche eine Anzahl von Würfen übergeben bekommt und die Summe der insgesamt gewürfelten Augen zurückgibt.


Brauche ich eine for Schleife oder eine for-each Schleife?

Code:
 public int gibWuerfelsumme(int anzahl)
   {
      int gesamt = 0;
      
     for (int i = 0; i < anzahl; i++) {
      wuerfeln();
      gesamt = gesamt + wuerfeln();
     
    }
      
      return gesamt;
    }


Die Summe der Augen soll ausgegeben werden, hab ich es geschafft?
Es kommt keine Fehlermeldung und die Ausgabe der Zahlen scheint auch sinnvoll zu sein.
 
2. Schreibe eine Methode gibWuerfeldurchschnitt, welche eine Anzahl von Würfen übergeben bekommt und den Durchschnitt der insgesamt gewürfelten Augen zurückgibt.

Code:
public int gibWuerfeldurchschnitt(int anzahl)
   {
       int gesamt = 0;
       int gesamt2 = 0;
      
     for (int i = 0; i < anzahl; i++) {
      wuerfeln();
      gesamt = gesamt + wuerfeln();
      gesamt2 = gesamt / anzahl;
    }
      
      return gesamt2;
   
    }

hm....genauso! Nur, dass man am Ende noch durch Anzahl teilen muss!
Richtig?
 
1. Der Name "gesamt2" für einen Durchschnitt ist schlecht gewählt.
2. Du rufst die Methode "würfeln" 2x auf, machst beim ersten Mal mit dem Rückgabewert aber gar nix.
3. Du weist "gesamt2" bei jedem Schleifendurchlauf einen neuen Wert zu. Es reicht völlig, den Wert am Ende der Schleife zu berechnen.
4. Bist du dir im Klaren darüber, das "gesamt2" stets der abgerundete Wert des (mathematischen) Durchschnitts ist?
 
@InfectedBytes : Ich habe abstrahiert. Ich wüsste auch nicht, warum das ein Problem darstellen sollte / ein Auge zudrücken muss... Dass ein Computersystem nicht die unendliche Genauigkeit einer rationalen Zahl abbilden kann... weiß doch jeder. Nebenbei angemerkt: Die Zählvariable ist beim Durchschnitt ja auch nicht bei 0, sondern bei 1. Das spielt für die Äquivalenzumformungen, also dem Anwenden des Distributivgesetzs, aber keine Rolle. Viel schwerer fand ich es, für Wolframalpha die richtige Eingabe zu finden. 😉
Aehm ja, ansonsten muss ich zugeben, den neuesten Beitrag mit Code von @Devanther gar nicht gelesen zu haben. 🙁
 

Zurück
Oben