static non-static

  • Themenstarter NormanPatrickBenner
  • Beginndatum
Thallius

Thallius

Top Contributor
Es ist Teil des Stapels aber es erweitert den Stapel doch nicht durch irgendwelche Funktionen
 
T

temi

Top Contributor
Aber Blatt ist doch ein Stapel?

Wie sieht denn Stapel aus?

Edit:

Ich bin jetzt nicht 100% auf dem Laufenden, was Begriffe aus dem Kartenspiel angeht, aber ich würde mal raten:

Ein Stapel ist eine Art Kartensammlung, die erst mal leer ist und auf die man Karten legen und wieder entnehmen kann?

Das Blatt wäre insofern ein Stapel, der bereits mit allen Karten gefüllt (gemischt) ist, die man dann entnehmen kann?

Ich kenne aber Blatt ("Was hast du für ein Blatt?") auch als Begriff für die Karten, die man auf der Hand hat (was aber dann auch "Hand" sein könnte).

Es ist schon sehr wichtig, dass man vorher die Begriffe klärt, damit wir sie nicht unterschiedlich verwenden.
 
mihe7

mihe7

Top Contributor
Die Karten werden auch alle erzeugt. (Das habe ich überprüft und mir alle ausdrucken lassen, siehe auskommentiete Zeile)
In der Klasse Konfiguration gibt es den Konstruktor Konfiguration, der mir alles für das Spiel notwendige erzeugt.
Da wird aber Blatt nicht hinübergeben. Alle Einträge von Blatt sind hier leer.

Hmmm?

Wo liegt dass denn jetzt dran?
Das liegt daran, dass Du Batt von Stapel ableitest, in Blatt aber erneut ein Array karten[] deklarierst. Das Array karten[] in Klasse Blatt ist somit ein anderes als das Array karten in Klasse Stapel. Du könntest das Array in Blatt genauso gut xyz nennen, das hätte den gleichen Effekt, wäre nur deutlicher :)

Mal in kurz:
Java:
public class Basis {
    private int x;

    public void zeige() {
        System.out.println(x); // zeigt den Wert des in Basis deklarierten x
    }   
}

public class Erweitert extends Basis {
    private int x;

    public Erweitert() {
        this.x = 5;
    }
}

Wenn Du jetzt
Java:
Erweitert e = new Erweitert();
e.zeige();
aufrufst, dann wird dir 0 ausgegeben; der Grund ist oben im Kommentar angegeben.

So etwas löst man dadurch, dass man entsprechende Konstruktoren oder Methoden verwenden:
Java:
public class Basis {
    private int x;

    public Basis() {}
    public Basis(int x) { this.x = x; }
    protected final void setX(int x) { this.x = x; }

    public void zeige() {
        System.out.println(x); // zeigt den Wert des in Basis deklarierten x
    }   
}

public class Erweitert extends Basis {
    public Erweitert() {} // ruft implizit super() auf
    public Erweitert(int x) { super(x); } // setzt x über den Konstruktor der Basisklasse

    public void reset() { setX(4); } // setzt x über die Methode setX
}

Jetzt kannst Du z. B. folgendes machen
Java:
Erweitert e1 = new Erweitert();
Erweitert e2 = new Erweitert(100);
e1.zeige(); // liefert 0
e1.reset();
e1.zeige(); // liefert 4
e2.zeige(); // liefert 100

Nachtrag: das war jetzt nur die technische Erklärung. Die Sinnhaftigkeit, Blatt von Stapel abzuleiten, ist ein ganz anderes Thema.
 
X

Xyz1

Gast
Die Begriffe sind nicht ganz eindeutig.

Deck = Kartendeck = alle Karten
Stack = Kartenstapel (= Kartendeck) = alle Karten, eine Teilmenge oder eine Hand...
Hand = alle Einzelkarten die ein Spieler aktuell oder anfangs auf der Hand hält
Karte = eine Einzelkarte

andere Begriffe hängen vom Kartenspiel ab

Und ein Blatt bezeichnet meist eine anfängliche Hand
 
Zuletzt bearbeitet von einem Moderator:
W

White_Fox

Top Contributor
Ich schlage einfach mal folgende Struktur vor:
Java:
public class Player{
    private final String name;
    private ArrayList<Card> cards;
    
    Player(String name){
        this.name = name;
    }
    public String getName(){return name;}
    
    void setHand(ArrayList<Card> hand){
        cards = hand;
    }
}

public enum Number{ SIEBEN, ACHT, NEUN, ZEHN, BUBE, ...}
public enum Color{HERZ, KARO, PIK, KREUZ}

public class Card{
    public final Number number; //Achtung, Ausnahme, Instanzvariablen sollten normalerweise privat sein.
    public final Color color;
    Card(Number number, Color color){
        this.number = number;
        this.color = color;
    }
}

