Arrays.sort() ist aufsteigend, ich möchte den array aber absteigend sortieren

Bei den sort Methoden von Arrays gibt es auch eine Methode, die es dir erlaubt einen Komparator zu verwenden. 

Wie ich in einer deiner Kommentare bereits gelesen hast, bist du sogar schon darauf gestoßen.

Collections.reverseOrder() stellt dir bereits diesen Komparator zur Verfügung:

Integer[] arr = {2, 3, 1};
Arrays.sort(arr, Collections.reverseOrder());
...zur Antwort

Ist das Leva oder Ley?

Leva

Bezahlt man Gebühren wenn man in Bulgarien seine Euros umwechseln möchte?

Gebühren nicht, aber durch einen schlechten Wechselkurs bekommst du weniger Geld beim tauschen.

Ich habe vor nach Bulgarien zu fliegen

Ich nehme an: Urlaub? 

Dann mein Tipp: Wechsel das Geld auf keinen Fall am Flughafen, sondern erst im Hotel.

...zur Antwort

Aktuell ist dein Programm so gestaltet, dass die Buttons per FlowLayout nacheinander angeordnet sind, und vermutlich immer nach 3 Buttons 'umbricht' sodass du bei 3 Buttons drei Zeilen hast.

Bei Tic Tac Toe gibt es mehrere Optionen um zu gewinnen: 

  • Drei gleiche in einer Reihe (3 Reihen)
  • Drei gleiche in einer Spalte (3 Spalten)
  • Drei gleiche Diagonal (Zwei Diagonale).

Du könntest theoretisch nun eine 2D-Array nutzen um dort die Indizes der einzelnen Buttons zu speichern, Beispielsweise für die erste Möglichkeit:

Erste Reihe = Button Index: 0, 1, 2

Zweite Reihe = Button Index: 3, 4, 5

byte[][] check =

{
{0, 1, 2},
{3, 4, 5}
};

Die eine Dimension deckt alle Möglichkeiten ab, die zweite Dimension deckt alle Indizes ab: Sodass du in einem Schleifendurchlauf die Möglichkeiten durchgehst und in der zweiten Schleife den Gewinner ermitteln kannst.

...zur Antwort

 Austausch von Daten zwischen Client und Server.

Hierzu gibt es direkte Klassen wie: Socket und ServerSocket (und DatagramSocket). Wobei man via UDP oder TCP (je nach dem, wie deine Anwendung gestaltet ist) seine Anwendungen miteinander Kommunizieren lassen kann.

 Gibt es da einen oberfachbegriff für dieses Thema?

Ja: Netzwerkprogrammierung

Um in das Thema rein zu kommen, ist das einfachste ein Chat-Server inkl. Client.

Da gibt es zahlreiche Beispiele. Eins wäre folgendes:

http://www.java2s.com/Code/Java/Tiny-Application/Chatclientserver.htm

...zur Antwort

Die wirklich netten haben schlechte Karten....

Was willst du als 'netter Kerl' mit ner Frau die sich auf jeden 'Idioten' einlässt? Das sagt viel über die Frau aus, oder etwa nicht? - Das sollte erst gar nicht dein Interesse wecken.

Wenn ich mal Radfahren gehe sehe ich viele junge Frauen joggen, skaten, die hübsch sind.

Willst du dann einfach vom Rad absteigen und als 'wildfremder' anfangen zu flirten? Ich glaube, da nimmst du dir ziemlich viel vor.

Wenn du nicht gerade wie ein Adonis aussiehst, kommt das nicht so gut rüber und du bewirkst eher das Gegenteil.  - Denn bevor du mit einer Dame das erste Wort ausgetauscht hast, weiß sie nur zwei Dinge von dir: 1. Du fährst Fahrrad, und 2. dein Aussehen.

Wenn du eine nette Dame kennen lernen willst, versuch es über einen Verein, denn da ist man ja dann 'gemeinsames Mietglied' und somit besteht eher eine Kontakt-Möglichkeit, die nicht in einer extrem peinlich und unangenehmen Situation endet.

...zur Antwort

Erläutern wir das mal anhand eines anderen Beispiels.

Sagen wir mal, du hast eine eigene Label-Klasse. Du möchtest einen Listener,(1) der das Event(2) abfängt, wenn sich der Wert des Labels ändert.

