Java Keine Eingabeaufforderung bei Eclipse etc.

someguy

Lieutenant
Registriert
Sep. 2004
Beiträge
550
Hallo,

ich habe mich seit ner Zeit mal wieder was an Java gesetzt und habe erst einmal versucht ein simples Quadrierungsprogramm zu schreiben.

Der Code müsste einwandfrei sein, jedoch mag Java einfach richtig das ganze Programm ausgeben und wirft mir ständig eine NullPointerException raus wegen der Zeile mit "Integer.parseInt..." , obwohl ich nicht einmal zur Eingabe komme, weshalb meiner Meinung nach die Exception kommt.

Code:
public class aufgabe7 {

	public static void main(String[] args) {

		System.out.println("Geben sie eine Zahl ein:");
	    int zahl = Integer.parseInt(System.console().readLine());

		if (zahl % 2 == 0) {
			System.out.println("Die eingegebene Zahl ist gerade.");
		} else {
			System.out.println("Die eingegebene Zahl ist ungerade.");
		}

		System.out.println("Was ist das Quadrat der eingegebenen Zahl?");

		int usersqr = Integer.parseInt(System.console().readLine());

		if (usersqr == Math.pow(zahl, 2)) {
			System.out.println("Richtig!");
		} else {
			System.out.println("Falsch, das richtige Ergebnis ist x");
		}
	}
}

Oder habe ich doch irgend einen simplen Fehler drin?
 
Hi,

"System.console().readLine()" ist mir persönlich unbekannt. Sieht sogar fast nach C# aus ;)
Mach mal die Benutzereingabe so:

Code:
import java.util.Scanner;
...
Scanner keyboard = new Scanner(System.in);
...
int zahl = keyboard.nextInt();
...

So haben wir es auch im Studium gelernt...

GreeZ Benny
 
Zuletzt bearbeitet: (Tippfehler...)
benny hat recht:
dein programm liest einfach nur die letzte zeile aus der konsole, anstatt eine eingabe zu erwarten. wenn du vorher system.out.println("5"); machst, wird er dir die 5 auslesen.

scanner sind das probate mittel.
 
Also ich bin mir ziemlich sicher, dass "System.console().ReadLine()" auch in Java geht Oo Schließlich zeigt es ja auch die Auto Completition von Eclipse an.

Habe mit Google auch ähnliches gefunden, in Java.

Und in der Vorlesung haben wir das garantiert ohne Scanner oder andere zusätzliche Pakete.
 
warum sollte die Autocompletion das auch nicht vorschlagen. Es ist ja nicht falsch, nur eben nicht das was du willst. Da sind die Scanner Mittel der Wahl oder sowas in der Art:

Code:
BufferedReader in = new BufferedReader( new InputStreamReader( System.in );
String s = in.readLine();

Ansonsten hat thes33k recht.
 
FunnyName schrieb:
Ansonsten hat thes33k recht.

Hat er nicht. Das ist totaler Quatch.
readline() liest garantiert nicht die vorherige Zeile eines prints... Es macht genau das, was man erwarten würde, es wartet auf eine Eingabe.

Mit deinem Code ist alles in Ordnung.
Dein Problem ist, dass System.console() null zurückliefert. Lies dir die entsprechende API Doc dazu durch.

Um es kurz zu machen, führst du deinen Code über die Windows Shell oder Linux Console via 'java Name' aus, wird es funktionieren. In den meisten IDEs nicht (IntelliJ und Eclipse, Netbeans weiß ich grad nicht), da es eben keine Standard-Console gibt, von der du lesen könntest. Die IDEs leiten alles direkt in einen eigenen Prozess ohne Console. Daher funktioniert dein Code nicht, wenn du ihn aus einer IDE startest.

Zur Lösung, entweder du sagst deiner IDE sie soll dein Project in einer Console starten oder du verwendest wie oben schon geschrieben den Scanner oder den StreamReader.

Hoffe das hilft.

Viele Grüße
 
da gibt man einmal jemandem recht ohne selbst zu recherchieren und... :rolleyes:

system.console ist "neu" ab java 6.

allerdings frag ich mich wie Scanner/Inputstream dann an ihre "command line" kommen innerhalb einer IDE (grad keine zeit das auszuprobieren)
 
@holy

Danke, aber in Eclipse gibt es doch beim Ausführen eine Konsole unten, wo auch meine Ausgabe erscheint, aber direkt danach die Exception kommt.
Ansonsten, wie kann ich denn die Ausgabe in eine Konsole umleiten, falls die eben genannte Konsole nicht die gewünschte ist?

Ich mein damals hätte ich dort einfach Eingaben tätigen können und alles lief.
 
Schaust du hier.

http://download.oracle.com/javase/6/docs/api/java/io/Console.html

Eclipse hat es glaub ich bis 3.2 oder 3.3 unterstützt.
Benutze Eclipse nicht, daher kann ich dir nicht genau sagen, wie du den Launcher da änderst.

Für IntelliJ:

1. Irgendwo ne *. bat anlegen, Launch.bat, der Name bleibt dir überlassen mit Inhalt 'start %*' (ohne die '')
2. In der IDE: Settings -> External Tools -> Add
2.1 Beliebigen Namen eingeben, z.B. CMD-Launcher
2.2 Program -> Den Pfad zu deiner .bat Datei
2.3 Parameters -> jetzt wird es etwas Kniffliger ;) Wahrscheinlich irgendwie sowas $JDKPath$\bin\java $FileClass$". Über den 'Insert Macro' Button kriegst du eine Preview für den Inhalt. Du musst den normalen Launcher "nachbauen".
3. Über das Tools Menü oder direkt per Rechtsklick auf deine Klasse, kannst du dann das Tool wählen.
 
Wieso hackt ihr alle auf mir rum?! Benny hats zu erst gesagt! :D

Jetzt mal im ernst:
Habs nicht gewusst, tschuldigung. Dass Java nun Ausgaben per stdout ordentlich trennt, ist nur lobenswert. Codetechnisch sind die von mir vorgeschlagenen Mittel trotzdem probat, weil sie unabhängiger arbeiten und rückwärtskompatibel sind (ohne jetzt nachgeschaut zu haben, ob scanner deprecated sind...).
 
Zurück
Oben