• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Probleme mit Java

John

Macoun
Registriert
08.06.09
Beiträge
119
Guten Abend,
heute haben wir in der Schule mit Java angefangen.
Eigentlich recht einfach, wobei wir eigentlich noch nichts richtiges gemacht haben.
Zum Einstieg hat uns der Lehrer ein paar Grundlagen gezeigt, die wir Zuhause ausprobieren sollen.
Zunächst war ich der Meinung, das dies kein Problem sein sollte doch Zuhause angekommen,
bin ich auf ein paar Fehler gestoßen.
Zunächst ersteinmal der Quellcode:

Code:
package sequenz;
import java.io.Console;
import java.io.IOException;

public class ErstesProgramm {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		// Deklaration
		int alter = 0;
		double groesse = 170.8;
		char geschlecht = 'm';
		boolean verheiratet = false;

		// Programmkopf
		Console.println("\t\t************************************");
		Console.println("\t\t# Name: John                 #");
		Console.println("\t\t# Problem: Erstes Progamm          #");
		Console.println("\t\t# Datum: 02.09.2009                #");
		Console.println("\t\t************************************");

		// Eingabe
		Console.println("# Eingabe:");
		Console.print("\tDein Alter = ");
		alter = Console.readln();

		// Verarbeitung
		alter=alter+10;
		
		// Ausgabe
		System.out.println("# Ausgabe:");
		System.out.println("# Ihr Alter: " + alter);
		System.out.println("# Ihre Größe: " + groesse);
		System.out.println("# Ihr Geschlecht: " + geschlecht);
		System.out.println("# Verheiratet: " + verheiratet);

		// Programmende
		System.out.println("\t\t************************************");
		System.out.println("\t\t#      P R O G R A M M E N D E     #");
		System.out.println("\t\t************************************");
	}
}

Führe ich das ganze dann als Java Application aus, bekomme ich folgende Erros:

Code:
Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	The method println(String) is undefined for the type Console
	The method println(String) is undefined for the type Console
	The method println(String) is undefined for the type Console
	The method println(String) is undefined for the type Console
	The method println(String) is undefined for the type Console
	The method println(String) is undefined for the type Console
	The method print(String) is undefined for the type Console
	The method readln() is undefined for the type Console

	at sequenz.ErstesProgramm.main(ErstesProgramm.java:19)

Ich habe x-mal nachgeschaut, ich habe den Code 1 zu 1 aus der Schule übernommen,
und dort hat es funktioniert. Ich denke, dass es irgendwas mit meiner Java-Version zu
tun haben könnte, doch weiß ich leider nicht wie ich das Problem beheben könnte.
Zur Not, könnte ich das ganze nochmal auf meiner Dose ausprobieren,
wozu ich eigentlich keine Lust habe, da das Arbeiten am Mac doch um einiges entspannter ist ;)
So far
John
 

Nighthawk

Linsenhofener Sämling
Registriert
16.12.06
Beiträge
2.558
Soll wohl eher System.out.println() bzw. System.out.print() bzw. System.in.readln() heissen. Console.bla ist meiner Meinung nach nicht in der Standard-API und wird deswegen wohl nur unter Windows funktionieren.
Mit der oben genannten Methode funktioniert es auf jeden Fall und so macht man es normalerweise auch.

EDIT: Okay, Bezierkurve hat Recht. Das gibt's seit JRE 1.6 und hat nichts mit Windows zu tun.
 

bezierkurve

Halberstädter Jungfernapfel
Registriert
12.06.05
Beiträge
3.860
JavaDoc sagt:
Console […] Since: 1.6
.

Und wenn du im Terminal „java -version“ wirst du vermutlich rausfinden, dass die JRE 1.5 aktiv ist. Soweit ich weiß, kannst du die Standard-JRE im Dienstprogramm „Java-Einstellungen.app“ ändern.

Oder falls du Eclipse oder eine andere IDE nutzt, direkt in den dortigen Programm-/Projekteinstellungen.
 

John

Macoun
Registriert
08.06.09
Beiträge
119
Hmm, komisch, wenn ich im Terminal "java -version" eingebe, kommt vollgendes bei raus:
Code:
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03-219)
Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02-90, mixed mode)
Das müsste ja dann eigentlich heißen, dass auch "console.println()" funktionieren müsste,
wenn ich mich nicht irre.
 

