Kann hier jemand Java?

@black: Beschäftige dich mal mit blueJ. Ist ne super Sache, wenne - wie ich - Eclipse als klausurfeindlich ansiehst, aber trotzdem die Objektorientierung visualisieren willst. ;)

http://www.bluej.org/download/download.html

Wurde uns von unserem Prof. auch nahe gelegt und ich kann bisher sehr gut damit arbeiten.
 
@black: Beschäftige dich mal mit blueJ. Ist ne super Sache, wenne - wie ich - Eclipse als klausurfeindlich ansiehst, aber trotzdem die Objektorientierung visualisieren willst. ;)

http://www.bluej.org/download/download.html

Wurde uns von unserem Prof. auch nahe gelegt und ich kann bisher sehr gut damit arbeiten.

kk werd ich mal ausprobieren ...
müsst ihr die Klausuren auch auf Papier schreiben?


€dit: sieht auf jeden Fall schonmal gut aus ... auf jeden Fall besser als im Editor ^^ und Syntax highlighting is ja nix böses :D
 
Hi Leute,

neues "Problem":

Wir sollen nun "Vier gewinnt" programmieren. Ich habe schon sehr viel geschafft, wie ich finde. Jetzt bin ich an der Stelle, dass ich mit einer Methode überprüfen will, ob wer gewonnen hat. Dazu hatte ich mir Folgendes überlegt:

java said:
public boolean horizontal()
{
int y = 5;
int x = 6;
boolean vier_in_reihe = false;

while(vier_in_reihe == false && y > 2)
{
if(spiel[y][x] == spiel[y-1][x] == spiel[y-2][x] == spiel[y-3][x])
{
vier_in_reihe = true;
}
if(vier_in_reihe == false)
y = y-1;
}
if(vier_in_reihe == true)
return true;
}

Das char-array "spiel" ist eine globale Variable der Klasse: private char[][] spiel = new char[6][7];

NUn spuckt mir BlueJ den Fehler aus:

"incomparable types: boolean and char für die Zeile if(spiel[y][x] == spiel[y-1][x] == spiel[y-2][x] == spiel[y-3][x])

Ich denke, dass das dran liegt, dass Java zuerst die ersten beiden vergleicht, true oder false speichert, und anschließend mit dem dritten weitervergleicht.

Wie kann ich es schaffen, dass er alle 4 vergleicht, ohne alle 4*3*2= 24 Möglichkeiten einzeln checken zu müssen?
 
Hm gute Frage... Soweit ich weiß kannst du nur 2 Werte miteinander vergleichen und das Ergebnis davon eben mit & mit anderen Vergleichen verknüpfen.

Java Code said:
if (spiel[y][x] == spiel[y-1][x]) && (spiel[y-1][x] == spiel[y-2][x]) && (spiel[y-2][x] == spiel[y-3][x])

Das sollte eigentlich reichen oO. Die Bedingung ergibt nur true wenn alle Vergleiche wahr sind und bricht ab sobald ein Vergleich nicht wahr ergibt. Im ersten Schritt überprüfst ob y und y-1 gleich sind. Wenn ja, y-1 mit y-2 (d.h. es wird auch automatisch verglichen ob y=y-2 ist) usw.

Probiers mal aus :)
 
Ich wüsste jetzt ad hoc zwar nicht ob es noch eine bessere Lösung gibt, aber als Mathematiker würde ich eine Darstellungsmatrix definieren welche immer nur dann ein bestimmtes Element einer Summe Y ergibt, wenn man gerade 4 in einer Reihe hat.

Man hätte also eine Matrix welche genau so groß ist wie das Spielfeld und welche für jeden Punkt einen bestimmten Wert definiert.
Dann müsste man bei jedem Zug den Wert des zug. Spielers erhöhen und schauen ob das Ergebnis eine bestimmte Summe X hat.

So würde die eigentliche Schwierigkeit darin liegen diese Matrix und die gesuchten Summen vor dem Spielstart allg. bestimmen zu können.
Falls ihr hier aber von einer ganz bestimmten Spielgröße ausgeht müsste man es sogar nicht mal allg. bestimmen, sondern nur einmal auf dem Papier ausrechnen.

Es würde dann auch sehr effizient laufen.
 
Wir müssen das nur für ein spezielles Vier-Gewinnt machen.

