Input/Output Input überprüfen und weiterverarbeiten

Asdf11

Mitglied
Hallo,

ich durchsuche das Netz schon seit 2 Tagen und geben langsam auf. Ich habe einen Input in die Console, diesen möchte ich weiterverarbeiten, also ich gebe 1 ein dann möchte in meinem taschenrechner addieren, 2 subtrahieren usw... 0 ist beenden.

Ich komme allerdings über einen Punkt nicht weiter:
[Java]
import static java.lang.Math.sqrt;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.System;
public class CopyOfTestCalculator {

/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub

CopyOfTestCalculator CalcObj = new CopyOfTestCalculator();

CalcObj.calc();
}


public int Reader() throws Exception {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

while (true) {
System.out.print("Ihre Auswahl: ");
int Eingabe;
try {
Eingabe = Integer.parseInt(br.readLine());
} catch (NumberFormatException nfe) {
System.out.println("Incorrect format!");
continue;
}
return Eingabe;
}
}

public void calc() throws Exception{
System.out.println("Bitte wählen Sie eine Rechenoperation:");
System.out.println("1: Addition");
System.out.println("2: Subtraktion");
System.out.println("3: Multiplikation");
System.out.println("4: Division");
System.out.println("5: Quadratwurzel");
System.out.println("0: Abbruch des Programms");

// Ab hier muss irgendwo das Problem sein 🙁
if (Reader() == 1)
System.out.println("Auswahl: 1. Addition");
else if (Reader() == 2)
System.out.println("Auswahl: 2. Subtraktion");
else if (Reader() == 0)
return; //Ist es oke so ein Programm abzubrechen?


}


}
[/code]


Das Problem ist diese if Schleife.
Wenn ich 0 eingebe, muss ich dreimal 0 eingeben bis es abbreicht, bei 1 nur einmal bei 2 zweimal...

Beispiel der Console:

(Bitte wählen sie(...)
Ihre Auswahl: 1
Auswahl: 1. Addition) So weit so gut

(Bitte wählen sie(...)
Ihre Auswahl: 2
Ihre Auswahl: 2
Auswahl: 2. Subtraktion) Ich will es aber nur einmal eingeben!!!

(Bitte wählen sie(...)
Ihre Auswahl: 0
Ihre Auswahl: 0
Ihre Auswahl: 0
-Abbruch-) Hier muss ich schon dreimal die 0 eingeben.

Ich weiß dass ich irgendwie die If Abfrage zu oft aufrufe, aber ich finde das Problem nicht.

Helft mir bitte ich weiß grad wirklich nich mehr weiter...
 
Du rufst in jedem if die Methode Reader() auf, deshalb musst Du bei 0 (die dritte Prüfung) drei Eingaben machen. ==> die Methode einmal aufrufen und den Rückgabewert in einer Variablen speichern. Im if Konstrukt vergleichst Du nur noch die Variable.

Methodennamen schreibt man klein und sie sollten beschreiben was die Methode macht.
z.B. readInt()
 
Ja du hast die Stelle schon richtig gefunden.
Dein Problem ist, das du bei jedem neuen if deines if-else konstruktes ein neues read (also von der konsole lesen) machst.

Java:
...
// Das sollte dann dein Problem lösen
        int eingabe=Reader();
        if (eingabe == 1)
            System.out.println("Auswahl: 1. Addition");
        else if (eingabe == 2)
            System.out.println("Auswahl: 2. Subtraktion");
        else if (eingabe == 0)
            return; //Ist es oke so ein Programm abzubrechen?

kleiner Tipp Funktionen schreibt man wie Variablen klein, nur Klassennamen groß ;-)

[EDIT]Zu langsam[/EDIT]
 
Hhm, erst mal Methodennamen und Variablen klein, Klassennamen groß, siehe UpperCamelCase und lowerCamelCase.

Du musst das Ergebnis deiner "Einlese"-Methode in einer Variablen speichern und kannst dann ggf. bis zu 3 mal vergleichen.

switch case würde sich hier anbieten.
 
Vielen Dank 🙂 Genau diese Idee hat mir gefehlt 🙂

Es kommt hier allerdings ein weiteres Problem hinzu was ich überhaupt nicht nachvollziehen kann:

wenn eine zweite Zeile nach der If Bedingenung hinzukommt, dann kann ich kein else if mehr hinzufügen:

Java:
int eingabeTest= Reader();
		if (eingabeTest == 1)
			System.out.println("Auswahl: 1: Addition");
			System.out.println("Geben sie die zu addierenden Zahlen ein: ");
                //Hier wird else if rot unterstrichen, wenn ich die die zweite System.out Zeile streiche, so dass nur noch eine Zeile übrig bleibt, taucht der Fehler nicht auf??
		else if (eingabeTest == 2)
 
Zuletzt bearbeitet:
das liegt daran, dass irgendwie alle Welt die ifs ohne geschweiften Klammern macht, das ist ein unding und funktioniert nur bei einer Zeile, deswegen ifs immer so

Java:
if (Bedingung){
   Anweisung1;
   Anweisung2;
   ...
}else{
  Anweisung3;
  Anweisung4;
  ...
}
 
Hhm, mach das ganze doch so (um ein Grundgerüst zu haben):

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author hütte
 */
public class Calc {

    private static final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    private static void switchh() throws IOException {
        switch (readInt()) {
            case 1:
                add();
                break;
            case 2:
                sub();
                break;
            case 3:
                System.out.println("3 eingegeben. Toll. ^^");
                break;
            default:
                return;
        }
        switchh();
    }

    private static int readInt() throws IOException {
        System.out.print("Bitte Int eingeben: ");
        try {
            return Integer.parseInt(reader.readLine());
        } catch (NumberFormatException nfe) {
            return readInt();
        }
    }

    private static void add() {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    private static void sub() {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    public static void main(String[] args) throws IOException {
        switchh();
    }
}

Bei switch case ist die Klammerung mehrerer Anweisungen nicht erforderlich.
 
Habs als switch gemacht, mich hat nur interessiert wieso es mit if nicht ging...

Ja in ganze vielen seiten wird ein if Template ohne geschweifte Klammern beschrieben...

Danke
 
Ja das ist auch für sowas besser geeignet ;-)

Mhh komisch, also ich es mit der geschweiften Klammer gelernt und dann irgendwann später mal gelernt, dass es auch ohne geht, da habe ich es aber schon so drinnen, immer die Klammern zu machen ;-) und kann es nur jedem empfehlen, einfach immer nach dem Muster mit den geschweiften Klammern vorzugehen, ob eine Zeile oder mehrere Zeilen ;-)
 

Neue Themen


Zurück
Oben