bezierkurve

Halberstädter Jungfernapfel
Registriert
12.06.05
Beiträge
3.860
Mmmmh. Ich habe mir gerade noch mal deinen Code von oben angechaut, aber der passt ja gar nicht zur Console-API. Sicher, dass ihr die java.io.Console genutzt habt?
 

John

Macoun
Registriert
08.06.09
Beiträge
119
Ich bin mir eigentlich ziemlich sicher. Wir nutzen in der Schule auch Eclipse,
nur hat die Windows Version. Wir haben zunächst den Code geschrieben.
Dann hat uns der Lehrer erklärt das wir bei "Console" einen Error erhalten,
aber den einfach durch Quick-Fix bzw. den Import beheben können, dass gleiche
habe ich dann auch Zuhause gemacht. Code geschrieben und bei "Console", Quick-Fix benutzt.
Was mir eben aufgefallen ist, als ich den Code aus der Schule nochmal durchgegangen bin, dass
"import java.io.Console;" gar nicht mehr aufgelistet ist. Ich habe es auch einmal versucht dies
wegzulassen, doch dann taucht der Error wieder auf.
 

Guy.brush

Weißer Winterkalvill
Registriert
15.12.08
Beiträge
3.545
Ohne jetzt den Code genauer betrachtet zu haben, sag ich mal Folgendes dazu:
Wie bezierkurve schon gesagt hat, musst du es auch in Eclipse umstellen, wenn du es benutzt. Es kann trotzdem noch die 1.5.0 Version verwenden...
Einfach bei Installed JREs und Compiler einstellen bzw. hinzufügen.

gkVrvJG9RMMo8dJXodTtQb1EBmLi5aFz_o.png
 

John

Macoun
Registriert
08.06.09
Beiträge
119
Habe eben mal nachgeschaut, es war alles schon auf 1.6 gestellt.

Screen01.png


screen02.png


Da ich mit dem "Consolen-Problem" nicht weiterkomme, habe ich ersteinmal
alle Console.println() durch System.out.println() ersetzt.
Dannach hat alles, auf den ersten Blick auch funktioniert, doch gab es ein Problem,
die Ausgabe klappt soweit, doch wird das Alter irgendwie nicht korrekt übernommen:

# Eingabe:
Dein Alter = 5
# Ausgabe:
# Ihr Alter: 53

Quellcode:

package sequenz;
import java.io.IOException;

public class ErstesProgramm2 {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// Deklaration
int alter = 0;
double groesse = 170.8;
char geschlecht = 'm';
boolean verheiratet = false;

// Programmkopf
System.out.println("\t\t************************************");
System.out.println("\t\t# Name: John #");
System.out.println("\t\t# Problem: Erstes Progamm #");
System.out.println("\t\t# Datum: 02.09.2009 #");
System.out.println("\t\t************************************");

// Eingabe
System.out.println("# Eingabe:");
System.out.print("Dein Alter = ");
alter = System.in.read();

// Verarbeitung

// Ausgabe
System.out.println("# Ausgabe:");
System.out.println("Ihr Alter: " + alter);
System.out.println("Ihre Größe: " + groesse);
System.out.println("Ihr Geschlecht: " + geschlecht);
System.out.println("Verheiratet: " + verheiratet);

// Programmende
System.out.println("\t\t************************************");
System.out.println("\t\t# P R O G R A M M E N D E #");
System.out.println("\t\t************************************");
}
}

Wegen dem "Consolen-Problem" werde ich morgen mal mit meinem Lehrer sprechen.
 

Guy.brush

Weißer Winterkalvill
Registriert
15.12.08
Beiträge
3.545
das Problem ist, dass System.in.read() bytes einliest, dadurch wir der ASCII Wert von 5 (= 53) ausgegeben.
Ich empfehle dir die Klasse Scanner, Beispiel:

Code:
import java.util.Scanner;

public class Beispiel{

	public static void main(String[] args) {
		
	Scanner sc = new Scanner(System.in);
	int alter = 0;
	double groesse = 0.0;

	if(sc.hasNextInt()) alter = sc.nextInt();
	System.out.println(alter);
        if(sc.hasNextDouble()) groesse = sc.nextDouble();
        System.out.println(groesse);

        //usw...
        }

}
 
Zuletzt bearbeitet:
  • Like
Reaktionen: John