public class Game{
    ArrayList<Player> players;
    ArrayList<Card> cardsdeck;
    private Player activePlayer;
    
    public Game(int hand, String... playernames){
        //Kartendeck generieren
        cardsdeck = new ArrayList<>();
        for(Color color : Color.values()){
            for(Number number : Number.values()){
                cardsdeck.add(new Card(number, color));
            }
        }
        
        //Spieler generieren
        players = new ArrayList<>();
        for(String playername : playernames){
            players.add(new Player(playername));
        }
        
        //Allen Spielern ein Blatt in die Hand geben
        for(Player player : players){
            ArrayList<Card> newhand = new ArrayList<>();
            for(int i = 0; i < hand; i++){
                int cardindex;
                //cardindex einen zufälligen Wert zuweisen, der zwischen einschl. 0 und  ausschl. cardsdeck.size() liegt
                newhand.add(cardsdeck.remove(cardindex));
            }
            player.setHand(newhand);
        }
    }
    
    //Einige Beispielmethoden, die für das Spiel benötigt werden,
    //evt. müssen dazu noch ein paar Instanzvariablen implementiert werden
    
    //Liefert den Spieler, der gerade am Zug ist
    public Player getActivePlayer(){
        return activePlayer;
    }
    
    //Beendet die Runde des jeweiligen Spielers und markiert den nächsten als activePlayer
    public void endTurn(){
        //...
    }
    
    //...
}

Das ist zwar nicht ganz so kompliziert mit statischen Methoden, und es sind auch weniger Klassen. Dafür bietet dieser Ansatz ein paar andere Vorteile:
  • Einfachheit ist immer erstmal gut, kompliziert wird es im weiteren Verlauf von ganz alleine. Versprochen. ;)
  • Du kannst dich gleich noch mit abstrakten Klassen beschäftigen: Mache aus Game eine abstrakte Klasse, und implementiere dort nur Methoden, die du für alle Spiele brauchst. Leite verschieden Klassen ab, und implementiere in jeder dieser abgeleiteten Klassen andere Spielregeln.
  • Du kannst beliebig viele Spiele parallel spielen: einfach ein neues Game instanziieren.
Wie gesagt, ist nur ein Vorschlag, aber vielleicht gibt dir das eine Inspiration.
 
NormanPatrickBenner

NormanPatrickBenner

Mitglied
Meine main Klasse hat nur 4 Zeilen oder so, ist also schon sehr kurz.

Für Basis einen eigenen Konstruktor zu schreiben war ein Vorschlag von hier und finde ich mittlerweile auch ganz gut. Weil dann beim Aufruf vom Stapel blatt das gesamte Blatt direkt erzeugt wird. Das finde ich eleganter als die Lösung über ein Spezialfall von Stapel.
Im Konfigurator von Stapel holt sich dieser dann die Karten von Blatt "immer von oben" wie im echten Spiel.
OK, wenn Blatt keine ERWEITERUNG von Stapel ist und ich somit kein extends benötige , woher weiß der Konstruktor überhaupt, dass Blatt ein besonderer Stapel ist.
karten[] habe ich in Stapel jetzt auf protected geändert und und kann diese jetzt übernehmen. Wobei dass auch anders geklappt hatte.

Aber Danke!
Vielleicht hängt hier ja doch irgendwie mein Indexproblem, aber ich bin schon ziemlich weit.

Ich will dass das Programm läuft und auch den allgemeinen Ansprüchen genügt, aber 99% reichen, das schaut sich außer euch und dem Übungsleiter eh nie mehr jemand an.
Ob jetzt Deck Deck ist usw. ist mir irgendwann auch egal. Aber der Hinweis stimmt natürlich.

Danke nochmals, ich finde das eine sehr angenehme Diskussion und gute Hilfen.

Grüß
Norman
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
OK, wenn Blatt keine ERWEITERUNG von Stapel ist und ich somit kein extends benötige , woher weiß der Konstruktor überhaupt, dass Blatt ein besonderer Stapel ist.
Was muss der Konstruktor denn da wissen?

Ich würde Blatt und Stapel einfach trennen (wobei ja erstmal noch zu klären wäre, was Blatt sein soll), und zwischen den beiden keine Ist-Ein-Beziehubg aufbauen. Die führt nur zu Problemen (eins davon hast du ja schon gemerkt und mit protected „behoben“).
 
NormanPatrickBenner

NormanPatrickBenner

Mitglied
Ok,

ich hätte zum Speicher eine stack Liste nehmen sollen, aber gefordert war das Array,

Vorab: Ich vermute stark, dass das Problem bei "anzahl" liegt. Das ist die Variable, die anzeigt, welches die oberste Karte eines Stapels ist.

