"einfache" If-Abfrage

Status
Nicht offen für weitere Antworten.

clou

Mitglied
Hallo,
ich bin absoluter Anfänger und lerne Java in einem Distanzkurs auf Schwedisch, das sind drei Probleme auf einmal :)

Ich habe folgenden Programminhalt:
Code:
int i=0;

//if (i==0) {
String sTal2 = JOptionPane.showInputDialog("Skriv in det andra talet");

String sOperator = JOptionPane.showInputDialog("Skriv in vilken operator ni vill använda\n + - * / %");

float tal1 = Integer.parseInt(sTal1);
float tal2 = Integer.parseInt(sTal2);

	if (sOperator.equals(operator[3])) {
		if (tal2==0) {

		System.out.println("sOperator: " + sOperator);
		i=0;
		}
	else i=1;
	}
i=1;
//}
Soweit so gut, abgesehen von der umständlichen Programmierung, denke ich. Aber es funzt und ich bin glücklich. Wenn ich jetzt aber die Kommentarzeichen, also die "//" in Zeile 4 und 21 entferne, funzt es nicht mehr. Warum? Es ist doch eine ganz einfache if-Abfrage, die nur ausgeführt werden soll, wenn i==0 ist. Was mache ich falsch?

Oder hilft es euch weiter, wenn ich den kompletten Code hier reinsetze? Aber meine Frage betrifft eigentlich nur den angesprochenen Teil.

LG
Clou
 

1mp

Mitglied
Kann kein Syntax fehler erkennen nur ein kleinen Logik fehler aber der hat nichts mit der if abfrage zu tun!

Hab das programm gerade bei mir mal getestet! Also funktioniert einwandfrei hab zwar die berechnungen ausgeklammert aber die if abfrage funktioniert!

Zum kleine Logik fehler

Code:
   if (sOperator.equals(operator[3])) {
      if (tal2==0) {

      System.out.println("sOperator: " + sOperator);
      i=0;
      }
   else i=1;
   }
i=1;

du setzt i immer auf 1 am ende aber fragst ab wenn was passiert soll er es auf 0 setzten sonst auf 1 und nach dem setzt du es immer auf 1 :)

MfG
 

clou

Mitglied
Hallo ihr zwei und Danke für eure Hilfe.

Was nicht funktioniert ist, dass das Prog nicht kompiliert wird. Nachdem bei 1mp alles funktioniert, habe ich jetzt genau diesen Teil des Progs in eine leere Datei kopiert. Funzt. Aaaaber: das Eigenartige ist, dass im Gesamtprogramm genau diese beiden Zeilen den Ärger machen. Ist die If-Abfrage drin (Zeile 20 und 40), wird das Prog nicht kompiliert. Ich setze mal den gesamten Code rein und hoffe auf eure Hilfe, für die ich mich schon jetzt bedanke.

Code:
//ett program som fungerar som en enkel miniräknare
import javax.swing.JOptionPane;