Dann würde deine Basis-Klasse zunächst so aussehen:

class MyLabel {

 private String value;

 public void setValue(String value) {
   this.value = value;
 }


 public String getValue() {
    return this.value;
 }
}

(1) Ein Listener, wie der Name schon sagt: Ist eine Klasse, besser gesagt ein Interface, dessen Aufgabe es ist "zuzuhören". 

(2) Ein Event ist ein Ereignis. Jedoch Codeseitig hat die Event-Klasse nur einen Tieferen Sinn: Informationen bereit zu stellen.

Auf obiges Beispiel bezogen benötigt man nun zwei weitere Teile. Genauer gesagt: Eine Klasse und ein Interface.

Eine Event-Klasse die du mit ausreichend Informationen Bestücken kannst: Hier eignet sich: Event-Name, Quelle, WertVorher, WertNachher.

class MyEvent {

  private String eventName;
  private Object source;
  private Object valueBefore;
  private Object valueAfter;

  public MyEvent(String eventName, Object source, Object valueBefore, Object valueAfter) {...}

  // Getter+Setter


}

Hier kannst du alle nötigen Informationen Speichern, die dem Listener später zur verfügung stehen können.

Der Listener selbst ist ein Interface, mit einer Methode, welche das Event als Parameter bekommt:

public Interface MyListener {
   public void onEvent(MyEvent event);
}

In deinem Label, in dem du das Ereignis abfangen möchtest: Ändert sich der Wert:

Solltest du die Eigenschaft Listener hinzufügen:

private MyListener onValueChangedListener;
// getter + setter

Welche du dann im setter deines Wertes ergänzen kannst:

public void setValue(String value) {
if (onValueChangedListener != null) {
    MyEvent event = new MyEvent("onValueChanged", this, this.value, value);
   onValueChangedListener.onEvent(event);

}
  this.value = value;
}

Du erstellst ein Event-Objekt mit allen nötigen Informationen: EventName, Quelle, Wert-Vorher, Wert-Nachher und gibst dann diese Information als Paramter der Methode deines Listeners mit, die du hier ausführst.

Also Reagiert der Listener auf einen Umstand und teilt nähere Informationen über ein Event-Objekt mit.

...zur Antwort

Es gibt nicht nur ein Framework.

Wie benutzt man es? 

Kommt ganz stark auf das Framework an.

Gibt es schon vorgefertigte Adminseiten oder wie schreibt man sich selbst einen Einlog-Mechanismus?

Ebenso ist das eine spezifische Frage auf ein Framework. 

Wie ist das grundlegende Prinzip?

In den meisten Fällen: Ajax

Wie benutze ich Java auf der Serverseite, sodass es HTML-Dateien ausliefert?

Je nach dem....

Mittels JSP (JavaServerPage) kannst du deine Seite ganz normal in HTML gestalten, und gewisse Teile der Website direkt in Java schreiben.  - Aber JavaServerpage kann man nicht direkt als Framework betiteln. 

Neben den von anderen genannten Webframeworks habe ich meine Erfahrung mittels ZKoss gesammelt.

Um die Fragen nochmal durchzugehen:

Zur Benutzung hast du zwei Möglichkeiten: 

  1. Du nutzt eine ZUL-Datei, welche im XML-Stil aufgebaut ist, um deine Website zu gestalten, in der du auch ganz normalen HTML Code verwenden kannst und kannst durch benennen der mit einer ID das ganze Codeseitig steuern (Eingaben abfangen, etc)
  2. Du verwendest das Framework als Servlet: Die komplette Gestaltung deiner UI wäre in Java. ('Grob' gesagt, wie in Swing)

Einloggen:

Es gibt keine Fertige Admin-Seite. Das musst du selbst machen: Zwei Textfelder. Ein normales und ein Passwort-Feld sowie ein Anmelde-Button. An den Anmelde-Button hängst du ein "ON_CLICK" Event, liest die Eingabe aus Passwort und Namens-Feld aus und prüfst das mit deiner Methode zur Verifizierung.

Meiner Meinung nach lohnt es sich schon. Vor allem wenn man in Java geübt ist.

Es ist ein wenig gewöhnungsbedürftig, aber klappt in der Summe doch relativ gut.

Wenn man sich mit JavaFX und FXML-Dateien auseinander gesetzt hat, sollte auch die Gestaltung einer ZUL-Datei, für die es auch einen Online-Designer gibt, relativ leicht sein.