java said:
public class Viergewinnt2
{
private int gespielt1 = 1;
private int gespielt2 = 1;

private char[][] spiel = new char[6][7];





public Viergewinnt2()
{
feld_erstellen();
}

public void feld_erstellen()
{
for(int i=0; i < 6; i++)
{
for(int n=0; n < 7; n++)
{
spiel[n] = ' ';
}}}

public boolean korrekt(int n)
{
if(n > -1 && n < 7)
return true;
else
return false;
}

public void eingabe1(int zug_spieler1)
{
if(korrekt(zug_spieler1) == true && gespielt1 == 1)
{
int y = 5;
boolean leer = false;
while(leer == false && y > -1)
{
if(spiel[y][zug_spieler1] == ' ')
{
leer = true;
}
if(leer == false)
y = y-1;
}
if(leer == true)
{
spiel[y][zug_spieler1] = 'X';
gespielt1 = 0;
gespielt2 = 1;
ausgabe();
if(horizontal(zug_spieler1) == true || waagerecht() == true)
System.out.println("Spieler 1 hat gewonnen!!!");
}
}
else
{System.out.println("Ihre Eingabe ergibt keinen Sinn");}

}
public void eingabe2(int zug_spieler2)
{
if(korrekt(zug_spieler2) == true && gespielt2 == 1)
{
int y = 5;
boolean leer = false;
while(leer == false && y > -1)
{
if(spiel[y][zug_spieler2] == ' ')
{
leer = true;
}
if(leer == false)
y = y-1;
}
if(leer == true)
{
spiel[y][zug_spieler2] = 'O';
gespielt2 = 0;
gespielt1 = 1;
ausgabe();
if(horizontal(zug_spieler2) == true || waagerecht() == true)
{
System.out.println("Spieler 2 hat gewonnen!!!");
feld_erstellen();
}
}
}
else
{System.out.println("Ihre Eingabe ergibt keinen Sinn");}
}

public void ausgabe()
{
System.out.println("\n");

for(int n=0; n<7; n++)
{
System.out.print(" " + n);
}
System.out.print("\n");

for(int x=0; x<6; x++)
{
System.out.print("|");

for(int n=0; n<7; n++)
{
System.out.print(spiel[x][n] + "|");
}
System.out.print("\n");
}

}

public boolean horizontal(int x)
{
int y = 5;
boolean vier_in_reihe = false;



while(vier_in_reihe == false && y > 2)
{
if(spiel[y][x] == spiel[y-1][x] && spiel[y-1][x] == spiel[y-2][x] && spiel[y-2][x] == spiel[y-3][x] && spiel[y][x] != ' ')
{
vier_in_reihe = true;
}
if(vier_in_reihe == false)
y = y-1;

}
if(vier_in_reihe == true)
return true;
else
return false;
}

public boolean waagerecht()
{
int x = 6;
boolean vier_in_reihe = false;

while(vier_in_reihe == false && x > 2)
{
for (int y = 5; y > -1; y--)
{
if(spiel[y][x] == spiel[y][x-1] && spiel[y][x-1] == spiel[y][x-2] && spiel[y][x-2] == spiel[y][x-3] && spiel[y][x] != ' ')
{
vier_in_reihe = true;
}
if(vier_in_reihe == false)
x = x-1;
}
}
if(vier_in_reihe == true)
return true;
else
return false;
}




}



Das ist mein bisheriger Code.
Nun brauche ich noch 2 Methoden für die Diagonalen. Krieg ich aber hin :)


Was natürlich noch schön wäre, wäre eine Benutzeeingabe in der Konsole.


Ich stelle mir das so vor:


"Spieler 1, es ist Ihr Zug": (hier soll dann eine Zahl zwischen 0 und 6 eingegeben werden)
und dann soll der auf
"Spieler 2, es ist Ihr Zug": (selbiges)
springen und natürlich vorher wieder das neue Spielfeld ausgeben usw..

Wie krieg ich denn das wohl hin? Hab im Netz nach Benutzereingaben gesucht, aber verstehe nur Bahnhof. Da steht was von BufferedReader usw., aber 0 Idee, wie man das benutzen soll, so dass es hier für auf mein "int zug_spielerX" übertragen werden kann.

Weiß das auch noch einer von euch? Ich gehe schwer davon aus^^.


Gelernt haben wir das alles noch nicht und Pflicht ist es auch nicht. Aber wäre praktisch (auch für mich zum Testen) und auf jedenfalls besser.
 
Last edited:
wenn das ganze praktisch funktionieren soll, kommst an ner gui wohl nicht vorbei :o
 
Ne Konsole als GUI reicht doch :D Er kann sich das Spielfeld ja auch auf der Konsole ausdrucken lassen :) Einfach in ner verschachtelten Schleife das Spiel-Array ausgeben. Kannst entweder auf einmal machen (In der Schleife die einzelnen Chars zu nem String verbinden und nach jeder Zeile ein \n hinzufügen und dann den String per System.out.println(String) ausgeben) oder Zeichen für Zeichen.

BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
int i;
i = Integer.parseInt(buffer.readLine());

