Java Variablenfehler?

...komplette Frage anzeigen

2 Antworten

Dein Problem kommt daher, dass du zwar istPositiv als Boolean deklarierst, ihm aber keinen Wert zuweist. 

Einfach diese Zeile

boolean istPositiv;

in diese Zeile ändern:

boolean istPositiv = false;

genauso bei den Variablen. Man sollte Variablen (wenn sie keine Objektvariablen sind) eigentlich bei der Deklaration auch gleich mit initialisieren.

double zahl1 = 0.0;

String eingabe = "";
boolean istPositiv = false;
BinaryGod 16.07.2017, 17:37

aber wenn man istPositiv mit false gleich einen wert zuweist, wie kann er dann noch in einem anderen fall true sein?

0
xxxcyberxxx 16.07.2017, 17:39
@BinaryGod

Weil der Wert nicht fest ist (dann müsstest du ein "final" davor setzen) - er kann immer noch verändert werden.

Direkt nach der Deklaration und Initialisierung kommt in deinem Fall die Eingabe und daraufhin die Festlegung des booleans über die If-Else-Verzweigung.

Du überschreibst den Wert auf jeden Fall - entweder mit true oder mit false

1
BinaryGod 16.07.2017, 17:39

Ich konnte es zwar gerade compilen, aber als ich es ausgeführt hab und 8 eingegeben hab stand 56.0 ist Positiv! und nicht 8...

0
xxxcyberxxx 16.07.2017, 17:48
@BinaryGod

Ja, und der Fehler liegt hier:

zahl1 = eingabe.charAt(0);

Du nimmst den letzten Character der Eingabe und die Zeile sucht in der ASCII-Tabelle (http://www.torsten-horn.de/techdocs/ascii.htm) den entsprechenden Dezimalwert raus. 

Wenn du ein einzelnes a eingibst, würde z.B. 97 als Zahl rauskommen, bei einem ganzen Wort  der entsprechende Wert des ersten Buchstaben

1
BinaryGod 16.07.2017, 17:52
@xxxcyberxxx

In meinem Buch steht das wie in java üblich wird mit 0 beginnend durchnummeriert wird, somit wird mit eingabe.charAt(0); das erste eingegebene Zeichen gewählt, egal wie viele man eingibt. (Habs anders als im Buch vormuliert)

0
xxxcyberxxx 16.07.2017, 17:56
@BinaryGod

Das würde auch passen, aber du nimmst in diesem Fall den Character-Wert der ASCII-Tabelle dieses Zeichens. 

Um das ganze etwas schöner zu schreiben (und mit Fehlerbehandlung, was eventuell später kommt, sollte man einen Text eingeben):

public class Zahlentest {
public static void main(String[] args) {
String eingabe = JOptionPane.showInputDialog("Geben sie eine Zahl ein: ");
try {
double zahl1 = Double.parseDouble(eingabe);
boolean istPositiv = zahl1 >= 0;
if (istPositiv == true) {
JOptionPane.showMessageDialog(null, zahl1 + " ist Positiv!");
} else {
JOptionPane.showMessageDialog(null, zahl1 + " ist Negativ!");
}
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Bitte eine Zahl eingeben", "Error", JOptionPane.ERROR_MESSAGE);
}
} }
1
BinaryGod 16.07.2017, 18:01
@xxxcyberxxx

Hab gerade deinen Code probiert und da kommen gleich 5 Errors (hab nix Importiert, das war fehler)

0
BinaryGod 16.07.2017, 18:05
@xxxcyberxxx

ja hatte nur kopiert xD, hab import javax.JOptionPane; nicht eingefügt, Allerdings was sagt eigentlich in meinem Code aus, das es aus der ASCII Tabelle das Nehmen soll?

0
xxxcyberxxx 16.07.2017, 18:06
@BinaryGod

dass du sagst, dass du den "charAt" haben willst. Er sucht nun in der Tabelle den Char-Wert für dein erstes eingegebenes Zeichen

0
xxxcyberxxx 16.07.2017, 18:09
@BinaryGod

Nein. Denn du möchtest den Char haben. Ein Char ist an sich nicht der Wert des Zeichens, sondern das Zeichen selbst. Und dieses hat nunmal (laut ascii-tabelle) den Wert 49

0
boolean istPositiv;

ersetzen mit

boolean istPositiv = false;

Außerdem ersetz deine komische if-Else Konstruktion mit der Zeile:

istPositiv = zahl1 >= 0;

MFG xGlumi

BinaryGod 16.07.2017, 17:49

Auch da kommt nach der eingabe von z.B. 9 das: 57.0 ist Positiv!

0
xGlumi 16.07.2017, 18:11
@BinaryGod

Evt. ein Konvertierungsfehler?
Warum weist du auch deiner DOUBLE Variable einen CHAR zu?

Willst du nun mit Double fortfahren oder mit nem Char ^^

Wandle den char Input (charAt[0]) in einen Double um bevor du ihn in die zahl1 packst

MFG xGlumi

0

Was möchtest Du wissen?