Aloha alle zusammen. Ich gurke schon seit stunden im Indernet umher, doch finde keine Richtige Lösung für mein Problem (oder bin grad einfach nur zu blöd dafür )
Also (wundert euch nicht, wegen mangel an kreativität ist es Mensch vs. Monster :D) ich raffs grade nicht, wie ich aus der main eine nicht-statische methode aufrufen kann.
import java.util.Scanner;
import java.util.Random;
public class Kampf
{
public static void main(String[] args)
{
kampf();
}
Random r = new Random();
Scanner scanner = new Scanner(System.in);
int angriffMensch, angriffMonster;
String wahl;
public void Mensch()
{
angriffMensch = r.nextInt();
}
public void Monster()
{
angriffMonster = r.nextInt();
}
void kampf()
{
System.out.print("Mensch oder Monster? ");
wahl = scanner.next();
if(wahl == "Mensch")
{
if(angriffMensch > angriffMonster)
{
System.out.println("Du hast gewonnen!");
}else
{
System.out.println("Monster hat gewonnen!");
}
}else
{
if(angriffMonster > angriffMensch)
{
System.out.println("Du hast gewonnen!");
}else
{
System.out.println("Mensch hat gewonnen!");
}
}
}
}
Ich wäre euch sehr dankbar wenn mir das jemand erklären könnte
public static void main(String[] args){
Kampf kamp = new Kampf();
kamp.kampf();
}
D.h. du legst einfach ein Objekt vom Typ Kampf an und dann kannst du darauf die Methode kampf, oder Mensch oder Monster aufrufen.
Ein Hinweis, schreib alle Methoden klein zum einen ist das so laut den Codingconventions von Sun “Vorgeschrieben” aber dann ist es auch einheitlich, weil kampf schreibst du klein und Mensch/Monster schreibst du groß.
Wenn ich es ausführe, kommt meine Auswahl, und wenn ich „Mensch“ eingebe, gibt es „Mensch hat gewonnen!“ aus. Aber das dürfe laut dem iF garnicht vorkommen denn:
So, da es mir den Code irgendwie zerrissen hat, hab ich mich mal registriert.
So sollte es eig. aussehen:
Ah, mist. Ich hatte es fast richtig
Kampf kampf = new Kampf();
Kampf.kampf();
Da lag mein Fehler
Aber jetzt ein anderes Problem:
Wenn ich es ausführe, kommt meine Auswahl, und wenn ich “Mensch” eingebe, gibt es “Mensch hat gewonnen!” aus. Aber das dürfe laut dem iF garnicht vorkommen denn:
Strings muss man mit der equals Methode vergleichen (Vergleich von Werten). Mit dem == vergleicht man nämlich nicht den String also die eigentliche Zeichenkette, sondern die Objektreferenzen (und die sind dann immer unterschiedlich).
Ich werds mir hier glaub ich noch kuschelig machen. Hier wird einem schnell und nett geholfen (nicht so wie bei anderen Boards hust) thumb up
€dit:
Und hier kommt auch gleich meine nächste Frage:
Wenn ich Mensch eingebe kommt jedes mal „Monster hat gewonnen“. Wenn ich Monster eingebe „Mensch hat gewonnen“.
Wenn ich nach den if-Verzweigungen noch ein System.out.println(angriffMensch + "," + angriffMonster);
dranhänge, kommt „0,0“ raus, also sind beide Null.
Es gibt viele Möglichkeiten ^^. Man könnte die Initialisierung der Werte z.B. im Konstruktor vornehmen also dort die Methoden aufrufen (meine Empfehlung) oder die Werte direkt initialisieren. Man könnte auch die angriffMensch und angriffMonster Werte direkt bei ihrer Deklaration durch statischen Code initialisieren (nicht empfohlen).
Hier meine Lösung mit dem Konstruktor
{
public static void main(String[] args)
{
kampf();
}
Random r = new Random();
Scanner scanner = new Scanner(System.in);
int angriffMensch, angriffMonster;
String wahl;
public Kampf()
{
monster();
mensch();
}
...
...```
Zusätzlich könnte man noch in der kampf() Methode die Werte auf 0 prüfen und gegebenenfalls gleich initialisieren (was bei der Konstruktorlösung aber nur redundant wäre)...
Du rufst halt im Konstruktor der Klasse die Methoden auf. Beim Erzeugen des Objektes der Klasse (in der Main Methode) wird dann automatisch der Konstruktor aufgerufen und somit die Variablen angriffMensch, angriffMonster mit Werten belegt.