JEtzt habe ich ein anderes Problem.
Im Konfigurator werden die Spieler Konfigurationen aufgerufen, die wiederum die Stapelkonfiguratoren aufrufen die wiederum die Kartenkonfigurationen aufrufen.
Spieler [0] wir erstellt und bekommt die Variable "anzahlStartHandkarten". Mit der kann er selber nichts anfangen und reicht die weiter an den Stapel Konfigurator.

Code:
public Spieler(int anzahlStarthandKarten, Stapel blatt) {   
        // die Variable anzahlStarthandKarten wird direkt an den Stapelkonfigurator weitergeegeben.
        this.handkarten = new Stapel(anzahlStarthandKarten);
        System.out.println("Name des  Spielers?");
        Scanner Eingabe = new Scanner (System.in);
        name =  Eingabe.nextLine();
        //Jetzt werden die Handstapel gefüllt, dass kann der Stapelkonfigurator nicht machen, da nicht jeder Stapel gefüllt sein muss.
        handkarten.stapelFüllen(blatt);
    }

JEtzt werden die also gefüllt.
Jetzt hat der Stapel in der Variable die richtige Zahl ABER mit einer sysout-Anweisung , in der ich mir die Anzahl ausdrucken lasse , was auch funktioniert, gibt es hier den ersten Fehler
12413


Javascript:
    public void stapelFüllen(Stapel blatt) {
        //Hier kommt es zum ersten Fehler "java.lang.NullPointerException
        // Ich habe nachgeprüft, anzahl ist hier auf jeden Fall immer richtig!
        for (int i = 0; i < anzahl; i++) {
            System.out.println("Index i in stapelfüllen " +i );
            //Hier kann er Karte [0] nicht finden, (habe ich mir auch schonmal ausgeben lassen)
            //obwohl er SICHER 0 als index verwendet hat, das habe ich MEHRMALS überprüft!!! siehe oben!!
            karten[i].zeigen();
        }
    }

komischerweise macht er manchmal weiter, bis er hier landet:

Javascript:
public Karte getObersteKarte() {
        //Hier fängt er IMMER mit dem richtigen Index an.
        Karte obersteKarte = karten[(anzahl - 1)];
        System.out.println("hinter oberste KArte");
        System.out.println(obersteKarte.getFarbe());
        //Die nächse Zeile ist eigentlich überflüssig, da ich nur auf den Index verweise, wenn
        // oberste KArte haben will, aber ich will sie löschen. Das war zunächst meine Vermutung für Abstürze,
        // aber auch mit rauskommentieren ändert sicht nichts, scheint also kein großes Problem zu sein.
        karten[anzahl - 1] = null;
        System.out.println();
        //In der nächsten Zeile bleibt er häufig hängen?!?!?!
        anzahl = (anzahl - 1);
        return obersteKarte;
    }