class Test01 {


public static void main(String [] args) {

	String [] operator = {"+", "-", "*", "/", "%"};

//genererar meddelande rutan
	JOptionPane.showMessageDialog(null,"Välkommen till min miniräknare");

//genererar inmatnings rutan
	String sTal1 = JOptionPane.showInputDialog("Skriv in det första talet");

	int i=0;

	if (i==0) {
//genererar inmatnings rutan
		String sTal2 = JOptionPane.showInputDialog("Skriv in det andra talet");

//genererar inmatnings rutan
		String sOperator = JOptionPane.showInputDialog("Skriv in vilken operator ni vill använda\n + - * / %");

//konverterar från String till int
		float tal1 = Integer.parseInt(sTal1);
		float tal2 = Integer.parseInt(sTal2);

			if (sOperator.equals(operator[3])) {
				if (tal2==0) {

//String sOperator = JOptionPane.showInputDialog("Kan inte dividera med 0. Skriv in vilken operator ni vill använda\n + - * / %");
				System.out.println("sOperator: " + sOperator);
				i=0;
				}
				else i=1;
			}
	}

float summa=0;
if (sOperator.equals(operator[0]))
	{
	summa=tal1+tal2;

	JOptionPane.showMessageDialog(null,tal1 + " " + operator[0]+ " " + tal2 + " = " + summa);//genererar meddelande rutan
	}
else if (sOperator.equals(operator[1]))
	{
	summa=tal1-tal2;

	JOptionPane.showMessageDialog(null,tal1 + " " + operator[1]+ " " + tal2 + " = " + summa);//genererar meddelande rutan

	}
else if (sOperator.equals(operator[2]))
	{
	summa=tal1*tal2;

	JOptionPane.showMessageDialog(null,tal1 + " " + operator[2]+ " " + tal2 + " = " + summa);//genererar meddelande rutan

	}
else if (sOperator.equals(operator[3]))
	{
	summa=tal1/tal2;

	JOptionPane.showMessageDialog(null,tal1 + " " + operator[3]+ " " + tal2 + " = " + summa);//genererar meddelande rutan

	}
else if (sOperator.equals(operator[4]))
	{
	summa=tal1%tal2;

	JOptionPane.showMessageDialog(null,tal1 + " " + operator[4]+ " " + tal2 + " = " + summa);//genererar meddelande rutan

	}

System.out.println("tal 1: " + tal1);
System.out.println("tal 2: " + tal2);
System.out.println("operator: " + sOperator);
System.out.println("summa: " + summa);
System.out.println("i: " + i);

System.exit(0);

	}
}

Was will ich überhaupt machen? Das Prog soll ein Minirechner sein. Man gibt zwei Zahlen ein und einen Operator. Ist die zweite Zahl==0 und der Operator ein "/" dann soll was passieren. Am Liebsten hätte ich, dass er eine Fehlermitteilung macht und zum Eingabefeld der zweiten Zahl zurück springt. Das hab ich nicht geschafft also versuchte ich die If-Abfrage und dann eben eine Fehlermeldung, dass die Eingabe so nicht geschehen darf und der Anwender nochmal den Operator eingeben soll (hier noch auf Kommentar gesetzt, Zeile 34, so lange die If nicht funzt).

Also, Leute: Ich hoffe, Ihr könnt mir weiterhelfen. Wieso funzt die If-Abfrage allein aber nicht im Gesamtprogramm?
Noch etwas: Brauch ich Zeile 84 überhaupt?

LG
Clou

P.S.: Der Logik-Fehler war in der Tat dämlich :) Danke dir 1mp.
 

Landei

Top Contributor
1) Nimm:
float tal1 = Float.parseFloat(sTal1);

2) Hilft jetzt zwar nicht mit deinem Problem, aber hier ein kleiner Tipp: Nimm für die Operatoren enums:
Code:
class Test01 {
  enum Operator {
      PLUS, MINUS, MAL, DURCH, MOD;
      public String toString() {
         switch(this) {
          case PLUS: return "+"; 
          case MINUS: return "-"; 
          case MAL: return "*"; 
          case DURCH: return "/"; 
          case MOD: return "%";
         }  
      }
      public float summa(float a, float b) {
         switch(this) {
          case PLUS: return a + b; 
          case MINUS: return a - b; 
          case MAL: return a * b; 
          case DURCH: return a / c; 
          case MOD: return a % c;
         }  
      } 
  }
  ...
  
