Hallo ich möchte eine Variable um 1 hochzählen lassen wenn eine if bediengung erfüllt ist. Die Variable wird über ein Label sichtbar gemacht. Mein Problem besteht darin dass eine Variable die Final ist nicht mehr geändert werden kann .
Code:
final int zahl;
zahl = 0;
if ( )
{zahl++}
final Label lbl = new Label(""+zahl);
Weil es in den meisten Fällen guter Stil ist. Warum sollte zB lbl nicht final sein, das wird vermutlich nie neu zugewiesen werden müssen - das neu zuweisen wäre in den meisten Fällen nur Fehlerquelle.
Aye, stimme ich dir zu. ABER - es gibt immer ein aber - jedes mal "final" vor Alles zu schreiben ist ein riesiger Noise und behindert den Lesefluss. Darum kann der Java-Compiler, in Java 8 mit effective final, das selbst induzieren und hält das auch.
Final sollte immer bewusst eingesetzt werden und dient als Stilmittel für, sagen wir zum Beispiel mal, immutable Klassen.
int a = 0;
int b = 0;
JLabel a = new JLabel("" + a);
leftPanel.add(a, "cell 1 2");
JLabel b = new JLabel("" + b);
leftPanel.add(b, "cell 1 3");
btnWerteAuf.addActionListener(new ActionListener() { // alle Werte Zurücksetzen
public void actionPerformed(ActionEvent arg0) {
a = 0;
b = 0;
}
});
final Scanner scanner = new Scanner(chosenPort.getInputStream());
Thread thread = new Thread(){
@Override public void run() {
while(scanner.hasNextLine()) {
try {
String sb = scanner.nextLine();
Input.setText(Input.getText()+ "\n" + sb); // Textarea schreibt jeden input in eine neue Zeile und löscht den altren nicht
Input.setCaretPosition(Input.getText().length()); //Textarea scrollt automatisch mit text nach unten
FileWriter fw = new FileWriter("c:\\Users\\test.txt");
fw.write(sb.toString());
//fw.write(System.getProperty("line.separator"));
fw.write(Input.getText() + "\r\n" + sb + "\r\n");
if (sb.contains("a")) {
a++;
}
//if (sb.contains("b"))
//{b++;}
Danke, für die Antworten aber bei mir gehts noch nicht. Hier mein Code:
1. Bevor du Hilfe von mir bekommst, solltest du den Code so formatieren, dass man was lesen kann. Vielleicht sogar JAVA-Tags statt CODE-Tags verwenden?
2. Warum gibt es wohl int wie auch JLabel mit dem Namen "a" ?
3. Ansonsten. Lies dir nochmal meinen vorherigen Beitrag durch. Nur weil du Integer-Werte setzt, änderst du noch keinen Inhalt von JLabels... du musst setText verwenden.
Danke für die Antwort: hier nocheinmal neu . Mein Problem liegt darin dass mir Eclipse sagt , ich muss die Variable final machen , damit ich sie im Thread nutzen kann, dadurch kann ich aber den Wert der Variable nicht mehr ändern.
Code:
int a = 0;int b = 0;
JLabel lbla = new JLabel("" + a);
leftPanel.add(lbla, "cell 1 2");
JLabel lblb = new JLabel("" + b);
leftPanel.add(lblb, "cell 1 3");
btnWerteAuf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
a = 0;
b = 0;
}
});
final Scanner scanner = new Scanner(chosenPort.getInputStream());
Thread thread = new Thread(){
@Override public void run() {
while(scanner.hasNextLine()) {
try {
String sb = scanner.nextLine();
Input.setText(Input.getText()+ "\n" + sb);
Input.setCaretPosition(Input.getText().length());
FileWriter fw = new FileWriter("c:\\Users\\test.txt");
fw.write(sb.toString());
//fw.write(System.getProperty("line.separator"));
fw.write(Input.getText() + "\r\n" + sb + "\r\n");
if (sb.contains("a")) {
a++;
lbla.setText(""+a);
}
if (sb.contains("b"))
{ b++;
lblb.setText(""+b);
}