Manchmal geht es aber sogar dann weiter, (das Programm hat sogar schon für zwei bis sechs Spieler alle Karten ausgeteilt, den Ablage und Nachziehstapel erstellt. Aber spätestens, wenn die oberste Karte vom Ablagestapel gezeigt werden soll, gibt es ein Problem mit anzahl.
anzahl ist der Verweis auf die oberste KArte.
Hier erscheint mir ein prinzipielles Problem.
Ich hoffe, ich habe es gut beschrieben.

Danke im Voraus.
 
NormanPatrickBenner

NormanPatrickBenner

Mitglied
Was muss der Konstruktor denn da wissen?

Ich würde Blatt und Stapel einfach trennen (wobei ja erstmal noch zu klären wäre, was Blatt sein soll), und zwischen den beiden keine Ist-Ein-Beziehubg aufbauen. Die führt nur zu Problemen (eins davon hast du ja schon gemerkt und mit protected „behoben“).
Doch, das finde ich gut.

Ich muss auch von Blatt Karten abheben und den Spielern geben, dafür könnte ich natürlich eine MEthode neu schreiben, da das nur zu BEginn vorkommt, werde ich auch machen, aber jetzt lese ich erstmal meiner Tochter vor. OK, ich brauche nur die Mehtode gibKArte, ja scheint Sinn zu machen.

Blatt wird aber anders "hergestellt" als Stapel, daher erscheint ein eigener Konstruktor auf jeden Fall sinnvoll.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Der Code und der Fehler passen nicht wirklich zusammen?

Laut Fehler wird in stapelFüllen getObersteKarte aufgerufen, in dem gezeigten Code passiert das nicht.


stapelFüllen versucht eine Karte auszugeben - existiert denn da überhaupt schon eine Karte in dem Array? (Falls du nicht im Konstruktor von Stapel welche anlegst nein).
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Doch, das finde ich gut.

Ich muss auch von Blatt Karten abheben und den Spielern geben, dafür könnte ich natürlich eine MEthode neu schreiben, da das nur zu BEginn vorkommt, werde ich auch machen, aber jetzt lese ich erstmal meiner Tochter vor. OK, ich brauche nur die Mehtode gibKArte, ja scheint Sinn zu machen.

Blatt wird aber anders "hergestellt" als Stapel, daher erscheint ein eigener Konstruktor auf jeden Fall sinnvoll.
Auf welchen Teil meines Beitrags beziehst du dich damit, und willst du damit verteidigen, dass Blatt ein Stapel ist oder stimmst du mir zu, dass es Unsinn ist?



Jetzt irgendwo extends zu nutzen, wird nur zu Problemen führen (wird leider meist viel zu früh gelehrt...).

Selbst wenn du jetzt sagst, dass ein Blatt (von dem immer noch nicht geklärt ist, was es ist) ein Stapel ist - willst du in deinem Programm irgendwo ein Blatt nutzen, wo ein Stapel benötigt wird? Wenn Nein: Vererbung weg. (Und wenn Ja: könnte jeder Spieler statt Stapel also einfach ein Blatt bekommen?)

Ein eigener Konstruktor macht grundsätzlich in jeder Klasse sein, und sei es nur, um den default-Konstruktor zu verhindern - das ist aber völlig unabhängig davon, ob es irgendeine Vererbungsbeziehung gibt.
 
NormanPatrickBenner

NormanPatrickBenner

Mitglied
Ui, in Blatt füllen habe ich vor lauter kommentieren den Code gelöscht, SCHADE!
 
W

White_Fox

Top Contributor
Hat Eclipse sowas wie eine History? Dann könntest du das einfach wiederherstellen lassen.
 
NormanPatrickBenner

NormanPatrickBenner

Mitglied
Mmhh, hatt schon zu viele ander Sachen auch geändert. Blatt hat jetzt nicht mehr mit Stapel zu tun. Jetzt habe ich allerdings die Methoden mischen und getObereKarte zweimal, einmal in Stapel und einmal in Blatt.
Obwohl ich nicht weiß, wo da der Fehler lag, funktioniert Konfiguration jetzt wunderbar. Jetzt muss ich allerdings den Rest des Blattes an den Nachziehstapel übergeben.
 
NormanPatrickBenner

NormanPatrickBenner

Mitglied
Also, doch nicht wunderbar

Javascript:
    public  Konfiguration (int anzahlSpieler){
        this.anzahlSpieler= anzahlSpieler;
        this.gewinner = -1;
        Blatt blatt = new Blatt();
        blatt.blattMischen();
        //Damit genug Karten zum Spielen da sind, wird jetzt berechnet, wie viele Karten jeder bekommen soll.
        int z =(int) Math.floor(32/(anzahlSpieler+2));
        anzahlStarthandKarten =Math.min(6,z);
        spielerrunde = new Spieler [anzahlSpieler];
        for (int i = 0 ;i< anzahlSpieler ; i++) {
            this.spielerrunde [i]  = new Spieler (anzahlStarthandKarten, blatt);
            System.out.println("Hier kommt der erste Fehler, aber es geht trotzdem weiter");
            spielerrunde [i].zeigeHandKarten();
        }
        nachZiehStapel.stapelFüllen(blatt);
        Stapel ablageStapel = new Stapel (32);
        ablageStapel.karteHinzufügen(nachZiehStapel.getObersteKarte ());
    }

12414


Javascript:
public void zeigeKarten() {
        System.out.println("Zahl der Handkarten:" +anzahl);
        for (int i = 0; i < anzahl-1; i++) {
            System.out.println("Karte :  " + i+ " jetzt kommt der Fehler");
            karten[i].zeigen();
        }
    }

Irgendwie füllt er karten[0] nicht
 
NormanPatrickBenner

NormanPatrickBenner

Mitglied
Ich bin weiter!!!!

Ich hatte die ZEILE 100% , sogar 1000%, eingefügt (k=k+1), aber die Heinzalmännchen haben sie wieder gelöscht.
Hat mich 4 Stunden gekostet!
In der Zeit hätte ich das ganze Programm neu schreiben können!
 
NormanPatrickBenner

NormanPatrickBenner

Mitglied
FERTIG!!

Wenn ich mal Lust habe baue ich ENUMS ein,
und baue ein GUI drum rum(mit den ActionListenern habe ich mich schon ganz schön rumgeärgert, insbseonder wie ich die Werte aus Ihnen rausbekomme, aber vielleicht klappt das ja mit dem jetzigen Wissen besser.)
Außerdem könnte man es mit stacks ausrüsten.
Andere Spiele implentieren.

JEtzt ist erstmal ruhe!
Es stehen auch noch andere Sachen an.
Vielen Dank für eure Geduld!
Danke
Norman
 
W

White_Fox

Top Contributor
K

kneitzel

Gast
Mein Ratschläge wären:
a) (Wie schon einmal geschrieben) Tests. Wenn man Tests einmal geschrieben hat für einzelne Teile, dann kann man diese Teile ganz einfach testen. Und das Testen von kleinen Teilen ist deutlich effektiver und einfach als nur das große Ganze zu sehen.
(Und ehe wieder diese Auslassungen kommen von wegen "ganz einfach": Das bezieht sich auf das Testen. Das ist dann, wenn man die Tests hat, ganz einfach. Bei dem vorgeschlagenen Tests für Dumme ist das ein einfaches Anstarten einer main Methode und das kannst Du doch schon und das ist auch in Deinen Augen ganz einfach, oder etwa nicht?)
b) Eine Source Code Verwaltung macht auch Sinn. Dann kann man auf alte Stände zurückgreifen, so man z.B. etwas löscht, was man später dann doch wieder haben möchte ...
 