...zur Antwort

Jeder hat einen anderen Geschmack.  Ich finde Babys eher sauer. Liegt aber vielleicht daran, dass ich meine mit deutlich mehr Essig und Salz zubereite.

...zur Antwort

Viele Wege führen nach Rom, und auch zu deiner Lösung.

Das einfachste dürfte wohl sein, dass du einen Actionlistener für deine Buttons verwendest, die nur einmalig funktionieren und sich selbst wieder entfernen, sobald man drauf gedrückt hat:

JButton btn = new JButton("Klick mich");

btn.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) { System.out.println("Ich wurde geklickt, Aufgabe erledigt"); btn.removeActionListener(this); } });

Ein anderer Weg wäre das von dir genannte 'disabled' Schalten.

Weitere Ansätze wären: Du verwendest andere Komponenten, wie Beispielsweise ein Label, für das du dann z.B. einen MouseListener verwendest um eine Eingabe zu tätigen, und dann auch hier: Nach einmaliger Eingabe, die Funktion deaktivieren.

JLabel label = new JLabel("");
label.addMouseListener(new MouseListener() {

@Override public void mouseClicked(MouseEvent e) { label.setText("X"); label.removeMouseListener(this); } /** Andere Methoden wären einfach leer zu implementieren, bzw. lassen sich auch nutzen um deine UI etwas 'aufzupolieren' wie: Sobald die Maus sich auf dem Label bewegt, wird ein Rand gesetzt um die aktuelle Komponente hervor zu heben, etc.**/
});
...zur Antwort

window -> preferences -> general -> editors -> texteditors -> spelling

Dort kannst du das einstellen.

...zur Antwort

Füge eine weitere Ebene hinzu, auf der du deine 'Misch-Farbe' hast.

Dann senke die Deckfähigkeit(per Doppelklick auf die neue Ebene) deiner neuen Ebene, z.B. auf 95.

...zur Antwort

Das kommt auf deinen Code und auf das verwendete GUI-Framework an und in wieweit hier noch Änderungen zugelassen sind.

Mein Tipp ist die Verwendung von JavaFX mit FXML-Dateien:

Damit hast du GUI-Anpassungen in einer eigenen XML-Datei, die man auch bequem per Editor (JavaFX Scene Builder) anpassen kann. 

Theoretisch kannst du auch eine zweite FXML Datei für eine andere Skalierung verwenden.

...zur Antwort

Du könntest natürlich deine bisherigen Projekte auch erweitern, was eine Herausforderung darstellen kann.

Minesweeper

  • Mehrere Schwierigkeitsgrade
  • Verhindern dass der erste Klick eine Miene ist
  • Time-Challenge: In einer bestimmten Zeit müssen X Mienen korrekt entdeckt worden sein, sonst game over.

Tetris

  • Mehrere Start-Level, bei denen z.B. die hälfte des Feldes bereits per Zufall vorbelegt ist, was man erstmal "abarbeiten" muss.
  • Erhöhte Geschwindigkeit nach X leveln oder Zeit X.
  • Multiplayer: Spieler A löscht 3 reihen, Spieler B erhält somit zwei Random-reihen unten dran.
  • Multiplayer über das Netzwerk.
  • Multiplayer mit mehreren Spielern und mit Teams.
  • Highscores
  • Bestenlisten

Pacman

  • Mehrere Unterschiedliche Spielfelder. 
  • Unterschiedliches Verhalten von Gegnern (Wenn man sie 'essen' kann oder wenn sie einen jagen)
  • Time-Challenge
  • Multiplayer: Ko-op / Versus (Man kann sich gegenseitig essen, bei Erfolg zählt der Spieler mit mehr gegessenen Punkten, ebenso kann nur derjenige mit mehr gegessenen Punkten den anderen Spieler essen)
  • Netzwerk-Multiplayer bis zu vier Spielern
  • Netzwerk-Multiplayer: Weitere Spieler können die Rolle der Geister einnehmen.

Schiffe versenken

  • Implementierung eines Computer-Gegners
  • Netzwerk-Fähigkeit
  • Multiplayer mit mehr als zwei Spielern: man kann sich, wenn man dran ist, den 'Gegner' aussuchen.