  for(Operator op : Operator.values()) {
     if(op.toString().equals(sOperator)) {
        summa=op.summa(tal1,tal2); 
        JOptionPane.showMessageDialog(null, tal1 + " " + op+ " " + tal2 + " = " + summa);
        break; 
     }
  } 
  ...
 

Murray

Top Contributor
clou hat gesagt.:
Ist die If-Abfrage drin (Zeile 20 und 40), wird das Prog nicht kompiliert.
In solchen Fällen wäre es hilfreich, die Fehlermeldung des Compilers zu posten.
Aber ich tippe mal ( zum Ausprobieren habe ich jetzt keine Lust): im Code-Block, der durch die if-Bedingung eingerahmt wird, werden Variablen deklariert; diese Variablen sind lediglich in diesem Block sichtbar - Du verwendest sie aber auch weiter unten, und das geht nicht.
Abhilfe: Variablen vor dem Block deklarieren

clou hat gesagt.:
Noch etwas: Brauch ich Zeile 84 überhaupt?
Nein
 

clou

Mitglied
Landei: Vielen Dank. Allerdings kann ich das hier noch nicht anwenden, weil ich das noch nicht gelernt habe. Aber ich werde auf alle Fälle deine Ratschläge beherzigen, um mich weiterzuentwickeln.

Murray: Du bist der KÖÖÖÖNIIG der Java-Könige :)

Das war es, die Variabeln mussten vor der if deklariert werden. Jetzt funktioniert auch meine eigentlich geplante do while Schleife.

Danke, danke, danke euch allen bei der Hilfe. Aber keine Sorge: Ich komm wieder ;-)
 
G

Gast

Gast
ich finde auch zeile 19 etwas merkwürdig:

int i=0;

if (i==0)

?
 

clou

Mitglied
ich finde auch zeile 19 etwas merkwürdig:

int i=0;

if (i==0)

das sollte nur testen, ob die if funzt. Oder was meinst du kann ich besser machen? Ich habe das nun auch im fertigen Programm.

Das fertige Prog inkl. schwedischer Kommentare sieht nun so aus:

Code:
//ett program som fungerar som en enkel miniräknare

import javax.swing.JOptionPane;

class Projekt06 {

public static void main(String [] args) {

//deklarerar variabler
	String [] operator = {"+", "-", "*", "/", "%"};
	String sTal1;
	String sTal2;
	float tal1;
	float tal2;
	float summa=0;
	String sOperator;
	int i=0;

//genererar meddelande rutan
	JOptionPane.showMessageDialog(null,"Välkommen till min miniräknare");

//genererar inmatnings rutan
	sTal1 = JOptionPane.showInputDialog("Skriv in det första talet");

//slinga för att upprepa inmatnings rutorna
do {
//sätta i=0 igen för upprepningen av slingan
i=0;
//genererar inmatnings rutan
	sTal2 = JOptionPane.showInputDialog("Skriv in det andra talet");

//konverterar från String till int
	tal1 = Integer.parseInt(sTal1);
	tal2 = Integer.parseInt(sTal2);

//genererar inmatnings rutan
	sOperator = JOptionPane.showInputDialog("Skriv in vilken operator ni vill använda\n + - * / %");

//vilkorssats för att kontrollera andra talet=0 och operator="/"
	if (i==0) {
		if (sOperator.equals(operator[3])) {
			if (tal2==0) {

			JOptionPane.showMessageDialog(null,"Kan inte dividera med 0!");
			i=1;
			}
			else i=0;
		}
	}
//upprepar slingan bara när i==1
} while (i==1);

//vilkorssatser för att räkna och visa resultatet
if (sOperator.equals(operator[0]))
	{
	summa=tal1+tal2;

	JOptionPane.showMessageDialog(null,tal1 + " " + operator[0]+ " " + tal2 + " = " + summa);//genererar meddelande rutan
	}
else if (sOperator.equals(operator[1]))
	{
	summa=tal1-tal2;

	JOptionPane.showMessageDialog(null,tal1 + " " + operator[1]+ " " + tal2 + " = " + summa);//genererar meddelande rutan

	}
else if (sOperator.equals(operator[2]))
	{
	summa=tal1*tal2;

	JOptionPane.showMessageDialog(null,tal1 + " " + operator[2]+ " " + tal2 + " = " + summa);//genererar meddelande rutan

	}
else if (sOperator.equals(operator[3]))
	{
	summa=tal1/tal2;

	JOptionPane.showMessageDialog(null,tal1 + " " + operator[3]+ " " + tal2 + " = " + summa);//genererar meddelande rutan

	}
else if (sOperator.equals(operator[4]))
	{
	summa=tal1%tal2;

	JOptionPane.showMessageDialog(null,tal1 + " " + operator[4]+ " " + tal2 + " = " + summa);//genererar meddelande rutan

	}
}
}