W

White_Fox

Top Contributor
a) (Wie schon einmal geschrieben) Tests. Wenn man Tests einmal geschrieben hat für einzelne Teile, dann kann man diese Teile ganz einfach testen. Und das Testen von kleinen Teilen ist deutlich effektiver und einfach als nur das große Ganze zu sehen.
(Und ehe wieder diese Auslassungen kommen von wegen "ganz einfach": Das bezieht sich auf das Testen. Das ist dann, wenn man die Tests hat, ganz einfach. Bei dem vorgeschlagenen Tests für Dumme ist das ein einfaches Anstarten einer main Methode und das kannst Du doch schon und das ist auch in Deinen Augen ganz einfach, oder etwa nicht?)
Netbeans kann das und ich nehme an, Eclipse kann das auch: Tests automatisch erstellen. Die automatisierten Tests mußt du dann zwar noch mit Leben füllen, aber grundsätzlich bekommst du eine Idee davon, wie der Test aussehen soll. Das, was dein Testframework noch alles bietet, kann man wunderbar mit der Autocodevervollständigung erforschen.
Es gibt auf youtube bestimmt genug Videos, wo gezeigt wird wie das geht.
 
NormanPatrickBenner

NormanPatrickBenner

Mitglied
Ja DAnke,

normalerweise fange ich ja auch bei main an, da ich aber so einen tollen Plan hatte, wer was können soll muss ich ja erstmal Karte erstellen um mit Stapel zu arbeiten.
NA ja.
Die Methode hatte ja auch schon funktioniert, ich habe die Zeile nur durchs kommentieren wieder gelöscht.
Ja. immer zwischenspeichern ;-))

Auch mit den Test war ich sehr zufriedenAber zum Debugger:
An die ganzen Möglichkeiten in eclipse habe ich mich noch nicht gewöhnt (arbeite erste zwei Wochen mit java) .
Mir ist klar, dass man Debuggen kann und ich habe das auch schon gemacht. Man kann aber eclipse tausendfach individualisieren und eine Million Sachen einstellen, da ist es nicht einfach den Überblick zu behalten wenn man gleichzeitig, static, main, Enums und auch noch packages, utilities, ....... alles machen soll.
Ich habe den Debugger schon mehrmals verwendet und mir auch das Variablenfenster dabei angeschaut (manchmal verschwindet das bei Window-> ShowView, dann erscheint es einfach nicht.
Jetzt das PROBLEM: Benutzt man den Debugger in der Variablenansicht, dann werden auch immer die von Java implizierten Methoden alle mitangezeigt, und das sind im Falle eines NULL-Pointer Fehlers SEEEEEHR viele. Da verliert man die Lust, den Debugger zu benutzen. (Eintausenmal F5 drücken). Ich weiß aber nicht, wie das heißt, was ich ausschalten will, daher habe ich in jeder Zeile, die ich überprüfenswert fand ein Sysout eingesetzt. Ich weiß ja selber, dass das unprofessionell ist. ALSO: Was muss ich ausschalten, um wirklich nur MEIN Code zu debuggen, ansonsten kann ich den Debugger nicht benutzen.

An sich war ich mit meinem Programm ansonsten sehr zufrieden. Im NAchhinein war es am schwersten das mit den Methoden zu verstehen, weil ich halt nicht gemerkt habe, dass ich keine Konfiguratoren hatte, das hat die Logik unheimlich erschwert, weil es ja nicht so funktionierte, wie es hätte sollen.


Fraglich ist allerdings, ob ich mich so sehr reinfuchse, da ich nicht weiß, ob ich überhaupt nach den zwei Wochen weiter Java programmiere.
Zur Erläuterung: Ich gehöre zu einer Gruppe von Lehrer, die in 2 Jahen in Kursen mit einer Gesamtlänge von ca 6 bis 8 Wochen Vollzeit zum Informatiklehrer ausgebildet werden. Die Ausbildung finde ich zwar sehr schmalspur, aber sie ist gleichwertig zu jemandem , der 8 Semester Informatik studiert hat. Da muss halt alles ein wenig schneller gehen. Zum Glück ist der mathematische Teil nicht so schwer (habe ich schon Vorlesungen gehalten) und in Physik habe ich schon Halbaddierer und Volladdierer mit Transistoren mit den Schülern gebaut, gewisse Grundkentnisse sind also da.
ToDoListe:
1. Wie debugge ich ohne die implizierten Fenster
2. GUIs erstellen
3. Was sind packages und was weiß ich alles
3. ENUMS
4. Diese Sache mit den Test der einzelnen Methoden

Grüße
Norman
 
W

White_Fox

Top Contributor
Da ich Eclipse nicht benutze gehe ich jetzt mal von Netbeans aus und setze vorraus, daß Eclipse sich hier äquivalent verhält:

Das mit den 10^x Methodenaufrufen, damit meinst du wahrscheinlich den Stacktrace. Den mußt du in der Regel nicht völlig durchgehen, es reicht, wenn du nach deinen eigenen Klassen suchst. Der Stacktrace zeigt dir an, wo der Fehler herkommt. Wenn du eine Nullpointer-Exception in einem ArrayList hast, dann wird die Exception irgendwo tief in den Eingeweiden der Java Standardbibliothek geworfen, diese Stelle versteckt sich irgendwo hinter mindestens zwei oder drei Klassen und einem Interface und zig internen privaten Methodenaufrufen. Daher ist der Trace so lang.

Aber eigentlich geht der Fehler von ganz weit oben aus, wo in deiner Klasse der problematische Aufruf herkam. Und an dieser Stelle hilft dir der Debugger: Ein Haltepunkt am Methodenanfang, und dann schrittweise, Zeile für Zeile, das Programm weiter durchgehen. Dabei kannst du dir die Werte aller Variablen anschauen und prüfen, ob da die Werte drinstehen, die du erwartest.
 
K

kneitzel

Gast
Also ich finde erst einmal gut, dass Du da eine solche Weiterbildung machst, aber die Ansprüche der AUsbildung bezüglich den "8 Semestern Informatik" kann ich nicht nachvollziehen.... Irgendwie haben wir in den 8 Semestern mehr Stoff gehabt, als man mal eben so in 6-8 Wochen durchziehen könnte :)

