Compiler-Fehler Illegal start of expressions

A

Anonymous^^

Gast
Hallo zusammen,
hab letztes Jahr meine Ausbildung als IT-SE beginnen und dachte mir gerade,
dass ich mal wieder etwas in Java üben könnte.

Bis jetzt haben wir in der Schule mit Java weder GUI noch andere komplexe Sachen gemacht.

Ich dachte mir ich programmiere einen Taschenrechner in einfachster Methode,
der auch nur + , - , / und * ausrechnen kann.

Die zwei Zahlen die berechnet werden sollen wollte ich als Aufrufparameter in mein Programm bringen,
während ich die Rechenzeichen über ein import machen wollte ( Hatten wir in der Schule zwar noch nicht
aber hab mal bisschen rumgesucht ;) )

Gut möglich, dass ihr euch denkt was macht der denn ? ( Denke es ist trtz ein brauchbarer Ansatz, auch wenn es warsch wesentlich einfacher mit paar mir unbekannten befehlen möglich ist )

Wenn ich es Compilieren will sagt er aber immer bei meinen IF anweisungen das hier: "Illegal start of expressions"

Java:
import java.util.Scanner;

class Rechner
{
public static void main(String[] args)
	{
	//Deklaration
	int zahl1;
	int zahl2;
	double ergebnis;
	
	System.out.println("Bitte geben Sie zuerst die erste Zahl, darauffolgend die zweite Zahl und zuletzt das Rechenzeichen ( + ; - ; / ; *) ein");
	
	zahl1 = Integer.parseInt(args[0]); //AUFRUFPARAMETER1
	zahl2 = Integer.parseInt(args[1]); //AUFRUFPARAMETER2
	
	String inData;
    Scanner scan = new Scanner( System.in );

    System.out.println("Geben Sie das Rechenzeichen ein:");
    inData = scan.nextLine();

    if(inData.equals(+))
	{
	System.out.println(zahl1+zahl2);
	}
	else if(inData.equals(-))
	{
	System.out.println(zahl1-zahl2);
	}
	else if(inData.equals(*))
	{
	System.out.println(zahl1*zahl2);
	}
	else if(inData.equals(/))
	{
	System.out.println(zahl1/zahl2);
	}
	else(System.out.println("Kein korrektes Rechenzeichen, bitte starten Sie das Programm erneut")
	
	
	}
}

würde mich freuen, wenn ihr mir behilflich sein könntet :)

LG
 
A

Anonymous^^

Gast
Ach komm, sowas lächerliches :O
xD
hmm habs jetzt soweit hinbekommen( Syntaxfehlerfrei ), wenn ich mein Bytecode aber ausführen will gibt er mir nur meine erste System.out... aus und danach steht da : Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Rechner.main(rechner.java:14)

absolut keine ahnung was des schon wieder soll bzw was ich damit anfangen soll :/

Danke für die davorige und hoffentlich auch diese Lösung ;)
 

Final_Striker

Top Contributor
Java:
    zahl1 = Integer.parseInt(args[0]); //AUFRUFPARAMETER1
    zahl2 = Integer.parseInt(args[1]); //AUFRUFPARAMETER2

Du liest in deinem Programm die übergebenen Parameter aus, übergibst deinem Programm beim Start aber keine mit.
 
A

Anonymous^^

Gast
hmm .. das versteh ich jetzt nicht ganz :/
kannst du des bisschen genauer erläutern bitte ? :)
 
S

SlaterB

Gast
angenommen die Welt wäre noch ohne diese Fehlermeldung, versteht du dann was diese beiden Zeilen grundsätzlich bedeuten,
welche Funktion sie haben?
was sind deiner Meinung nach args[0], args[1] bzw. args selber?
 
A

Anonymous^^

Gast
über "public static void main(String[] args)"
erstelle ich doch ein Array, aus dem ich später die Werte lesen kann oder?

args[0] ist halt der erste Wert im Array
und args[1] der Zweite, oder bin ich da vollkommen falsch informiert ?
 
S

SlaterB

Gast
das klingt erstmal richtig, interessant wird nun woher die args-Werte herkommen,
wenn du dem Programm beim Aufruf keine Parameter mitgibts, dann ist args eben leer, dann kommt deine Exception

erst jetzt habe ich nachgeschaut und wie erwartet
> System.out.println("Bitte geben Sie zuerst die erste Zahl, darauffolgend die zweite Zahl und zuletzt das Rechenzeichen ( + ; - ; / ; *) ein");
gefunden,
wenn du von der Konsole einlesen willst, dann ist der Scanner dafür da, nicht die args

für args wie gesagt Startparameter, etwa
> java Programmname 1 2
 
A

Anonymous^^