Ich weiß, es ist nicht sauber, aber für Vorschläge bin ich offen. Erstmal bin ich froh, dass es mit eurer Hilfe funktioniert. Die vielen if-else-Abfragen am Schluss kann man doch bestimmt sauberer lösen?
 

1mp

Mitglied
Du kannst dein JOptionpane

Code:
JOptionPane.showMessageDialog(null,tal1 + " " + operator[4]+ " " + tal2 + " = " + summa);//genererar meddelande rutan

Was du in jeder else if anweisung hast unten drunter schreiben nimmst einfach statt operator[4] dann sOperator Dann wäre dein Code um einiges kürzer!

Und für die ganzen if else gibt nen netten befehl der da heißt switch :) Einfach mal googeln da findest du zu 100% genug tutorials die zeigen wie das funktioniert mit switch zu arbeiten!

mfg
 

clou

Mitglied
Hallo 1mp,

danke für deinen Tipp. Jedoch gab es eine Aufgabe zu lösen und in dieser musste der Code
Code:
JOptionPane.showMessageDialog(null,tal1 + " " + operator[4]+ " " + tal2 + " = " + summa);

verwendet werden. Deshalb fällt dein sOperator-Vorschlag hier weg. Oder gibt es eine schönere Lösung?

Und das mit Switch habe ich versucht, ich war aber zu dämlich um das hinzukriegen :-(
Ich habe zum Testen diesen Code verwendet:

Code:
switch (operator) {
        case '+':	System.out.println("operator är +");
            break;

        case '-':	System.out.println("operator är -");
            break;

        case '*':	System.out.println("operator är *");
            break;

        case '/':	System.out.println("operator är /");
            break;

        case '%':	System.out.println("operator är %");
            break;

        default:	System.out.println("Eine der Möglichkeiten du Dummbeutel");
     }

Als Fehlermeldung kam dann diese:

G:\Java\Kurs\Projekt07.java:49: incompatible types
found : java.lang.String[]
required: int
switch (operator) {
^
1 error

Tool completed with exit code 1
 

Landei

Top Contributor
Die switch-Variante ist fast richtig, aber du brauchst char anstatt String, und zwar in diesem Fall den ersten char im String, also die Position 0.
Code:
switch(sOperator.charAt(0)) {
...
}
 

clou

Mitglied
Hallo Landei,

vielen Dank nochmal, jetzt hatte ich Zeit, das auch umzusetzen und es funktioniert prima. Wenn du Lust und Zeit hast...

... warum funktioniert hier nicht

Code:
switch (operator.charAt(0)) {

sondern nur

Code:
switch (sOperator.charAt(0)) {

?
 
S

SlaterB

Gast
charAt ist eine Methode von String,
operator dagegen nach dem, was du nicht sagst und man sich auf vorherigen Postings zusammen sammeln darf, ein Array,

ein Array ist kein String
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Einfache if-Abfrage der Main-Argumente Java Basics - Anfänger-Themen 3
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
B Einfache OCR zur Zahlenerkennung? Java Basics - Anfänger-Themen 6
M Einfache Datenfilterung Java Basics - Anfänger-Themen 15
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2
B Einfache HSQLDB? (lock acquisition failure) Java Basics - Anfänger-Themen 2
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
O Ganz einfache Frage - Array Java Basics - Anfänger-Themen 5
E Einfache Java Verschlüsselung Java Basics - Anfänger-Themen 4
J Einfache Frage zu "null" Java Basics - Anfänger-Themen 2
J Einfache pub/sub Lösung mit ausführlicher Doku Java Basics - Anfänger-Themen 5
R Gibt es Eine einfache Programierung dieser Methoden Java Basics - Anfänger-Themen 8
K einfache Kombinatorik Java Basics - Anfänger-Themen 4
M Erste Schritte Einfache Aufzugssteuerung programmieren - Anfänger Java Basics - Anfänger-Themen 2
D Eine einfache Verschlüsselung schreiben Java Basics - Anfänger-Themen 3
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
X Einfache Frage; wie soll ich die spezielle float var speichern? Java Basics - Anfänger-Themen 2
J Einfache einbindung eines Bildes in ein Applet Java Basics - Anfänger-Themen 4
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
K Möglichkeiten um eine einfache Animation darzustellen Java Basics - Anfänger-Themen 7
L Einfache Lineare Suche Java Basics - Anfänger-Themen 7
P Erste Schritte Einfache For Schleife Java Basics - Anfänger-Themen 10
M Einfache Java Operation, cheggs net Java Basics - Anfänger-Themen 2
V Erste Schritte Einfache Rechnung mit Exponenten Java Basics - Anfänger-Themen 3
G einfache Leet-Übersetzung implementieren und benutzen Java Basics - Anfänger-Themen 14
M Einfache und Doppelte Operatoren Java Basics - Anfänger-Themen 3
E Einfache For-Schleife macht nicht was sie soll Java Basics - Anfänger-Themen 2
shiroX OOP Türme von Hanoi - einfache grafische Ausgabe Java Basics - Anfänger-Themen 2
C Extrem einfache Aufgabe falsch beantwortet :$ Java Basics - Anfänger-Themen 6
Z Super einfache Frage For-Schleife im Detail Java Basics - Anfänger-Themen 3
N Potenzierung durch einfache Operatoren Java Basics - Anfänger-Themen 13
H Einfacher Editor, Einfache Handelsanweisungen Java Basics - Anfänger-Themen 2
H Sehr einfache Java-Programme Java Basics - Anfänger-Themen 24
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
-horn- Einfache graphische Darstellung von 3D Koordinaten für Flugbahnen? Java Basics - Anfänger-Themen 4
B Einfache jsp Seite darstellen Java Basics - Anfänger-Themen 9
J Einfache Designfrage Java Basics - Anfänger-Themen 4
R Methoden Einfache Loops? Java Basics - Anfänger-Themen 8
E einfache Frage zu private Java Basics - Anfänger-Themen 26
R Sehr einfache möglichkeit ArrayList oder Array zu initialisieren? Java Basics - Anfänger-Themen 8
F Einfache Klassen für Datum und Zeit Java Basics - Anfänger-Themen 3
Spin Einfache Anfänger Frage setVisible von Panels Java Basics - Anfänger-Themen 5
E OOP einfache Array Aufgabe mit jUnit Java Basics - Anfänger-Themen 5
D einfache Quizfrage programmieren Java Basics - Anfänger-Themen 11
B Einfache Applets für Webseite Java Basics - Anfänger-Themen 10
K Einfache Rekursion - Wert wird nicht in Variable gespeichert Java Basics - Anfänger-Themen 7
U Einfache Aufgabe Java Basics - Anfänger-Themen 5
E Einfache Frage zur Parameterübergabe in Methoden Java Basics - Anfänger-Themen 8
M einfache Übungsaufgaben gesucht Java Basics - Anfänger-Themen 7
M Einfache Rechnung(R=U/I) Java Basics - Anfänger-Themen 12
D Wohl eine einfache Frage... Java Basics - Anfänger-Themen 2
W Einfache Passwortabfrage funktioniert nicht Java Basics - Anfänger-Themen 3
P einfache GUI-Elemente Java Basics - Anfänger-Themen 10
F Vererbung (einfache Frage) Java Basics - Anfänger-Themen 5
S 2 Einfache Fragen (Exception Breakpoint, Konstruktor) Java Basics - Anfänger-Themen 4
L einfache Klasse erstellen Java Basics - Anfänger-Themen 16
M kleine und einfache Verständnisfrage Java Basics - Anfänger-Themen 3
P Einfache Bedingung (?) in Java Java Basics - Anfänger-Themen 3
W Einfache Rekursion Java Basics - Anfänger-Themen 14
T Einfache Textausgabe .java unter OS X Java Basics - Anfänger-Themen 13
B einfache Rekursion Java Basics - Anfänger-Themen 9
A [Hilfe] einfache Aufgabe Java Basics - Anfänger-Themen 26
A Einfache java Verschlüsselung HILFE Java Basics - Anfänger-Themen 3
M einfache java application Java Basics - Anfänger-Themen 4
S Kann einfache Texteingabe nicht auswerten! Java Basics - Anfänger-Themen 3
M einfache frage zum Jdk-Compiler Java Basics - Anfänger-Themen 3
Spin einfache Frage zu Klassen Java Basics - Anfänger-Themen 12
J einfache Tastendrücke in einem JFrame abfragen Java Basics - Anfänger-Themen 2
H Einfache Ausgabe eines Arrays in einen File Java Basics - Anfänger-Themen 8
F Einfache Liste hinten was einfügen Java Basics - Anfänger-Themen 3
L Einfache Umrechnung Java Basics - Anfänger-Themen 2
D Einfache Funktion zum kaufmännischen runden Java Basics - Anfänger-Themen 8
K einfache Multiplikation Java Basics - Anfänger-Themen 6
S Einfache Rechnung mit Schleife Java Basics - Anfänger-Themen 10
G einfache Swing-GUI Java Basics - Anfänger-Themen 3
F Einfache Tastatureingabe Java Basics - Anfänger-Themen 2
L [gelöst] Einfache Aufgabe, läuft aber nicht. Java Basics - Anfänger-Themen 8
S "einfache Klassengeschichten" keine Fehler, läuft Java Basics - Anfänger-Themen 2
R Einfache MVC-Uhr. MVC richtig umgesetzt? [Überarbeitet] Java Basics - Anfänger-Themen 5
A Einfache Frage zur Mehrfachvererbung Java Basics - Anfänger-Themen 3
G Einfache Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2
J eine einfache liste Java Basics - Anfänger-Themen 17
D Suche einfache Übungsaufgaben für den JavaCreator! Java Basics - Anfänger-Themen 5
R Einfache Messagebox Java Basics - Anfänger-Themen 9
N einfache Adressdatenbank in Textdatei Java Basics - Anfänger-Themen 8
I einfache Wiedergabe Java Basics - Anfänger-Themen 2
B Warum hat dieser einfache Algorithmus lineare Laufzeit? Java Basics - Anfänger-Themen 3
U "Einfache Verschlüsselung" Java Basics - Anfänger-Themen 17
K einfache Umfang und Flächenberechnung mit interfaces Java Basics - Anfänger-Themen 3
M Einfache HTML Mail versenden , suche Beispiel Java Basics - Anfänger-Themen 5
L MVC-einfache frage Java Basics - Anfänger-Themen 13
M einfache schleife Java Basics - Anfänger-Themen 7
M Einfache Schleife Java Basics - Anfänger-Themen 4
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
L If Abfrage Java Basics - Anfänger-Themen 4
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
W if-Abfrage bei ArrayList-Methodenaufrufen - Wie löse ich das? Java Basics - Anfänger-Themen 6
B Automatisierte Ausgabe (Schleife, If-Abfrage?) Java Basics - Anfänger-Themen 24

Ähnliche Java Themen

Neue Themen


Oben