Generell ist es egal, was für eine Sprache du nimmst. Aber ich fürchte, dass Du eine Sprache doch so gut können musst, dass Du diese auch vermitteln kannst. Und wenn etwas bei einem Schüler nicht läuft, dann sollte man das doch überblicken und einordnen können... Ob dies nun Java ist oder irgend eine andere Sprache ist dabei erst einmal egal. Aber eine Beherrschung sollte da sein, so dass man selbst das machen kann, was ja von den Schülern dann auch verlangt wird....

IDEs gibt es viele. Eclipse ist nicht bekannt für eine einfache, intuitive Bedienung. Daher wäre meine Empfehlung, sich einmal andere IDEs anzusehen. Hier ist z.B. auch zu beachten, was für Anforderungen es speziell aus Schulsicht gibt. IntelliJ finde ich sehr gut und das setze ich ein. Die Community Edition ist frei und für Schul-Belange mehr wie ausreichend. (JEE wird da wohl kaum Thema werden.) Zum Lernen gedacht ist z.B. auch BlueJ. Es gibt sehr viele Möglichkeiten und man sollte sich eine suchen, mit der man gut klar kommt, also da dann ruhig einmal andere IDEs ausprobieren.

Im Debugger reicht es in der Regel, den eigenen Code zu debuggen. Also nicht erst bei einer Exception reagieren, sondern vorher schon Schritt für Schritt durch den eigenen Code zu gehen. Aber bezüglich Debugger ist auch anzumerken, dass dieser überbewertet ist. Die Zeit, die ich im Debugger bin, ist extrem klein. Durch die Aufteilung in kleine Teile und die direkten Tests dieser Teile ist der Einsatz eines Debuggers oft unnötig. Der Griff zum Debugger ist da dann meist ein Zeichen, dass man da noch zu komplexe Teile hat mit zu wenig oder zu schlechten Tests.

Und generell ist die Frage, was den Schülern vermittelt werden soll. Was steckt da in den Lehrplänen alles drin?
==> Das sollte man sich im Detail gut aneignen. Wie will man etwas vernünftig vermitteln, wenn einem selbst das Verständnis fehlt?
 
NormanPatrickBenner

NormanPatrickBenner

Mitglied
Jo, wo stelle ich ein, dass ich nur MEINEN Code debugge.
Ich sehe das mit der Fortbidlung ähnlich, aber das Kultusministerium meint, dass das ausreichend ist.
Meine jüngste Tochter erhält ihren Matheunterricht in der 5. KLasse gerade von einer Zahnarzthelferin, so viel dazu.

Grüße
Norman
 
W

White_Fox