Den Integer musst dann halt noch auf seine Gültigkeit überprüfen aber sonst sollte es klappen. Das ganze läuft ja dann sicher in ner do while Schleife oder?

Also
do while (horizontal(zug_spieler2) != true && waagerecht() != true)

In der Schleife lässt dann noch nen Counter mitlaufen, den du immer Mod 2 machst, um zu erkennen welcher Spieler gerade dran ist.

Viel Erfolg ;)
 
wenn du zu streams wie bufferedreader unterlagen haben willst - pm an mich :)
kann dir auch was zu guis schicken...
 
Hallo Leute,

ich bin so langsam echt am Verzweifeln. Ich studiere ja Wirtschaftsinformatik im ersten Semester und wir haben nun mit Java angefangen.

Wirtschaftsinformatik :D. Ich hab das Problem gefunden. Allgemeine Informatik FTW.

Und noch was Konstruktives: http://www.exampledepot.com/
hier findet man Codesnippets zu nahezu allen Problemen in Java.
 
bin mit mienem wiInf studium in den letzten zügen :)
wenn man will, kann man da auch recht viel proggen - muss man aber ab ahuptstudium zum glück nicht mehr zwingend :D
 
Schreib grad meine Abschlussarbeit und mach dann den Master, das Proggen ist doch mit das Beste im Studium :D
 
Das mit dem VierGewinnt hat nun sogar Spaß gemacht. Aber grundsätzlich find ich den Wirtschafts- und Matheteil viel viel besser. Das liegt mir eindeutig mehr. :)

Achja, weil ich´s nun auch abgegeben hab: Wer mal ne Runde spielen möchte, im Anhang ist das Programm als Zip-Datei (main-Methode in der Run.Java)
 

Attachments

  • Documents.zip
    4.9 KB · Views: 6
Kaum ein ehemaliger WiInf-Student arbeitet später mal in der Anwendungsentwicklung sondern eher in Consulting, Vertrieb oder Customizing. Das Studium ist ja auch als eine Art Schnittstelle - eher generalistisch und weniger speziell - zwischen den Welten Wirtschaft und Technik angelegt.
 
Genau.

Typische Jobs für Absolventen dieses Studiengangs sind im Consulting-Bereich, im Controlingbereich, in leitenden Positionen von Unternehmen (Unternehmen und/oder Stelle oft mit technisch/informatischem Bezug), sehr selten im Programmier- und Supportbereich anzusiedeln. Und natürlich steht einem fast die komplette BWL-Sparte offen.

Daher sehe ich Programmierung auch eher als notwendiges Übel^^:D
 
Last edited:
Jo aber das geht rum:) Hab mir damals auch von BseBärchen Hilfe geholt. Da ist das übel dann nimmer so groß^^
 
Leider erfüllen viele Winler die Funktion als Schnittstelle nur bedingt, da sie einfach zu wenig Ahnung von der technischen Seite haben, da kann ich dann gleich einen BWLer nehmen.

Nunja ich bin halt einfach mehr von den technischen Fächern angetan und daher auch sehr glücklich mit meinem Studiengang. Außerdem werden auch häufig technische Informatiker in die Führungsebene geholt, es ist einfacher einem Techniker die Wirtschaftssachen zu zeigen als umgekehrt, zumindest hatte ich mit diesen Leuten mehr positive Erfahrungen.

Aber deswegen gibt es ja verschiedene Studiengänge, damit für jeden nach seinen Vorlieben etwas dabei ist.
 
@derksowitsch: konnteste mit den unterlagen was anfangen?
@zorg: hm, kommt auf die branche an. etwas übertrieben gesagt kannste natürlich zb in nem softwarehaus als tech-inf wahrscheinlich bei den meisten arbeitsplätzen mehr reissen. aber was willste in diversen deinstleistungsunternehmen oder produzierenden läden damit reissen? da brauchste leute, die sich mit der it-infrastruktur einerseits und die dadurch abzubildenden bwl-prozesse andererseits befassen und sich damit auch einigermaßen auskennen. kleines beispiel (der kaufmännische leiter sagt zum wiInfler):
kann man irgendwie realisieren, dass meine mitarbeiter grundsätzlich bei iheren buchungen nur bestimmte kostenstellen angeben dürfen? außerdem müsste das ein pflichtfeld bei der eingabe sein. ach ja, bei den kostenträgern hätte ich es gerne genauso. und warum hat mitarbeite A zugriff auf die fibu und ma B nicht?....
oder umgekehrt: lieber chef, wir brauchen neue lizenzen von software x/y, weil wir durch den neuen standort und die neuen ma zuviele leute zeitgleich auf unseren virtuellen servern haben...
 
Last edited:
Back
Top Bottom