Snake

  • Multiplayer
  • Neben dem Normalen Essen noch anderes Essen mit Spezial-Effekten: "Schlange kann sich für 10 Sekunden nicht selbst essen", erhöhte Geschwindigkeit, Verlangsamung, schrumpfen der Schlange, größere Verlängerung
  • Schrumpfen des Spielfeldes über die Zeit hinweg

FlappyBird

  • Bewegende Rohre
  • Entgegen kommende Objekte
  • Einbau von drei Leben
  • Automatisch schwieriger nach X Zeit durch kürzere Abstände, höhere Geschwindigkeit

Auch ein kleines RPG wäre möglich, bei dem du ein Inventar hast und Gegenstände gesammelt und verwendet werden können.

...zur Antwort
Java Programm zum Datei Upload?

Hallo! Da ich in meiner Ausbildung zum Informatikkaufmann kürzlich ein Java-Seminar hatte, in dem wir die Grundlagen von objektorientierter Programmierung gelernt haben, hat mein Ausbildungsbeauftrager in der Abteilung mir die Langzeitaufgabe gegeben, ein altes Programm was er mal geschrieben hat durch ein JAVA Programm von mir abzulösen.

Das Programm soll aus bestimmten Ordnern die Dateien an einen FTP Server schicken und dann je nach Einstellung die Datei im eigentilchen Ordner löschen oder in einen anderen Ordner "archivieren", dabei soll dann ebenfalls eine Ausgabe über Uhrzeit, Name und Status der geschickten Datei gegeben werden, welche danach in ein LogFile geschrieben wird. Ebenso soll man die ganze Konfiguration des Programms über eine Datei (z.B. .txt Datei) vornehmen können, also dass ich da die Pfade der Ordner und die Serverdaten reinschreibe.

Da wir jetzt nur die grundzüge von Java gelernt haben, also Vererbung und so, weiß ich nicht genau, wo ich da anfangen soll, da z.B. der Zugriff auf Dateien außerhalb des Java Programms neu für mich sind. Gibt es da bestimmte Bibliotheken für, die mir das erlauben? Und gibt es Bibliotheken für den Transfer an einen FTP Server?

Danke für jeden Lösungsansatz =P

(Es ist eine produktive Aufgabe, also keine Art Test, zu der ihr mir dann die Lösung verratet, ich soll sogar wortwörtlich im Internet nach der Lösung suchen, da mein Auftraggeber das selber nicht genau kann mit Java)

...zur Frage

Für einen FTP Upload/Download lohnt sich folgende die Library:

http://commons.apache.org/proper/commons-net/

Hier gibt es auch entsprechende Beispiel für Upload und Download.

Das Programm soll aus bestimmten Ordnern die Dateien an einen FTP Server schicken 

  • Für die Verwendung des FTP: Siehe vorheriger Link
  • Welche Ordner das Betrifft, könntest du in einer Property-Datei vermerken(*)

dann je nach Einstellung die Datei im eigentilchen Ordner löschen oder in einen anderen Ordner "archivieren"

  • Diese Einstellung würde ich ebenfalls in einer Property-Datei vermerken
  • Für das 'archivieren' gäbe es zwei Ansätze:   1. File#RenameTo (Verschieben). Hierüber erhält man die Info ob es "geklappt hat" oder nicht, über den boolean Rückgabewert. 2. Files.copy/delete: Hier könnte man eventuell auf Exceptions reagieren als alternative Auskunft über den Verlauf des Kopierens/Verschiebens.

 eine Ausgabe über Uhrzeit, Name und Status der geschickten Datei gegeben werden, welche danach in ein LogFile geschrieben wird

Für eine Ausgabe in eine Log-Datei lohnt sich die Verwendung eines Loggers, siehe Beispiel hier:

http://stackoverflow.com/questions/15758685/how-to-write-logs-in-text-file-when-using-java-util-logging-logger

* Property-Datei: 

Über: java.util.Properties lässt sich dies sehr leicht umsetzen: Siehe Methoden:

  • store
  • load

Die Properties lassen sich wie eine Map verwenden. - Mein Tipp wäre es jedoch noch: Lass eine Default-Property-Datei erstellen, sollte es keine geben, oder sollte die gegebene so modifiziert sein, dass sie nicht vollständig ist.

...zur Antwort

