Zufällige Auswahl aus einem angelegten Array?

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:
[CODE lang="java" title="Textadventure" highlight="56"]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;
}
}
}
}
[/CODE]
 
K

kneitzel

Gast
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", ....
 
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:

[CODE lang="java" title="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;
}
}

}
}
}
[/CODE]
 
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:

[CODE lang="java" title="Klasse für den Anfangsbereich" highlight="33-39"]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;
}
}
}
}

}
[/CODE]
 

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").
 
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
 
K

kneitzel

Gast
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.
 
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 Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
J Zufällige Spielerreihenfolge Java Basics - Anfänger-Themen 6
S Zufällige ungerade Zeile aus Text-Datei lesen Java Basics - Anfänger-Themen 5
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
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
O Warum ist die Auswahl falsch? Java Basics - Anfänger-Themen 4
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
K Mehrere Werte in einem Switch Case parallel überprüfen Java Basics - Anfänger-Themen 3
Zrebna Fragen zu einem Klassendiagramm Java Basics - Anfänger-Themen 8
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
F 2x 16bit Werte zu einem 32bit und dann splitten mit 0xb Java Basics - Anfänger-Themen 1
J JSON mit einem JPanel Java Basics - Anfänger-Themen 3
F Einem GIT repository ein Projekt hinzufügen Java Basics - Anfänger-Themen 1
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
J Auf einem JLabel Linien Malen Java Basics - Anfänger-Themen 1
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
XWing Randomizer mit einem String Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
Kumora ArrayIndexOutOfBoundsException bei einem Sortierverfahren Java Basics - Anfänger-Themen 2
I Viereck / Rechteck Prüfung innerhalb einem bestimmten Bereich Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben