• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Mein Java Taschenrechner funkt. nicht :(

Truthahn0

Newbie
Hallo Leute!

Da dies mein 1. Post hier ist möchte ich mich für etwaige Formfehler usw. schon im Voraus entschuldigen ;)

Auf jeden Fall zum Problem:
Ich soll einen Taschenrechner mit Java programmieren (Grundrechenarten: +, -, * und / ) der dann in der console ausgeführt werden soll. Als editor muss ich Jedit verwenden.

mein Code sieht wie folgt aus (ihr werdet merken dass ich absoluter Anfänger bin ;) ) aber der compiler will ihn wegen meiner 'char' definition nicht ausführen :( kann mir jemand helfen? MfG Truthahn

Code:
public class rechner
{
	public static void main( String [] args) 
	{
	java.util.Scanner einlesen = new java.util.Scanner (System.in) ;
	int a, b, ergebnis;
	char x;
	
	
	while ( einlesen.hasNext()) {
		if ( einlesen.hasNextInt()){
			a = einlesen.nextInt() ;
		}
		else {
			System.out.println( "FALSCHE EINGABE! Benuetzung: a b 'Operand'!" ) ;
			break;	
		}
		if ( einlesen.hasNextInt()) {
			b = einlesen.nextInt() ;
		}
		else {
			System.out.println( "FALSCHE EINGABE! Benuetzung: a b 'Operand'!" ) ;
			break;
		}
		if ( einlesen.hasNextChar()) {
			x = einlesen.nextChar() ;
		}
		else {
			System.out.println( "Ungültiger Operand!" ) ;
			break;
		}
		
			switch (x)
			{
				case '+': ergebnis = a + b; break;
				case '-': ergebnis = a - b; break;
				case '*': ergebnis = a * b; break;
				case '/': ergebnis = a / b; break;
				default: System.out.println( "Ungültiger Operand!" ) ; break;
			}
	}
	System.out.println( "Ergebnis: " + ergebnis ) ;
}
}
 
OP
T

Truthahn0

Newbie
also das mit dem compiler hat sich erledigt. das programm wird endlich mit allen operationen richtig ausgeführt.

eines ist jedoch noch falsch.

die eingabe soll folgendermaßen erfolgen:

zahl1 zahl2 operand

das programm sollte allerdings wenn man zahl1 und zahl2 eingibt und operand auslässt nicht in die nächste zeile springen sondern eine fehlermeldung ausgeben.

wie kann ich das nun machen?

mfg

PS:
der code sieht nun folgendermaßen aus:
Code:
public class rechner
{
	public static void main( String [] args) 
	{
		java.util.Scanner einlesen = new java.util.Scanner (System.in) ;
		int a, b, ergebnis;
		String operator;
	
		char x;
		ergebnis = 0;
		operator = "";
		a = 0;
		b = 1;
		while ( einlesen.hasNext()){
			if ( einlesen.hasNextInt()){
				a = einlesen.nextInt() ;
			}
			else {
				System.out.println( "FALSCHE EINGABE! Benuetzung: a b 'Operand'!" ) ;
				break;
			}
			if ( einlesen.hasNextInt()) {
				b = einlesen.nextInt() ;
			}
			else {
				System.out.println( "FALSCHE EINGABE! Benuetzung: a b 'Operand'!" ) ;
				break;
			}
			if ( einlesen.hasNext()) {
				operator = einlesen.next() ;
				break;
			}
			else {
				System.out.println( "Ungueltiger Operand!" ) ;
				break;
			}
			
		}
		x = operator.charAt(0);
		switch (x)
		{
			case '+': ergebnis = a + b; break;
			case '-': ergebnis = a - b; break;
			case '*': ergebnis = a * b; break;
			case '/': ergebnis = a / b; break;
			default: System.out.println( "Ungueltiger Operand!" ) ; break;
		}
		
		System.out.println( "Ergebnis: " + ergebnis ) ;
		
		
	}
}
 

oc2pus

Ultimate Guru
public static void main( String [] args)
du kannst die Anzahl der eingegeben Parameter abfragen (args.length)
und das hasNext Gedöns vergessen, weil in args[1] der erste EIngabewert steht etc. args[0] = Programmname!

Beispiel:
for(int i=0; i < args.length; i++)
System.out.println( args );

btw: java kann Deklaration UND Initialisierung in einer Zeile:
int a, b, ergebnis;
String operator;

char x;
ergebnis = 0;
operator = "";
a = 0;
b = 1;

besser so:
String operator = "";
char x;
int ergebnis = 0;
int a = 0;
int b = 1;

und warum ist x ein char und kein Character ?
 

oc2pus

Ultimate Guru
derMani schrieb:
und warum ist x ein char und kein Char ?

Warum Wrapperklassen verwenden, wenn man mit char einen brauchbaren primitiven Datentyp für diese Angelegenheit hat?

Ist doch Geschmackssache ;)
jo, weil man damit dann von hinten durch die Brust ins Auge sowas braucht:
x = operator.charAt(0);

ist sozusagen flüssiger wie flüssig ... oder ?
<SARKASMUS-MODE-AN>vielleicht wandeln wir es erst noch in einen Collection-Typ um, oder wie ?<SARKASMUS-MODE-AUS>
 

derMani

Hacker
Wovon redest du? Was haben nun Collections hier zu suchen?

Sorry aber die character-zuweisung ist eine absolut legitime Anweisung

Code:
charAt
public char charAt(int index)
Returns the char value at the specified index. An index ranges from 0 to length() - 1. The first char value of the sequence is at index 0, the next at index 1, and so on, as for array indexing. 

If the char value specified by the index is a surrogate, the surrogate value is returned. 

Specified by:
charAt in interface CharSequence
Parameters:
index - the index of the char value. 
Returns:
the char value at the specified index of this string. The first char value is at index 0. 
Throws: 
IndexOutOfBoundsException - if the index argument is negative or not less than the length of this string.

Was ist daran von hinten durch's auge?
Man braucht doch oft einzelne Characterwerte aus einem String... es ist doch durchaus legitim einem primitiven Datentypen, in diesem Falle "char", einen Rückgabewert einer Funktion zuzuweisen, der in diesem falle auch "char" ist.
Beim Einsatz einer Wrapperklasse würde hier GENAU das gleiche passieren, nur dass man halt mit einem Objekt vom Typ Character arbeitet und nicht mit einer variablen.

Btw. die Klasse "Char" wie du es erzählt hast gibt es gar nicht, wahrscheinlich meintest du "Character"

http://java.sun.com/javase/6/docs/api/java/lang/Character.html

Gruß
Mani
 
OP
T

Truthahn0

Newbie
Hey Leute, danke für die prompte Unterstützung usw. aber ich bin Neuling in der Programmierwelt, ihr helft mir leider nicht mit kurzen comments in denen ihr die Vorschläge anderer als zu kompliziert beschreibt.

einfach nur posten was ihr anders machen würdet mit einer kurzen verständlichen Erklärung warum ;)

nichts für ungut aber ich versteh sonst wirklich nur Bahnhof ;)

lg
 
Oben