Du liest die Daten Zeilenweise ein aber hast jedoch nicht die Anzahl der Zeilen. Entsprechend würde ich im ersten Schritt die eingelesenen Zeilen in eine  ArrayList speichern.

Wenn du im nächsten Schritt deine Array aufbaust, kannst du bei der Ersten Dimension dann bereits die Länge, sodass du deine Array bereits initialisieren kannst:

char[][] spielfeld = new char[list.size()][];

Pro Zeile bekommst du dann die nächste Dimensionslänge, da du ja die Länge der Zeilen hast:

String line;
...

while (... line = br.readLine()..) {

char[] spielZeile = new char[line.length())
...zur Antwort

Zu einer 'bestimmten Zeile' springen ist eher nicht der Weg den du gehen solltest und ist in Java auch nicht vorgesehen.

 Aber was für eine Alternative habe ich dann? 

Teile deinen Code in Methoden sinnvoll auf und führe bei bestimmten Bedingungen entsprechende Methoden aus.
Beispiel:

du hast eine Methode die heißt: Verarbeiten.

void verarbeiten();

diese Methode liest etwas, verarbeitet etwas und schreibt dann etwas. - Diese drei Teile könntest du in drei Methoden schreiben:

void lesen();
void berechnen();
void schreiben();

diese kannst du dann beispielsweise nacheinander ausführen lassen, indem du diese Methoden in deiner Verarbeiten Methode ausführst:

void verarbeiten() {
  lesen();
  berechnen();
  schreiben();
}
...zur Antwort

Excel unterstützt das nicht, daher gibt es eigentlich nur zwei Workarounds:

  1. Den Text als Bild einfügen und das dann drehen
  2. Eine Schriftart verwenden, die Überkopf steht. (z.B: http://www.myfonts.com/fonts/ingrimayne/upside-down/ )
...zur Antwort

Wie schon von anderen genannt ist BlueJ nur eine Entwicklungsumgebung um mit Java zu entwickeln.

Mit Java hast du natürlich auch die Möglichkeiten spiele zu entwickeln.

Das Problem ist aber, dass wir in der Schule noch mit Java 7 programmieren und FX ist meineswissens erst ab 8 verfügbar, oder?

Ab JavaSE 7u6 kann man FX (2.2) verwenden, aber als Extra-Paket.

Ab Java 8 ist JavaFX bereits ein Bestandteil von Java.

Auch wenn JavaFX sehr viele Vorzüge bietet, so ist ein Entwickeln von Spielen auch mit awt und Swing möglich.

...zur Antwort

Du könntest eine Klasse erstellen: ConfigData. Dieser Klasse weist du dann deine Attribute als Instanz-Variablen zu und legst für diese Getter an.

z.B.:

class ConfigData {

private String tsHost;
...

public ConfigData(String tsHost) {
  this.tsHost = tsHost;
}

public String getTSHost() {
return this.tsHost;
}
...

Deiner Methode readConfig könntest du dann einen Rückgabewert vom Typ: ConfigData geben: 

public static ConfigData readConfig(){...}

in dieser Methode kannst du deine ausgelesenen Variablen an den Konstruktor einer neuen ConfigData-Instanz übergeben und diese von deiner Methode zurück geben lassen.

so wäre es in deiner anderen Klasse möglich: so darauf zuzugreifen:

ConfigData configdata = configfile.readConfig();
configdata.getTSHost();

Wobei ich mir erlaube anzumerken: Klassen immer vorne groß zu schreiben. 

...zur Antwort

Local variable x definded in an enclosing scope must be final or effectively final.

Exakt das ist das Problem: Du hast eine lokale Variable. - Also eine Variable, die in einer deiner Methoden deklariert ist und mit dem Ende der Methode seine Gültigkeit verliert. 

Nachdem du aber einen Listener in der Methode zuweist durch Implementation einer anonymen inneren Klasse, besteht dessen Gültigkeit über diese die Methode hinaus. Demnach würdest du eine Variable aktualisieren, dessen Gültigkeit bereits erloschen ist:

Daher geht dies nicht:

private void test() {
   int x = 0;
   btnGelb.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent event) {
        x++;
      }
   }
}

Die Lösung wäre entsprechend: Die Variable als Instanz-Variable zu deklarieren:

private int x = 0;

private void test() {
btnGelb.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent event) {
x++;
}
}
}
...zur Antwort