Top Contributor
Jo, wo stelle ich ein, dass ich nur MEINEN Code debugge.
Gar nicht. Denn der von dir verwedete Code gehört ja genauso zu deinem Programm. Du mußt ja aber nicht die Bibliotheken mitdebuggen, es reicht doch wenn du durch deine eigenen Codezeilen tippelst.


Meine jüngste Tochter erhält ihren Matheunterricht in der 5. KLasse gerade von einer Zahnarzthelferin, so viel dazu.
Langsam wird es Zeit die Koffer zu packen. Diesem Land ist nicht mehr zu helfen... :mad:
 
Zuletzt bearbeitet:
T

tommysenf

Top Contributor
Benutzt man den Debugger in der Variablenansicht, dann werden auch immer die von Java implizierten Methoden alle mitangezeigt, und das sind im Falle eines NULL-Pointer Fehlers SEEEEEHR viele. Da verliert man die Lust, den Debugger zu benutzen. (Eintausenmal F5 drücken).
Neben Step Into (F5) gibt es auch Step Over womit du zu nächsten Zeile springst und nicht in die aufgerufene Funktion. Das wird wahrscheinlich genau das sein was du suchst. Kann es gerade nicht ausprobieren aber ich tippe mal auf F6. Weiterhin gibt es auch noch Step Return womit du in der Aufrufhirarchie wieder eine Stufe nach oben kommst. Im Zweifelsfall schau dir einfach mal die Buttons oben im Debugger an...
 
K

kneitzel

Gast
Jo, wo stelle ich ein, dass ich nur MEINEN Code debugge.
Ich sehe das mit der Fortbidlung ähnlich, aber das Kultusministerium meint, dass das ausreichend ist.
Meine jüngste Tochter erhält ihren Matheunterricht in der 5. KLasse gerade von einer Zahnarzthelferin, so viel dazu.

Also beim Debuggen führst Du den Debugger. Da Du in der Regel ja einen Breakpoint setzt, landest Du an genau der gewünschten Stelle.
Dann geht es entweder in Einzelschritten weiter (also "Step over" um den Befehl der aktuellen Zeile auszuführen oder eben "Step into" um in den Code weiter hinein zu gehen.) oder man lässt es direkt weiter laufen (resume) so dass er bis zum nächsten Breakpoint läuft.

Daher wäre mein Ratschlag, Breakpoints etwas großzügiger zu setzen, denn wenn er beim step over auch auf einen Breakpoint läuft, dann hält er auch wieder an.

In welchem Bundesland bist Du denn, wenn man fragen darf? Das mit der Zahnarzthelferin ist schon recht heftig finde ich.
 
NormanPatrickBenner

NormanPatrickBenner

Mitglied
Ja, die macht das nur Vertretungsweise, aber schon häufiger, die gibt auch Deutsche, Kunst, was immer gebraucht wird.

