Hallo Liebe Community,
es tut mir leid, wenn dies eine dumme Frage ist - aber ich komme wieder einmal nicht so weiter wie ich das gerne hätte, trotz ausgiebiger Recherche.
Im Rahmen eines simplen Ratespiels, möchte ich von der Klasse Ratespiel.java - die Anzahl der Spieler auslesen, die in Spieler.java erstellt worden sind.
Ich habe zwar eine funktionierende Lösung gefunden und habe diese markiert, doch mir erscheint die Lösung "nicht wirklich schön". Meine ungeliebte Lösung habe ich hervorgehoben:
[CODE lang="java" title="Spieler.java" highlight="5,18,28,29,30"]import java.util.*;
public class Spieler {
public static int SpielerAnzahl;
public static void SpielerAnlegen() {
//Einlesen der Spielerzahl
Scanner anzahlSpieler = new Scanner(System.in);
System.out.println("Wie viele Spieler seid Ihr? Bitte gebt die Zahl der Mitspieler ein!");
int anzahlSpielerAusUserInput = anzahlSpieler.nextInt(); //Schreibe userinput in variable anzahlSpielerAusUserInput
System.out.println("Spiel mit " + anzahlSpielerAusUserInput + " Spielern(n) wird erstellt!");
//Erstelle ArrayListe mit eingegebenen Spielern und gib jedem Spieler eine Nummer angefangen bei 1 & endend bei Spielernr. aus UserInput
ArrayList<Integer> SpielerArray = new ArrayList<Integer>();
for (int i=1; i<=anzahlSpielerAusUserInput; i++) {
SpielerArray.add(i);
SpielerAnzahl++;
}
//Ausgabe der erstellten Spieler aus der ArrayListe mit dem ListIterator (mehr zur Überprüfung, das auch alle Spieler korrekt erstellt wurden sind)
ListIterator<Integer> li = SpielerArray.listIterator();
while(li.hasNext()) {
System.out.println("Spieler Nummer " + li.next() + " erfolgreich erstellt.");
}
}
public static int getSpielerAnzahl() {
return SpielerAnzahl;
}
}[/CODE]
[CODE lang="java" title="Ratespiel.java" highlight="24"]import java.util.*;
public class Ratespiel {
public void starteSpiel() {
//Spieler anlegen
Spieler spieler = new Spieler();
spieler.SpielerAnlegen();
//Formatierung
System.out.println();
System.out.println("Spiel startet jetzt!");
System.out.println();
//Zufallszahl Intervall festlegen
int max = 10;
int min = 1;
int range = max - min + 1;
//Zufallszahl erzeugen im oben festgelegten Intervall
int rand = 0;
for (int i = 0; i < 10; i++) {
rand = (int)(Math.random()*range) + min;
}
System.out.println("Alle " + Spieler.getSpielerAnzahl() + " Spieler suchen sich jetzt eine Zahl aus:");
}
}[/CODE]
Nur der Vollständigkeit halber noch der SpielStarter:
[CODE lang="java" title="SpielStarter.java"]public class SpielStarter {
public static void main(String[] main) {
Ratespiel ratespiel = new Ratespiel();
ratespiel.starteSpiel();
}
}[/CODE]
Ich hätte gerne die Lösung so umgesetzt, dass ich nicht nochmal unnötig in der for Schleife aus Zeile 18, in Spieler.java mitzählen muss.
Folgendes habe ich versucht (veränderte Zeilen hervorgehoben):
[CODE lang="java" title="Spieler.java" highlight="6,25"]import java.util.*;
public class Spieler {
public static int SpielerAnlegen() {
//Einlesen der Spielerzahl
Scanner anzahlSpieler = new Scanner(System.in);
System.out.println("Wie viele Spieler seid Ihr? Bitte gebt die Zahl der Mitspieler ein!");
int anzahlSpielerAusUserInput = anzahlSpieler.nextInt(); //Schreibe userinput in variable anzahlSpielerAusUserInput
System.out.println("Spiel mit " + anzahlSpielerAusUserInput + " Spielern(n) wird erstellt!");
//Erstelle ArrayListe mit eingegebenen Spielern und gib jedem Spieler eine Nummer angefangen bei 1 & endend bei Spielernr. aus UserInput
ArrayList<Integer> SpielerArray = new ArrayList<Integer>();
for (int i=1; i<=anzahlSpielerAusUserInput; i++) {
SpielerArray.add(i);
}
//Ausgabe der erstellten Spieler aus der ArrayListe mit dem ListIterator (mehr zur Überprüfung, das auch alle Spieler korrekt erstellt wurden sind)
ListIterator<Integer> li = SpielerArray.listIterator();
while(li.hasNext()) {
System.out.println("Spieler Nummer " + li.next() + " erfolgreich erstellt.");
}
return anzahlSpielerAusUserInput;
}
}[/CODE]
Sprich: Ich würde gerne die Methode "SpielerAnlegen" so nutzen, dass ich anschließend als Rückgabewert die Spieleranzahl ebenfalls mit-erhalte, am besten gleich aus der eh schon vorhandenen Variable anzahlSpielerAusUserInput, um diese an beliebiger Stelle in Ratespiel.java zu nutzen.
Leider weiß ich aber nicht wie ich dann auf den Rückgabewert aus Ratespiel.java aus zugreifen soll
Mit folgendem Code wird SpielerAnlegen komplett durchgelaufen und nicht nur der return Wert geliefert logischerweise:
Habe ich mich verrannt und kann man das so in der Weise gar nicht umsetzen?
Oder fehlt mir eine wichtige Grundlage um das so umsetzen zu können?
Über Hilfestellung, wie das richtig (und elegant) umzusetzen wäre, würde ich mich freuen 🤔
Vielen Dank!
Lg
es tut mir leid, wenn dies eine dumme Frage ist - aber ich komme wieder einmal nicht so weiter wie ich das gerne hätte, trotz ausgiebiger Recherche.
Im Rahmen eines simplen Ratespiels, möchte ich von der Klasse Ratespiel.java - die Anzahl der Spieler auslesen, die in Spieler.java erstellt worden sind.
Ich habe zwar eine funktionierende Lösung gefunden und habe diese markiert, doch mir erscheint die Lösung "nicht wirklich schön". Meine ungeliebte Lösung habe ich hervorgehoben:
[CODE lang="java" title="Spieler.java" highlight="5,18,28,29,30"]import java.util.*;
public class Spieler {
public static int SpielerAnzahl;
public static void SpielerAnlegen() {
//Einlesen der Spielerzahl
Scanner anzahlSpieler = new Scanner(System.in);
System.out.println("Wie viele Spieler seid Ihr? Bitte gebt die Zahl der Mitspieler ein!");
int anzahlSpielerAusUserInput = anzahlSpieler.nextInt(); //Schreibe userinput in variable anzahlSpielerAusUserInput
System.out.println("Spiel mit " + anzahlSpielerAusUserInput + " Spielern(n) wird erstellt!");
//Erstelle ArrayListe mit eingegebenen Spielern und gib jedem Spieler eine Nummer angefangen bei 1 & endend bei Spielernr. aus UserInput
ArrayList<Integer> SpielerArray = new ArrayList<Integer>();
for (int i=1; i<=anzahlSpielerAusUserInput; i++) {
SpielerArray.add(i);
SpielerAnzahl++;
}
//Ausgabe der erstellten Spieler aus der ArrayListe mit dem ListIterator (mehr zur Überprüfung, das auch alle Spieler korrekt erstellt wurden sind)
ListIterator<Integer> li = SpielerArray.listIterator();
while(li.hasNext()) {
System.out.println("Spieler Nummer " + li.next() + " erfolgreich erstellt.");
}
}
public static int getSpielerAnzahl() {
return SpielerAnzahl;
}
}[/CODE]
[CODE lang="java" title="Ratespiel.java" highlight="24"]import java.util.*;
public class Ratespiel {
public void starteSpiel() {
//Spieler anlegen
Spieler spieler = new Spieler();
spieler.SpielerAnlegen();
//Formatierung
System.out.println();
System.out.println("Spiel startet jetzt!");
System.out.println();
//Zufallszahl Intervall festlegen
int max = 10;
int min = 1;
int range = max - min + 1;
//Zufallszahl erzeugen im oben festgelegten Intervall
int rand = 0;
for (int i = 0; i < 10; i++) {
rand = (int)(Math.random()*range) + min;
}
System.out.println("Alle " + Spieler.getSpielerAnzahl() + " Spieler suchen sich jetzt eine Zahl aus:");
}
}[/CODE]
Nur der Vollständigkeit halber noch der SpielStarter:
[CODE lang="java" title="SpielStarter.java"]public class SpielStarter {
public static void main(String[] main) {
Ratespiel ratespiel = new Ratespiel();
ratespiel.starteSpiel();
}
}[/CODE]
Ich hätte gerne die Lösung so umgesetzt, dass ich nicht nochmal unnötig in der for Schleife aus Zeile 18, in Spieler.java mitzählen muss.
Folgendes habe ich versucht (veränderte Zeilen hervorgehoben):
[CODE lang="java" title="Spieler.java" highlight="6,25"]import java.util.*;
public class Spieler {
public static int SpielerAnlegen() {
//Einlesen der Spielerzahl
Scanner anzahlSpieler = new Scanner(System.in);
System.out.println("Wie viele Spieler seid Ihr? Bitte gebt die Zahl der Mitspieler ein!");
int anzahlSpielerAusUserInput = anzahlSpieler.nextInt(); //Schreibe userinput in variable anzahlSpielerAusUserInput
System.out.println("Spiel mit " + anzahlSpielerAusUserInput + " Spielern(n) wird erstellt!");
//Erstelle ArrayListe mit eingegebenen Spielern und gib jedem Spieler eine Nummer angefangen bei 1 & endend bei Spielernr. aus UserInput
ArrayList<Integer> SpielerArray = new ArrayList<Integer>();
for (int i=1; i<=anzahlSpielerAusUserInput; i++) {
SpielerArray.add(i);
}
//Ausgabe der erstellten Spieler aus der ArrayListe mit dem ListIterator (mehr zur Überprüfung, das auch alle Spieler korrekt erstellt wurden sind)
ListIterator<Integer> li = SpielerArray.listIterator();
while(li.hasNext()) {
System.out.println("Spieler Nummer " + li.next() + " erfolgreich erstellt.");
}
return anzahlSpielerAusUserInput;
}
}[/CODE]
Sprich: Ich würde gerne die Methode "SpielerAnlegen" so nutzen, dass ich anschließend als Rückgabewert die Spieleranzahl ebenfalls mit-erhalte, am besten gleich aus der eh schon vorhandenen Variable anzahlSpielerAusUserInput, um diese an beliebiger Stelle in Ratespiel.java zu nutzen.
Leider weiß ich aber nicht wie ich dann auf den Rückgabewert aus Ratespiel.java aus zugreifen soll
Mit folgendem Code wird SpielerAnlegen komplett durchgelaufen und nicht nur der return Wert geliefert logischerweise:
Java:
System.out.println("Alle " + Spieler.SpielerAnlegen() + " Spieler suchen sich jetzt eine Zahl aus:");
Habe ich mich verrannt und kann man das so in der Weise gar nicht umsetzen?
Oder fehlt mir eine wichtige Grundlage um das so umsetzen zu können?
Über Hilfestellung, wie das richtig (und elegant) umzusetzen wäre, würde ich mich freuen 🤔
Vielen Dank!
Lg