• Wir präsentieren Dir heute ein Stellenangebot für einen Java Entwickler - m/w/d in Augsburg, München, Stuttgart oder Bamberg. Hier geht es zur Jobanzeige

Zufällige Auswahl aus einem angelegten Array?

D

DraconicVisage

Mitglied
Seid gegrüßt!
Ich fange gerade erst an mit der Programmierung und versuche mir anhand eines Text Adventure meine Fähigkeiten zu erweitern. Ich lese die Theorie und versuche meine Idee dann praktisch umzusetzen. Bis jetzt läuft es ganz gut, nur bin ich auf ein Problem gestoßen. Ich habe ein Array für verschiedene Gegenstände(siehe Zeile 18) angelegt und möchte nun einen zufälligen Gegenstand ausgeben. Ich habe schon mehrere Sachen probiert doch entweder gibt er mir das gesamte Array aus oder es kommt nur die Zahl 0, obwohl das Array ein String ist.

Falls ihr mir weiterhelfen könntet, mit einer Erklärung warum genau das so abläuft wie ihr es schreibt, wäre wirklich hilfreich zum verstehen :)
Wenn euch sonst noch etwas auffällt, was ich falsch gemacht habe, schreibt auch das gerne. Nur durch Kritik und Belehrung lernt der menschliche Verstand ^^
Ich danke auf jeden Fall für jede Hilfe!

Dies wäre mein Code bis jetzt:
Textadventure:
import java.util.Random;
import java.util.Scanner;

public class Game {

    public static void main(String[] args) {

        // System Objects
        Scanner in = new Scanner(System.in);
        Scanner auswahl = new Scanner(System.in);
        Scanner wahl2 = new Scanner(System.in);
        Random rand = new Random();

        // Player Variables
        int playerHealth = 10;
        int playerBasicDamage = 1;
        int maxPotionAmount = 3;
        String[] lowTierItems = {"Dolch, Kurzschwert, Speer, Claymore,"};

        // Enemy Variables
        
        // Regular Vampyres
        int maxVampHealth = 20;
        int maxVampHit = 3;
        
        // Vampyre Lord
        int maxHealthVampLord = 50;
        int maxHitVampLord = 20;

        boolean running = true;

        while (running) {
            System.out.println("Du wirst wach und fühlst du angeschlagen...");
            in.nextLine();
            System.out.println("Als du dich umschaust bemerkst du, du bist in einer Gruft!");
            in.nextLine();
            System.out.println("Dir ist nicht bewusst wie du hier hineingeraten bist... was wirst du tun?");
            in.nextLine();
            System.out.println("1. Du schaust dich in der Gruft um.");
            System.out.println("2. du verlässt die Gruft.\n");
            int wahl = auswahl.nextInt();

            switch (wahl)
            {
            case 1:
                System.out.println("Du schaust dich um... die Gruft ist moosig, nass und sehr kalt."
                        + "Du hörst wie Fackeln an den Wänden knistern und knacken.");
                System.out.println("In der Ecke der Gruft, wo die Lichtstraheln der Fackeln gerade noch so scheinen findest du eine Waffen!"
                        + "möchtest du die Waffe nehmen?\n");
                System.out.println("1. Ja, unbedingt!");
                System.out.println("1. Nein, lieber nicht.");
                wahl2.nextInt();
                
                if(wahl == 1)
                {
                    int waffe = (int) (Math.random() * lowTierItems.length);
                    System.out.println("Du hast folgende Waffe gefunden: " + (lowTierItems[waffe]) + "!");
                }
                else
                {
                    //Hier kommt noch etwas nach der Lösung mit dem Array!
                }
                break;
                
            case 2:
                System.out.println("Rechts von dir siehst du Lichtstrahlen, auch wenn nur wenig. Du bewegst dich drauf zu"
                                + "und findest den erhofften Ausgang aus der Gruft.");
                break;
            }
        }
    }
}
 
kneitzel

kneitzel

Top Contributor
Der Teil mit der Auswahl ist schon richtig nur dein Array hat nur ein Element.

Du musst da mehrere Strings durch Komma getrennt angeben. Also:
String[] lowTierItems = {"Dolch", "Kurzschwert", ....
 
D

DraconicVisage

Mitglied
Der Teil mit der Auswahl ist schon richtig nur dein Array hat nur ein Element.

Du musst da mehrere Strings durch Komma getrennt angeben. Also:
String[] lowTierItems = {"Dolch", "Kurzschwert", ....
Oh, jetzt wo du es sagst, ist es mir auch aufgefallen. Immer die einfachsten Fehler die einem Probleme machen..^^

Vielen Dank für die schnelle Hilfe!
 
D

DraconicVisage

Mitglied
Dies muss wahl2 heißen.

Und noch eine Anmerkung: Auf Dauer wird es keinen Spaß machen, das komplette Spiel in der main-Funktion zu schreiben. Du solltest dich dann auch mal mit Methoden und Klassen beschäftigen.
Stimmt, ist mir selbst auch später noch aufgefallen! Habe meinen Code nochmal verändert da ich versuche, sofern der Nutzer zurück in die Gruft möchte dort wieder hinzuspringen per weiteren While Schleife und einer switch Anweisung. Er springt nur nicht zurück zum Anfang, woran ich derzeit tüftele. Beispiel hänge ich an.
Ich danke dir trotzdem für den Tipp!


Ein schlechte Variante sind 3 Scanner Objekte. Verwende nur 1 Scanner Objekt
Wie bereits oben geschrieben bin ich neu im Bereich programmieren. Ist mein 5. Tag heute ^^ Also 1 Scanner reicht? Falls der scanner input speichern soll muss ich wahrscheinlich eine Variable bzw. bei einer Liste ein Array anwenden, richtig? Sonst habe ich es online falsch verstanden.

Der jetzige Code:

While schleifen versuch für den Start:
import java.util.Random;
import java.util.Scanner;

public class Game {

    public static void main(String[] args) {

        // System Objects
        Scanner in = new Scanner(System.in);
        Random rand = new Random();

        // Player Variables
        int playerHealth = 10;
        int playerBasicDamage = 1;
        int maxPotionAmount = 3;
        String[] lowTierItems = { "Dolch", "Kurzschwert", "Speer", "Claymore" };

        // Enemy Variables

        // Regular Vampyres
        int maxVampHealth = 20;
        int maxVampHit = 3;

        // Vampyre Lord
        int maxHealthVampLord = 50;
        int maxHitVampLord = 20;

        boolean running = true; // Aslong this boolean is set to true, the game will run.

        System.out.println("Du wirst wach und fühlst du angeschlagen...");
        in.next();
        System.out.println("Als du dich umschaust bemerkst du, du bist in einer Gruft!");
        in.next();
        System.out.println("Dir ist nicht bewusst wie du hier hineingeraten bist... was wirst du tun?");
        in.next();

        while (running) {
            
            boolean firstArea = true;
            
            while(firstArea) { //Aslong this is set to true, the player will stay in the first Area.
                System.out.println("1. Du schaust dich in der Gruft um.");
                System.out.println("2. Du suchst dir einen Ausgang.");
                in.nextInt();
                
                switch(in.nextInt()) {
                case 1:
                    System.out.println("Du schaust dich in der Gruft um und entdeckst eine Waffe! Möchtest du sie nehmen?");
                    System.out.println("1. Ja, unbedingt!");
                    System.out.println("2. Nein, lieber nicht.");
                    int wahl = in.nextInt();
                    
                    if(wahl == 1)
                    {
                        int waffe = (int) (Math.random() * lowTierItems.length);
                        System.out.println("Du hast folgende Waffe gefunden: " + waffe + "!");
                    }
                    else if(wahl == 2)
                    {
                            System.out.println("Du lässt die Waffe liegen und gehst zurück.");
                    }
                    break;
                case 2:
                    System.out.println("Auf deiner rechten Seite siehst du ein paar Lichtstraheln.");
                    System.out.println("Du gehst auf das Licht zu und kommst an eine uralte Tür welche direkt zu einer Treppe führt.");
                    System.out.println("Du gehst die Treppe hinauf und findest dich in einem düsteren Wald wieder.");
                    firstArea = false;
                }
            }

        }
    }
}
 
D

DraconicVisage

Mitglied
Der Teil mit der Auswahl ist schon richtig nur dein Array hat nur ein Element.

Du musst da mehrere Strings durch Komma getrennt angeben. Also:
String[] lowTierItems = {"Dolch", "Kurzschwert", ....
Hallo Kneitzel, entschuldige, wenn ich dich nochmals mit der gleichen Frage störe, aber ich versuche derzeit meinen Code in verschiedenen Klassen zu unterteilen was auch super funktioniert jedoch, obwohl ich die random Funktion genau gleich geschrieben habe, gibt diese mir erneut nur zahlen aus. Ich habe schon verschiedene Methode von StackOverflow, Codegrepper etc versucht jedoch immer dasselbe Ergebnis.

Ich habe nun eine eigene Klasse für den ersten Bereich im Adventure angelegt via while loop, der auch genau so läuft, wie ich das möchte nur wie bereits oben geschrieben, gibt er mir anstelle der Namen im Array wieder nur Zahlen aus.

Dies wäre die Klasse für den Anfangsbereich:

Klasse für den Anfangsbereich:
import java.util.Random;
import java.util.Scanner;

public class firstArea {

    boolean firstArea = true; // This boolean is used to keep the While loop running aslong the player is in the first Area.
    Scanner scan = new Scanner(System.in);
    String[] items = {"Dolch", "Speer", "Kurzschwert", "Zweihänder"};
    Random random = new Random();

    public void start() {

        System.out.println("Du wachst auf und fühlst dich angeschlagen");
        scan.nextLine();
        System.out.println("Als du bemerkst dass du in einer Gruft bist, packt dich der Wissensdurst!");
        scan.nextLine();
        System.out.println("Was wirst du nun tun?\n");
       
       
        while (firstArea) { // The loop starts here to keep running while the user is in the first area of the Adventure.
            System.out.println("1. Du durchsuchst die Gruft");
            System.out.println("2. Du suchst einen Ausgang aus der Gruft");
            int wahl = scan.nextInt();

            if (wahl == 1) {
                System.out.println("Du durchsuchst die Gruft und findest eine Waffe!");
                scan.nextLine();
                System.out.println("Möchtest du die Waffe nehmen?\n");
                System.out.println("1. Ja, nimm die Waffe.");
                System.out.println("2. Nein, lass die Waffe liegen");
                wahl = scan.nextInt();

                if (wahl == 1) {
                    int waffe = random.nextInt(items.length);
                   
                    //int waffe = (int) (Math.random() * items.length);
                   
                    System.out.println("Du hast folgende Waffe erhalten: " + waffe + "!\n");
                    System.out.println("Da du nun eine Waffe hast und hier nichts mehr zu finden scheint, solltest du den Ausgang suchen.");
                } else if (wahl == 2) {
                    System.out.println("Du lässt die Waffe liegen und gehst zurück.");
                } else {
                    return;
                }
            }
        }
    }

}
 
temi

temi

Top Contributor
Die Variable "waffe" ist vom Typ Integer, also wird auch ein Integer ausgegeben.

Du möchtest den Integerwert aus nextInt() aber als Index für den Zugriff auf das Array verwenden, z. B. items[0] entspricht dem ersten Element im Array (= "Dolch").
 
D

DraconicVisage

Mitglied
Die Variable "waffe" ist vom Typ Integer, also wird auch ein Integer ausgegeben.

Du möchtest den Integerwert aus nextInt() aber als Index für den Zugriff auf das Array verwenden, z. B. items[0] entspricht dem ersten Element im Array (= "Dolch").
Danke für die schnelle Antwort. Genau jedoch soll ein zufälliger string aus dem array items aufgerufen werden.
I'm ersten Code funktionierte dies ohne Probleme da mir jedesmal ein zufälliger string ausgegeben wurde und somit dementsprechend der Name der Waffe.

Jetzt wo ich es auf eine eigene Klasse verschoben haben und ich alles genau so geschrieben habe wie in der vorherigen main Methode, funktioniert dies auf einmal nicht mehr.
Vielleicht stelle ich mich auch dümmer an als ich bin 😅
Dürfte ich fragen wie du bzw. Ihr so etwas schreiben würdet um einen zufälligen string aus einem array aufzurufen?

Lg
 
kneitzel

kneitzel

Top Contributor
Aber wie @temi schon sagte: In der Variable waffe speicherst Du eine Zufallszahl. Das ist halt auch nicht die Waffe sondern der index der Waffe. Daher ist die obere Grenze auch vom Array vorgegeben.

==> waffe ist also nicht waffe sondern waffenIndex.

Und bei der Ausgabe willst du dann items[waffenIndex] ausgeben. (bzw items[waffe] wenn du die Variable nicht umbenennen möchtest.
 
D

DraconicVisage

Mitglied
Aber wie @temi schon sagte: In der Variable waffe speicherst Du eine Zufallszahl. Das ist halt auch nicht die Waffe sondern der index der Waffe. Daher ist die obere Grenze auch vom Array vorgegeben.

==> waffe ist also nicht waffe sondern waffenIndex.

Und bei der Ausgabe willst du dann items[waffenIndex] ausgeben. (bzw items[waffe] wenn du die Variable nicht umbenennen möchtest.
Ach so okay jetzt habe ich das richtig verstanden. Ich nutze also die zufällige zahl die in die Variable waffe gespeichert wird und nutze diese dann beim Aufruf des Array.
Habe dies jetzt so umgeändert und es funktioniert einwandfrei.
Ich schulde euch etwas, vielen vielen Dank! Damit kann ich an meinem Adventure weiter basteln. Übung macht den Meister :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Zufällige Auswahl innerhalb eines Arrays und Arrays aus JLabel füllen Java Basics - Anfänger-Themen 32
M zufällige auswahl eines Panels aus Grid Layout Java Basics - Anfänger-Themen 3
L Zufällige Übereinstimmungen in 2 Arrays Java Basics - Anfänger-Themen 3
C Werte im Vector in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 14
C Vector-Inhalt in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 6
T Zufällige Matrix in neue Matrix schreiben Java Basics - Anfänger-Themen 6
W Wie kann man zufällige Anordnungen machen? Java Basics - Anfänger-Themen 1
J Zufällige Buchstaben Java Basics - Anfänger-Themen 45
F zufällige Zahlenfolge Java Basics - Anfänger-Themen 8
J Buchstabe (char) an zufällige Position eines Strings einfügen Java Basics - Anfänger-Themen 1
E Erste Schritte Memorie zufällige Pärchen mischen Java Basics - Anfänger-Themen 6
J Zufällige Bewegung Java Basics - Anfänger-Themen 25
R Zufällige Abfolge Java Basics - Anfänger-Themen 5
E Variablen Zufällige Boolschevariable erzeugen Java Basics - Anfänger-Themen 4
F Datentypen Zufällige Buchstaben vertauschen Java Basics - Anfänger-Themen 3
B Zufällige Zahlen in Array sortieren Java Basics - Anfänger-Themen 18
B "Zufällige" Newlines in Process.getErrorStream Java Basics - Anfänger-Themen 5
M Zufällige Position Java Basics - Anfänger-Themen 3
B zwei zufällige elemente aus array lesen und überprüfen Java Basics - Anfänger-Themen 8
TheKing Zufällige Plattformen Java Basics - Anfänger-Themen 5
G Zufällige Zahlen Java Basics - Anfänger-Themen 13
S Zufällige Farbe Java Basics - Anfänger-Themen 5
G zufällige zahlen von x bis y generieren Java Basics - Anfänger-Themen 5
H Aus 5 Zahlen eine zufällige Kombination erzeugen,ohne doppel Java Basics - Anfänger-Themen 2
B Memory - Zufällige Anordnung von Buchstabenpaaren Java Basics - Anfänger-Themen 8
G Zufällige Buchstaben in char-Array Java Basics - Anfänger-Themen 9
M Zufällige Zeile aus einer Datei lesen Java Basics - Anfänger-Themen 2
P Auswahl bei einem Videoverleih limitieren Java Basics - Anfänger-Themen 4
J Objekt bei Auswahl in jList ändern Java Basics - Anfänger-Themen 6
D Auswahl und Ausgabe erstes Programm Java Basics - Anfänger-Themen 8
Moritz1508 Variablen Erstellung eines simplen Taschenrechners mit +/- - Auswahl Java Basics - Anfänger-Themen 2
M Erste Schritte Auswahl in einer JList Java Basics - Anfänger-Themen 2
X Nach switch case weiter mit Auswahl Java Basics - Anfänger-Themen 7
A Grundrechenarten; Aufforderung zur Bestätigung oder Auswahl Java Basics - Anfänger-Themen 25
das_leon if als Auswahl (Anfänger) Java Basics - Anfänger-Themen 1
L Speicherort auswahl Java Basics - Anfänger-Themen 4
M JComboBox Auswahl Java Basics - Anfänger-Themen 10
J JComboBox - Auswahl auslesen Java Basics - Anfänger-Themen 2
P Klassen Mehrseitige Auswahl Java Basics - Anfänger-Themen 6
N Auswahl von Arrays durch Stringeingabe Java Basics - Anfänger-Themen 20
K Auswahl der Grafikbibliothek Java Basics - Anfänger-Themen 9
JAVAnnik JList Auswahl Java Basics - Anfänger-Themen 2
D Erste Schritte Auswahl der richtigen tools Java Basics - Anfänger-Themen 7
R Auf auswahl in ner JComboBox reagieren Java Basics - Anfänger-Themen 3
J select-feld auswahl, jsp javascript Java Basics - Anfänger-Themen 2
J Sortieren nach Auswahl Java Basics - Anfänger-Themen 3
J Keylistener aber wie jTextField auswahl? Java Basics - Anfänger-Themen 3
S FileFilter je nach RadioButton-Auswahl Java Basics - Anfänger-Themen 4
L Auswahl auf welche Art gespeichert werden soll Java Basics - Anfänger-Themen 6
J Taschenrechner Combobox Reaktion auf Auswahl Java Basics - Anfänger-Themen 2
E Combobox Auswahl überprüfen Java Basics - Anfänger-Themen 7
G Befehl für Ende bei Switch-Auswahl Java Basics - Anfänger-Themen 11
C Bilder Vorschau und Auswahl Java Basics - Anfänger-Themen 4
X JFileChooser Auswahl Java Basics - Anfänger-Themen 4
X Auswahl durch Eingabe von Buchstaben - aber wie? Java Basics - Anfänger-Themen 2
E auswahl von dateien Java Basics - Anfänger-Themen 2
G Auswahl eines Arbeitsverzeichnisses Java Basics - Anfänger-Themen 7
V Tastatur Abfrage im Lisener für eine Auswahl üder Textfeld Java Basics - Anfänger-Themen 8
D Pfad-Auswahl mit dem JFileChooser Java Basics - Anfänger-Themen 8
I Editor auswahl Java Basics - Anfänger-Themen 6
G Auswahl anhand Wahrscheinlichkeiten Java Basics - Anfänger-Themen 5
J dynamische Auswahl einer überladenen Methode Java Basics - Anfänger-Themen 5
R Zweiseitige Auswahl Java Basics - Anfänger-Themen 16
B Auswahl mit switch ? Java Basics - Anfänger-Themen 6
G Schrift-Auswahl-Dialog? Java Basics - Anfänger-Themen 6
P Auswahl von JComboBox abfangen Java Basics - Anfänger-Themen 3
G Auswahl:in File schreiben, oder System.out.print Java Basics - Anfänger-Themen 4
C Auswahl problem Java Basics - Anfänger-Themen 5
W JComboBox- Auswahl schließt komplettes Fenster Java Basics - Anfänger-Themen 10
G Auswahl in DropDown feldern in JSP seiten als Action Aufruf Java Basics - Anfänger-Themen 2
G Filechooser ohne Auswahl für Dateityp Java Basics - Anfänger-Themen 2
D Über Button abhängig von Auswahl 2 versch. Fenster öffnen Java Basics - Anfänger-Themen 2
A Löschen von Leerzeichen in einem char array ohne methoden Java Basics - Anfänger-Themen 6
T Methode schreiben, die einem Array ein Stringelement hinzufügt, wenn dieses noch nicht enthalten ist. Java Basics - Anfänger-Themen 6
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
R Mehrere Buchstaben aus einem String entfernen Java Basics - Anfänger-Themen 1
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
H Minimum in einem Array bestimmen Java Basics - Anfänger-Themen 7
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
B Quicksort in Verbindung mit einem Projekt Java Basics - Anfänger-Themen 1
P Ein Objekt nach einem String durchsuchen? Java Basics - Anfänger-Themen 7
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
O Java Weinachtsbaum in einem Bilderramen Java Basics - Anfänger-Themen 5
C Größte Zahl aus einem Array ermitteln(als statische Methode) Java Basics - Anfänger-Themen 31
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
Y Knoten an einem gegebenen Index aus einer Liste entfernen. Java Basics - Anfänger-Themen 6
G Methoden Methode die aus einem Array ein Index ausgibt? Java Basics - Anfänger-Themen 2
J Verschieben von Buchstaben in einem String um vorgegebene Anzahl von Zeichen innerhalb eines weiteren String Java Basics - Anfänger-Themen 12
Kingamadeus2000 Anzahl der Ziffern der kürzesten Zahl aus einem zurückliefern Java Basics - Anfänger-Themen 1
U Muster in einem Array erkennen Java Basics - Anfänger-Themen 8
Y Wie greift man auf die Knoten in einem Binärbaum zu? Java Basics - Anfänger-Themen 5
rafi072001 Lesen aus einem Excel File Java Basics - Anfänger-Themen 10
Y Wie kann man überprüfen, ob bei einem Print Befehl tatsächlich etwas geprintet wurde? Java Basics - Anfänger-Themen 4
J Lösungen zu einem Lückentext finden Java Basics - Anfänger-Themen 0
Z Char Array an zufälligen stellen mit einem "x" füllen. Java Basics - Anfänger-Themen 4
L Alle Ziele in einem Raster abknallen Java Basics - Anfänger-Themen 17
T Auf einem Schachbrett bewegen programmieren Java Basics - Anfänger-Themen 2
F JMenuItem Kann nicht nach einem String benannt werden... Java Basics - Anfänger-Themen 11
H 3 Comparatoren zu einem zusammenfassen - Chaining... Java Basics - Anfänger-Themen 15

Ähnliche Java Themen

Anzeige

Neue Themen


Oben