Taschenrechner in java (Variablentyp gesucht)?


27.08.2020, 16:02

Eventuell ist ja ein falscher Variablentyp auch gar nicht der Fehler....

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
  1. Du hast einen String, den du in einen int kloppen willst. ein "-" ist keine Zahl.
  2. Operationszeichen kannst du nur als String abfragen. Sowas in der Art:
if(operationszeichen.equals("-")) {
    //Do something
}
lollo939l 
Fragesteller
 27.08.2020, 16:10

Juhu es funktioniert auch so, danke!!!

0
lollo939l 
Fragesteller
 01.09.2020, 18:20

Aaaaahh tut mir mega leid ich hab ausversehen nicht hilfreich geklickt 😞.

0
public class Taschenrechner { // Klassennamen immer groß.

  public static void main(String[] args) {
    double zahl1, zahl2, ergebnis;
    String operationszeichen;	// Variablennamen immer klein. 
    							// Da das "Operationszeichen" keine Zahl ist,
    							// wird es in einem String gespeichert.
    Scanner scanner = new Scanner(System.in);
    System.out.println("erste Zahl?");
    zahl1 = scanner.nextDouble();
    System.out.println("Operationszeichen bitte?");
    operationszeichen = scanner.next(); // Mit next kriegst du das nächste Wort
    System.out.println("2te Zahl bitte");
    zahl2 = scanner.nextDouble();
    if (operationszeichen.equals("+") ) { // Strings werden immer mit .equals verglichen.
      ergebnis = zahl1 + zahl2;
      System.out.println(ergebnis); }
      else if (operationszeichen.equals("-") ) {   
        ergebnis = zahl1 - zahl2;
        System.out.println(ergebnis);
      }
      else if (operationszeichen.equals("*") ) {   
        ergebnis = zahl1 * zahl2;
        System.out.println(ergebnis);
    }
      else if (operationszeichen.equals("/") ) { 	// wenn du eine Bedingung angeben willst,
      											// brauchst du immer ein if.
        ergebnis = zahl1 / zahl2;
        System.out.println(ergebnis);
    } else { // Wenn du einfach alle anderen Optionen abfangen willst,
    		 // nimmst du "else" ohne eine Bedingung.
    	System.out.println("Die Operation \"" + operationszeichen + "\" kenne ich nicht.");
    }

    }
  }

So funktioniert der Code zwar, aber ist ziemlich unübersichtlich. So wäre es schon besser:

import java.util.Scanner;


public class Taschenrechner { 


	public static void main(String[] args) {
		double zahl1, zahl2, ergebnis;
		String operationszeichen; 
		Scanner scanner = new Scanner(System.in);
		
		System.out.println("erste Zahl?");
		zahl1 = scanner.nextDouble();
		
		System.out.println("Operationszeichen bitte?");
		operationszeichen = scanner.next(); 
		
		System.out.println("2te Zahl bitte");
		zahl2 = scanner.nextDouble();
		
		if (operationszeichen.equals("+")) { 
			ergebnis = zahl1 + zahl2;
			System.out.println(ergebnis);
		} else if (operationszeichen.equals("-")) {
			ergebnis = zahl1 - zahl2;
			System.out.println(ergebnis);
		} else if (operationszeichen.equals("*")) {
			ergebnis = zahl1 * zahl2;
			System.out.println(ergebnis);
		} else if (operationszeichen.equals("/")) { 
			ergebnis = zahl1 / zahl2;
			System.out.println(ergebnis);
		} else { 
			System.out.println("Die Operation \"" + operationszeichen + "\" kenne ich nicht.");
		}
	}
}

Und so hätte ich es mit Java 8 gemacht:

import java.util.Scanner;


public class Calculator { 
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		double n1, n2, result;
		String operator;
		
		System.out.println("Erste Zahl?");
		n1 = in.nextDouble();
		
		System.out.println("Operator?");
		operator = in.next();
		
		System.out.println("Zweite Zahl?");
		n2 = in.nextDouble();
		
		switch (operator) {
		case "+": result = n1 + n2; break;
		case "-": result = n1 - n2; break;
		case "*": result = n1 * n2; break;
		case "/": result = n1 / n2; break;
		default: throw new IllegalArgumentException("Der Operator \"" + operator + "\" ist nicht bekannt.");
		}
		
		System.out.println(result);
	}
}

Ab Java 12 wurden außerdem die "switch expressions" eingeführt. Da könnte man das switch auch so bauen:

		result = switch (operator) {
		case "+" -> n1 + n2;
		case "-" -> n1 - n2;
		case "*" -> n1 * n2;
		case "/" -> n1 / n2;
		default -> throw new IllegalArgumentException("Der Operator \"" + operator + "\" ist nicht bekannt.");
		}

Hey,

da du ja immer ganz genau ein Zeichen speichern möchtest (+, -, *, /), würde ich dir empfehlen einen "char" zu nutzen.

Mfg Jannick (L1nd)

Woher ich das weiß:eigene Erfahrung
lollo939l 
Fragesteller
 27.08.2020, 16:03

Ich probiere es mal aus, Danke!

0
JanMarcel01  27.08.2020, 16:04
@lollo939l

Und bitte gewöhne dir direkt zu Anfang an, variablen kleinzuschreiben und vor allem auf englisch. Deine Outputs können natürlich auf jeder Sprache sein die du willst, aber der Code sollte englisch sein, lern das lieber auch direkt so

1
JanMarcel01  27.08.2020, 16:05
@lollo939l

Und was du auch nicht vergessen darfst, chars vergleicht man wie folgt:

if (myChar == '*')

Wichtig ist hierbei, dass es ein einfaches Anführungszeichen ist!

0