ArrayList<KartenDeck> list =newArrayList<>();// dann kann man Objekte vom Typ KartenDeck hinzufügen:
list.add(newKartenDeck(...));// dabei ... durch Parameter des betreffenden Konstruktors ersetzenserve1c(list);
Wenn ich das so mache wird mir "com.company.KartenDeck@e65a89" auf der Konsole ausgegeben, anstatt eines Wertes aus der Arraylist Kdeck. Kann das daran liegen, dass ich die Arraylist in der Klasse KartenDeck in der Main() Methode geschrieben habe?
ich probiere mir java selbst beizubringen, da es mir in der Schule zu langsam geht und zu sowas habe ich einfach kein tutorial gefungen? (Trauriges Smiley)
@Nesselbrand Die gute Nachricht, du bist hier angemeldet und dir stehen alle Wege offen. Bei uns sagt man, helfe dir, dann hilft dir der Gott, drum spare die Zeit an traurigen Geschichten und lese lieber ein gescheites Buch zum Thema, dann bist du mir gleich viel sympathischer
Also ich bin eine Leseratte, bei mir geht es nur über Bücher in Begleitung von paar Videos oder Online-Tutorials.
Was ich dir als Anfänger empfehlen kann, ist das Buch Grundkurs Programmieren in Java Dazu begleitend paar Tutorials auf https://www.w3schools.com/java/default.asp , https://www.tutorialspoint.com/java/index.htm aber natürlich auch hier, die Admins/Besitzer vertreiben da ihr eigenes Lehrstoff, melde dich einfach bei @Flown , @mrBrown, @Matze da wird dir geholfen. Gleich zu Beginn, die meisten YouTube-Videos sind einfach nur schlecht, da gibt es kaum Brauchbares Material.
Lesen, Nachmachen, hier Fragen stellen, noch mal Lesen. Viel Erfolg!
Die Methode getTheBiggestBanana(List<Banana> list) liefert im Grunde eine Banana, also muss die Methode, die es aufruft, eine Banana empfangen können. Ich verstehe nicht ganz, was du willst..
Dies ist eine andere Klasse. Ich bekomme allerdings eine Fehlermeldung, da ich in die Klamer hinter .serve1c nichts reingeschrieben habe. Was da stehen soll, ist meine Frage.
neuesSpielbutton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
Spielzüge.serve1c(Arraylist<KartenDeck> Kdeck); // Das Funktioniert nicht
}
});
Da steht dann als Fehlermeldung :
-Cannot resolve symbol Arraylist
-Bei KartenDeck steht "Exression expected"
-bei Kdeck wieder Canot resolve symbol Kdeck
Wir stochern gerade in Code-Schnipsel rum und ich habe eine leise Vorahnung, dass dies kaum Besserung bringt.
Was halltest du davon, dein ganzen Code zu veröffentlichen, bitte in Code-Tags, damit man mehr Überblick über das Problem bekommt und du am Ende schneller ans Ziel kommst? Und nein, ich will nicht an dein Code ran, aber meine Zeit richtig einteilen.
package com.company;
public class Main
{
public static int balance;
public static int wbalance;
public Main()
{
balance = 0;
wbalance = 0;
}
public static void main(String[] args)
{
MainGui.main(args);
KartenDeck.main(args);
Spielzüge.main(args);
}
}
package com.company;
import java.util.ArrayList;
public class Spielzüge
{
public Spielzüge()
{
}
public static void main(String[] args)
{
}
public static void serve1c(ArrayList<KartenDeck> Kdeck) // Erster Spielzug; Serve für den Croupier
{
int temp = Kdeck.size();
int temp2 = (int)(Math.random()) * temp;
System.out.println(Kdeck.get(temp2));
}
}
Ein Blackjack spiel.
In der Klasse kartendeck sind die karten aufgelistet. Diese sollen dann per Zufall ausgewählt werden und and den croupier und den spieler ausgeteilt werden. Danach sollen die karten aus der Liste gelöscht werden. Das ganze kann man resetten, da ich eine zweite liste, die Kdeck habe, in die nicht eingegriffen wird. Ich war dabei, dass ich ein element aus der liste entfernen kann, was nich tfunktioniert hat.
Also deine Klasse Kartendeck macht eigentlich nichts. Wenn Du es als Programm aufrufst, dann wird eine Liste erstellt und gefüllt, dann noch eine zweite Liste mit den Elementen der ersten Liste und dann war es das sofort, denn die Listen sind nur in lokalen Variablen und damit ein Fall für den Garbage Collector. So macht der Code also absolut keinen Sinn!
Dann macht ein ArrayList<KartenDeck> keinen Sinn, denn KartenDeck hat ja keinen Inhalt, so dass Instanzen nicht haben, was nicht Object auch hätte...
(int)(Math.random()) * temp; macht keinen Sinn - da kannst Du gleich 0 hin schreiben, denn Math.random() liefert eine Zahl zwischen 0 und 0.9999999.... Daraus ein int ist also immer 0. Und das mal temp bleibt 0. Evtl. willst Du ja die Klammer anders setzen: (int)(Math.random() * temp);
Du solltest Dich aus meiner Sicht mit Objektorientierter Entwicklung beschäftigen. Und am Anfang kannst Du davon ausgehen: Es gibt nur ein statisches Element und das ist genau EINE main Methode als Einstiegspunkt. Am Anfang mehr static zu machen ist in der Regel ein Fehler.
Also was Du machen musst, ist dir ein ordentliches Objektmodell überlegen.
Du hast ein Kartendeck? Was ist denn ein Kartendeck? Eine Sammlung von Karten? Also muss es da sowas geben wie:
Java:
publicclassCardDeck{privateList<Card> cards;publicCardDeck(){
cards =newArrayList<Card>();// Fill cards if you want to ...}}
Da hat das Kartendeck noch keine Funktionalität, aber dazu kommen wir später. Was ist denn eine Karte? Was zeichnet eine Karte aus? Eine Karte hat eine Farbe und einen Wert oder wie man das immer bezeichnen will. Also man hat dann sowas in der Art:
Natürlich kommt jede Klasse / Enum seine eigene Datei! Und ich habe vieles weggelassen (getter/setter (so notwendig und nur wenn notwendig. Getter bei Card würde ich sehen, aber keine Setter) / inhalt Konstruktor) ....
Dann kannst Du ein Verhalten definieren.
Du willst CardDeck evtl. so haben, dass Du neue Karten hinzufügen kannst, also z.B. eine add Methode.
Du willst eine zufällige Karte entnehmen? Oder Du willst mischen und dann eine Karte am Anfang ziehen/entfernen?
Das kommt dann als Methoden in die entsprechenden Klassen und damit kommt dann das Verhalten...
Das einfach einmal auf die Schnelle von meiner Seite ...
Bei dem Ansatz wäre das eine Möglichkeit. Evtl. will man bei allen Begriffe noch auf die englische Version wechseln ... Da ist mir noch etwas MischMasch rein geraten beim tippen hier im Forum Editor
Wenn Du es auch mit den beiden Enumerations machen solltest, dann kannst Du die entsprechenden Karten relativ einfach generieren, indem du 2 Schleifen verschachtelst, in denen Du jeweils über alle Werte einer Enumeration gehst. Das könnte dann im Konstruktor z.B. so aussehen:
Nein, eine Karte kennt nur sich selbst. Du hast ja ein Kartendeck mit allen Karten. Das Kartendeck muss alle Karten des Decks kennen. Daher war da eine List<Card> als Instanzvariable enthalten.
Die Schleifen wären also Bestandteil des Konstruktors von Deinem Kartendeck.
Bei mir wird dann eine Fehlermeldung bei CarDeck.getCards() ausgegeben. (Non static .. cannot be reverenced from a static context)
Wie kann ich das beheben?
CardDeck ist erst einmal nur ein Bauplan. Von diesem Bauplan kannst du mehrere Instanzen erzeugen, aber natürlich kannst Du damit selbst so noch nichts anfangen. Also wie bei einem Haus: Wenn Du erst einen Bauplan hast, dann kannst Du Dich noch nicht im Wohnzimmer an den Tisch setzen!
Also musst Du Dir überlegen, wo und wie Du nun reelle Kartendecks haben möchtest. Wie bei einem Haus brauchst du da sowas wie ein Bauplatz. Also könntest Du z.B. in einer anderen Klasse eine Instanzvariable einbauen und so. Und dann hätte diese Instanz eine Instanz von Kartendeck, auf der dann so Methoden aufgerufen werden können.
Was du aber auch bedenken solltest: Wenn Du Auto fährst, dann sagst Du auch nicht getMotor() um dann da direkt am Motor etwas einzustellen. Statt dessen nutzt Du Elemente, die das Auto speziell für Dich zur Verfügung stellt. So sollte es auch hier sein. Das Du da eine List<Card> hast, geht niemanden etwas an. Statt dessen bietest Du nur an, was benötigt wird, also z.B. Karte ziehen oder so.