Gast
Ach komm :(

Des ist ja doof, das heißt ja dass ich entweder alles über import oder alles über die Aufrufparameter mache. Wenn man erst : "java Rechner 2 5" eingibt und danach erst das Rechenzeichen, ist das irgwie Themaverfehlung :/ des versteht ja keiner ausser mir und Leuten, die den Quelltext vor sich haben^^

Danke ;)
 
G

Gast2

Gast
Mach doch entweder alles über die Aufrufparameter:
Code:
java Programmname 1 + 2 + 3 + 4
Oder halt direkt alles per Scanner. Oder hab ich irgendwas nicht verstanden?
 
A

Anonymous^^

Gast
Geschafft :D:D

Java:
import java.util.Scanner;

class Taschenrechner	
{	
public static void main(String[] args)
	{ 
	double ergebnis;
	// Zahl1
	String number1st;
    Scanner scan = new Scanner( System.in );

    System.out.println("Geben Sie die erste Zahl ein:");
    number1st = scan.nextLine();
	double number1 = Double.parseDouble(number1st);
	
	//Rechenzeichen
	String operator;

    System.out.println("Geben Sie das Rechenzeichen ein ( + ; - ; / ; * ):");
    operator = scan.nextLine();
	
	//Zahl2
	String number2st;

    System.out.println("Geben Sie die zweite Zahl ein:");
    number2st = scan.nextLine();
	double number2 = Double.parseDouble(number2st);
	
	//Rechenzeichen bestimmen
	
	if(operator.equals("+"))
	{
	ergebnis=(number1+number2);
	System.out.println("Das Ergebnis der Addition " + number1 + " + " + number2 + " lautet: " + ergebnis);
	}
	else if(operator.equals("-"))
	{
	ergebnis=(number1-number2);
	System.out.println("Das Ergebnis der Subtraktion " + number1 + " - " + number2 + " lautet: " + ergebnis);
	}
	else if(operator.equals("*"))
	{
	ergebnis=(number1*number2);
	System.out.println("Das Ergebnis der Multiplikation " + number1 + " * " + number2 + " lautet: " + ergebnis);
	}
	else if(operator.equals("/"))
	{
	ergebnis=(number1/number2);
		if(number2+1==1)
		{
		System.out.println("Division durch 0 nicht moeglich");
		}
		else
		{
		System.out.println("Das Ergebnis der Division " + number1 + " / " + number2 + " lautet: " + ergebnis);
		}
	}
	else 
	System.out.println("Kein korrektes Rechenzeichen, bitte starten Sie das Programm erneut");
	
	System.out.println();
	System.out.println("by Flo '11");
}
}

Jetzt wärs halt noch cool, wenn er n "loop" ( kp ob des hier auch so heißt ) drinn hätte, also dass ich ihn nicht immer wieder starten müsste mit Y/N und evtl noch mehrere Zahlen eingegeben werden könnten ( Unter beachtung von Punkt vor Strich ) meint ihr, dass ist mit meinen Kenntnissen schon möglich ? Wenn ja kleine Tipps sind immer erwünscht ;)
 
A

Anonymous^^

Gast
Hab mir überlegt noch ein GUI dazu zu machen, auch wenn ich davon absolut kein blassen schimmer hab :D
Hab mir paar Tutorials in Youtube angesehen und wollte mal fragen ob ich so auf dem Richtigen weg ( bzw. überhaupt möglichen Weg ) bin ;)
Hatte vor 2 Textfelder für je eine Zahl zu erstellen, die mit einem OK Knopf "eingegeben" werden. Unter diesen hatte ich vor Labels zu erstellen, die sich nicht verändern, in denen einfach nur "Zahl eins/zwei eingeben" steht. Darunter widerum kommen 4 Buttons für + - / *.
Hab das Problem, dass ich hier nur im Editor arbeiten kann, was mir die sache zusätzlich noch etwas erschwert xD

Java:
import java.awt.color;
import javax.swing.*;
import java.awt.event.ActionListener;