Zum Debugger: Ich setze verschiedene Debugger Toggles, klar, dann kann ich mir die Variablen anschauen. Da diese aber static sind, sehe ich die nicht mehr, wenn ich implizierte Funktionen aufrufe (also "javainterne"), will ich aber gar nicht. Ich will halt nur den CODE anschauen, den ich selber geschrieben habe, nicht den, den ich benutze.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L non-static Fehler Java Basics - Anfänger-Themen 16
S Klassenmethode ohne static Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
D Methoden Scannervariablen in static Methoden Java Basics - Anfänger-Themen 5
P non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 6
V the static method should be accessed is a static way Java Basics - Anfänger-Themen 6
N Erste Schritte "non-static method" oder "XYZ can not be resolved" Java Basics - Anfänger-Themen 21
B Email versenden, muss Methode static sein? Java Basics - Anfänger-Themen 7
R static in der Methode Java Basics - Anfänger-Themen 2
E Problem mit static Methode Java Basics - Anfänger-Themen 4
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
M Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 10
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
T Datentypen enum static Chaos (blutiger anfänger) Java Basics - Anfänger-Themen 5
D Das leidige Thema static.... Java Basics - Anfänger-Themen 15
Aprendiendo Interpreter-Fehler "non-static variable this cannot be referenced from a static context" Java Basics - Anfänger-Themen 2
T Problem mit static Java Basics - Anfänger-Themen 6
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
snipesss Was kann 'static'? Java Basics - Anfänger-Themen 4
H Variablen error: non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 4
M public static int in ActionListener Java Basics - Anfänger-Themen 6
J static verschachtelte Klassen und innere Klassen Java Basics - Anfänger-Themen 1
H Nicht Static Funktion ohne Objekt aufrufen? Java Basics - Anfänger-Themen 6
E Objekte und static Java Basics - Anfänger-Themen 2
K Methoden Methoden in Methoden -> static oder nicht? Java Basics - Anfänger-Themen 7
D Erklärung static boolean Java Basics - Anfänger-Themen 6
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
U Erste Schritte cannot be referenced from a static context Java Basics - Anfänger-Themen 1
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
O Zu viel static im Projekt Java Basics - Anfänger-Themen 9
F Static final Klasse Java Basics - Anfänger-Themen 0
N static und Objekt kombiniert?!? Java Basics - Anfänger-Themen 3
O Wann nutzt man static? Java Basics - Anfänger-Themen 19
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
A Static variablen --- Anwendungsbereich Java Basics - Anfänger-Themen 11
B Erste Schritte Wie komme ich aus Static raus?!! Java Basics - Anfänger-Themen 4
V Static Methods Java Basics - Anfänger-Themen 5
W Compiler-Fehler "non-static method cannot be referenced"-Problem Java Basics - Anfänger-Themen 6
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
3 OOP static class in einer Klasse Java Basics - Anfänger-Themen 6
B static individuell "vererben"? Java Basics - Anfänger-Themen 8
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
T Static Fehler Java Basics - Anfänger-Themen 1
R public static void Rückgabe Java Basics - Anfänger-Themen 5
P Compiler-Fehler public static void main, Grundloses Problem Java Basics - Anfänger-Themen 4
A Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 6
W Variablen Automatisch static? Java Basics - Anfänger-Themen 3
O Warum muss ich static? Java Basics - Anfänger-Themen 6
O Static Java Basics - Anfänger-Themen 15
E non-static method und static context Java Basics - Anfänger-Themen 15
B non static interface Methode Java Basics - Anfänger-Themen 16
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
S Static void Methode Java Basics - Anfänger-Themen 12
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
O Main-Methode static modifier umgehen Java Basics - Anfänger-Themen 10
J Variablen non-static variable Java Basics - Anfänger-Themen 2
P Erste Schritte public oder static oder wie? Java Basics - Anfänger-Themen 7
J static - Methoden Java Basics - Anfänger-Themen 22
X Erste Schritte Methode ohne Static Java Basics - Anfänger-Themen 4
B Classpath static block - Verwirrung Java Basics - Anfänger-Themen 2
S Methoden Warum ist sleep static? Java Basics - Anfänger-Themen 9
K static, non-static Krise Java Basics - Anfänger-Themen 4
R Schlüsselworte static Methoden und Imports Java Basics - Anfänger-Themen 10
M Methoden "Non-static method xy cannot be referenced from a static context" Java Basics - Anfänger-Themen 20
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
S Aufruf Einer Methode aus einer anderen Klasse - Static Fehler Java Basics - Anfänger-Themen 4
W Methodenaufruf innerhalb einer Klasse - static vs. this Java Basics - Anfänger-Themen 3
K Objekt erstellen - error: non-static variable this cannot be referenced from a static context Java Basics - Anfänger-Themen 17
H non-static method cannot be referenced from a static context Java Basics - Anfänger-Themen 2
Y Gebrauch von static Java Basics - Anfänger-Themen 29
L Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 6
T getClass() im static Kontext Java Basics - Anfänger-Themen 12
S Frage zu public static Java Basics - Anfänger-Themen 29
M Problem mit Static Method Java Basics - Anfänger-Themen 8
H Methoden Static ? Java Basics - Anfänger-Themen 10
K Erste Schritte Zugiff ohne static Java Basics - Anfänger-Themen 5
X Static char Problem Java Basics - Anfänger-Themen 11
H static final vs. final static Java Basics - Anfänger-Themen 3
K Variablen Cannot make a static reference to the non-static field time Java Basics - Anfänger-Themen 6
A Compiler-Fehler static Array Wert hinzufügen Java Basics - Anfänger-Themen 8
E Methoden public static void main(String[] args) Java Basics - Anfänger-Themen 9
P Objekte übergeben Parameter vs. Static Methode Java Basics - Anfänger-Themen 7
B Static in der Anwendungsklasse Java Basics - Anfänger-Themen 8
P Compiler-Fehler Cannot make a static reference to the non-static field process Java Basics - Anfänger-Themen 3
N Übungsaufgabe mit static Wert Java Basics - Anfänger-Themen 27
M Class will alle Variablen als static haben Java Basics - Anfänger-Themen 11
H .class und static Block ? Java Basics - Anfänger-Themen 4
M static Attribute und Vererbung Java Basics - Anfänger-Themen 11
G static Klasse / anonyme Klasse Java Basics - Anfänger-Themen 4
K Frage zu Static Java Basics - Anfänger-Themen 6
G Figuren bewegen-Aufgabe mit static Java Basics - Anfänger-Themen 9
P Static-Probleme Java Basics - Anfänger-Themen 17
M Static Variable "dynamisch" aufrufen? Java Basics - Anfänger-Themen 8
B static und Pattern matching Java Basics - Anfänger-Themen 22

Ähnliche Java Themen

Anzeige

Neue Themen


Oben