public class Fenster extends JFrame implements ActionListener(
	
	JPanel pan = new JPanel();
	JTextField numb1, numb2 = new JTextField();
	JLabel zahl1, zahl2 = new JLabel();
	JButton butok1, butok2, addi, div, sub, mul = new JButton();
	
	public Fenster() {
	getContentPanel();
	setSize(400, 400);
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	setResizable(false);
	setLocationRelativeTo(null);
	setLayout(null);
	setVisbible(true);
	
	//JPanel start
	pan.setBounds(0, 0, 400, 400);
	pan.setBackground(new color(20, 50, 90));
	setLayout(null);
	//JPanel end
	
	//JTextField start
	numb1.setBounds(10, 10, 90, 25);
	
	numb2.setBounds(260, 10, 90, 25);
	//JTextField end
	
	//JLabel start
	zahl1.setBounds(10, 40, 90, 25);
	zahl1.setForeground(new color(240, 240, 240));
	zahl1.setText("Zahl eins eingeben")
	
	zahl2.setBounds(260, 40, 260, 25);
	zahl2.setForeground(new color(240, 240, 240));
	zahl2.setText("Zahl zwei eingeben")	
	//JLabel end
	
	//JButton start
	butok1.setBounds(100, 10, 40, 25);
	butok1.setText("OK");
	butok1.addActionListener(this);
	
	butok2.setBounds(350, 10, 40, 25);
	butok2.setText("OK");
	butok2.addActionListener(this);
	
	mul.setBounds(170, 80, 20, 20);
	mul.setText("*");
	mul.addActionListener(this);
	
	div.setBounds(210, 80, 20, 20);
	div.setText("/");
	div.addActionListener(this);
	
	addi.setBounds(170, 120, 20, 20);
	addi.setText("/");
	addi.addActionListener(this);
	
	sub.setBounds(210, 120, 20, 20);
	sub.setText("/");
	sub.addActionListener(this);
	//JButton end
	
		pan.add(pan);
		pan.add(zahl1, zahl2);
		pan.add(butok1, butok2, mul, addi, sub, div);
	
	add(pan);
}
	public void actionPerformed(ActionEvent evt) {
		Object source = evt.getSource();
	
}	
	public void actionPerformed(ActionEvent evt2) {
		Object source = evt.getSource();
		
}		
	public void actionPerformed(ActionEvent evt3) {
		Object source = evt.getSource();
		
}		
	public void actionPerformed(ActionEvent evt4) {
		Object source = evt.getSource();
		
}		
	public void actionPerformed(ActionEvent evt5) {
		Object source = evt.getSource();
		
}		
	public void actionPerformed(ActionEvent evt6) {
		Object source = evt.getSource();
		
}

Wär klasse wenn ihr mir helfen könntet, wie ich das mit den ActionListener umsetzen kann.
Das mit + - * / kann ich ja wieder einfach mit if equals usw machen des glaub ich bekomm ich hin aber, dass ich die beiden Zahlen eingeben kann, mit OK bestätige und dann mit diesen Rechnen kann stellt mich vor ein riesen Fragezeichen ;)
 
S

SlaterB

Gast
A

Anonymous^^

Gast
Ja ok, dann lass ich des mit den OK Buttons lieber ;)

Java:
public void actionPerformed(ActionEvent evt) [U]{[/U]
		Object source = evt.getSource([U]???[/U]);
		
                if(source.equals(mul); [U]{[/U]
		ergebnis=(zahl1*zahl2);
		ergebnislab.setText("=" + ergebnis);
                
                if(source.equals(addi); [U]{[/U]
		ergebnis=(zahl1+zahl2);
		ergebnislab.setText("=" + ergebnis);
                [U]}[/U]

Die unterstrichenen Sachen bleiben dann offene Fragen. Die 3 ???, was gehört dann hier rein ? bleibt die Klammer leer ? Wie muss ich bei den vielen if anweisungen dann die { } setzen ?

Danke schonmal :)
 
S

SlaterB

Gast
warum sollte bei getSource() etwas rein, bevor du so eine Frage stellst schaue doch wenigstens nach ob überhaupt ein Parameter vorgesehen ist,

wie ein if mit Klammern funktioniert schreibe ich nun wirklich nicht, zumal dein vorheriger Code schon if-Blöcke enthält,

also ich verweigere fortan Antworten ;)

bedenke bei allem auch:
einzeln testen, nicht 10 ??? gleichzeitig einbauen, es müssen nicht alle Taschenrechner-Operationen sofort funktionieren, erst nur +,
und selber zumindest überlegen, welche Varianten dir einfallen, diese ausprobieren und entsprechende Fehlermeldungen posten,

wenn schon kein Wissen, dann zeigt das wenigstens Einsatz,
so eher 'ich gebe die Richtung vor, andere bitte den konkreten Code dazu schreiben'..
 
A

Anonymous^^

Gast
Ja mein Problem ist wie gesagt hab hier nur ein Editor .. und nur mit dem Editor Testen ? :/
Könnte problematisch werden.
Eine Frage hätte ich dennoch noch, auch wenn du meinst du wirst mir nichtmehr antworten...
Die Zahlen aus den Textfeldern.. bekomm ich ja indem ich "variable1 = textfeld1.getText();"
mache. Kann ich dann direkt mit Variable1 rechnen, oder habe ich diese noch als String und muss sie mit
"variable 2 = Double.parseDouble(Variable1); noch umwandeln ?

Ich weiß ausprobieren.. wie gesagt kein chance gerade :(
 
S

SlaterB

Gast
'nur ein Editor' habe ich bisher gesehen, aber nicht beachtet,
wenn du nun sagst dass du den Code auch nicht kompilierst und ausprobierst dann sage ich dir als Antwort:
na dann werde ich nicht für dich den Rest machen, extra aufwendige Forum-Behandlung, das kannst du ja nicht erwarten ;)

egal welchen Grund du für deine Lage hast, Klausur mit Handy, einsame Insel oder abstürzende Raumstation,
erst musst du wieder in die Welt der Lebenden zurückkehren und angemessen mitarbeiten, dann ist vielleicht weiter zu überlegen
 
A

Anonymous^^

Gast
Wer sagt, dass du den Rest machen sollst ?
Das war ja wohl gerade eine sehr einfache Frage für Leute die schon Jahre mit Java arbeiten.
Der Grund, dass ich nur ein Editor hab ist, dass ich gerade in der Arbeit sitze.. hatte auf meinem USB-Stick Notepad++ und die Java-Konsole die aber ca vor 2 Stunden verschwunden ist, als ich eine alte Datei unwiderruflich gelöscht habe. Der PC an dem ich gerade sitze, ist nicht meiner, und ich will / soll hier nichts installieren.

Eig wollte ich hier niemanden blöd anmachen, aber wenn es wegen der Frage aus dem letzten Beitrag eine extra-aufwendige Forum-Behandlung ist, bist du vllt der falsche als Moderator.

Wenn du kein bock hast zu helfen ( eine einfache Frage zu beantworten ) , dann lass es .. aber dann schreib bitte auch nicht in meinen Beitrag in dem ich um Hilfe bete.

Ich meine ist es schlimm zu schreiben "Ja du musst sie noch umwandeln / Nein du musst sie nicht mehr umwandeln" ? Denke wohl eher nicht wenn du mal anschaust, dass ich mir hier jedes mal meine Finger wund tipp.

Wenn ich verlangen würde, dass du für mich etwas compilierst, oder mir einen Quelltext schreibst, hätte ich das ja wohl zum ausdruck gebracht.. davon irgendetwas derartiges gelesen ? Nein ?

Wie gesagt, wenn sich jemand entbeeren sollte, sich mit dieser äusserst aufwenigen Aufgabe, (die in diesem Beitrag erwähnte Frage zu beantworten ) würde ich mich dennoch sehr freuen.

Slater, ich hoffe du nimmst das jetzt nicht als beleidigung, denn das war nicht meine Absicht.
 
S

SlaterB

Gast
keine Sorge um mich, und wenn du von Anfang an die Situation klar gemacht hättest hätte ich auch konsequent nicht geantwortet,
da es aber erst später dazu kam wollte ich dir wenigstens noch schreiben, warum ich nicht mehr antworte

und daran ist nicht zu rütteln, Fragen die du selber auch beantworten kannst wenn du erstmal an einem PC mit installierten Java (!) sitzt
werde ich aus Prinzip nicht dir als menschlicher Compiler vorspiegeln, egal wie einfach sie erscheinen mögen
 

Mofi

Bekanntes Mitglied
Ich will eigentlich nicht unhöflich sein, aber deine Frage ob du den Text aus dem Textfeld (?) parsen musst lässt sich sogar ohne Editor/IDE/Java-Installation beantworten. Dazu reicht ein bzw. mehrere Blicke in die Java Doku die man ganz bequem online sehen kann. Ein Browser und Internet scheinst du ja zu haben.
(link zur Doku: Java Platform SE 6 )

Ansonsten,versteh ich die Frage zu den Klammern der if's eh nicht? WIe soll man die schon setzen? So wie immer natürlich.

Und wennmir die Frage erlaubt ist... WARUM willst du programmieren, wenn du nur ein Editor hast und du scheinbar (?) nicht komplilieren kannst?
 
A

Anonymous^^

Gast
Mofi, danke wenigstens etwas mit dem ich was anfangen kann. Hab die Lösung gefunden.
Wusste nicht, dass etwas derartiges existiert wie gesagt benutz Java normal nur in der Schule
da gibts ja Lehrer für Fragen ;)

Als ich angefangen hab, hatte ich ja noch die möglichkeit zu kompilieren, da ich notepad++ und die Java-Konsole portable aufm USB Stick hatte, hab aber ausversehen die .cmd die die Java-Konsole geöffnet hat ausversehen mitgelöscht und wollte trotzdem noch eben versuchen so weit wie möglich zu kommen.

Jetzt kann ich auch wieder kompilieren.
 

Neue Themen


Oben