Autor Thema: Verbesserungsvorschläge an Taschenrechner :D  (Gelesen 533 mal)

Bryan_Kro

  • Neuling
  • *
  • Beiträge: 2
  • Karma: 0
    • Profil anzeigen
Verbesserungsvorschläge an Taschenrechner :D
« am: 29. November 2016, 22:37:37 »
Hallo ich habe da mal eine Frage und zwar wie kann ich die Eingabe von Dingen verhindern z.B. das der user des Programms später keine Buchstaben eintippen kann und wie schaffe ich es das wenn das Ergebnis angezeigt wird das dann der Vorgang von vorne anfängt oder gehen diese Sachen nicht mit Java?°°
Vielen Dank im Voraus

import java.util.Scanner;

public class Scanversuche {
   public static void main(String args[]){
      long z,g,k,l,a,b,c,d;
      double v;
      Scanner s= new Scanner (System.in);
      System.out.println("Wilkommen!\nDies ist ein Taschenrechner!\nGebe bitte eine Zahl(max. 11 Ziffern!) ein:");
      z=s.nextInt();
      System.out.println("Geben Sie nun bitte Ihre zweite Zahl ein:");
      g=s.nextInt();
      System.out.println("Gebe bitte einen Rechenoperator ein (+)=1||-)=2||(*)=3||(/)=4");
      k=s.nextInt();
      if (k==1){
         l=plus(z,g);
         System.out.println("Was denkst du ist die Lösung tippe es ein:");
         a=s.nextInt();
         if (a==l)
            System.out.println("Richtig die Antwort ist: "+l);
         else
            System.out.println("Schade, leider falsch, denn die Antwort ist: "+l);
      }else if (k==2){
         l=minus(z,g);
         System.out.println("Was denkst du ist die Lösung tippe es ein:");
         a=s.nextInt();
         if (a==l)
            System.out.println("Richtig die Antwort ist: "+l);
         else
            System.out.println("Schade, leider falsch, denn die Antwort ist: "+l);
      }else if (k==3){
         l=mal(z,g);
         System.out.println("Was denkst du ist die Lösung tippe es ein:");
         a=s.nextInt();
         if (a==l)
            System.out.println("Richtig die Antwort ist: "+l);
         else
            System.out.println("Schade, leider falsch, denn die Antwort ist: "+l);
      }else if (k==4){
         double h=geteilt(z,g);
         System.out.println("Was denkst du ist die Lösung tippe es ein:");
         v=s.nextDouble();
         if (v==h)
            System.out.println("Richtig die Antwort ist: "+h);
         else
            System.out.println("Schade, leider falsch, denn die Antwort ist: "+h);
      }else{
         System.out.println("Error!!\nBitte starten sie das Programm neu.\nSchönen Tag!");
      }}   
      private static long plus(long a,long b){
         long l;
         l=a+b;
         return l;
      }private static long mal(long a,long b){
         long l;
         l=a*b;
         return l;
      }private static long minus(long a,long b){
         long l;
         l=a-b;
         return l;
      }private static double geteilt(double a,double b){
         double k;
         k=a/b;
         return k;}
}

TheFail

  • Held Mitglied
  • *****
  • Beiträge: 859
  • Karma: 69
  • Kann alles, macht alles, weiß alles ;)
    • Profil anzeigen
Re: Verbesserungsvorschläge an Taschenrechner :D
« Antwort #1 am: 30. November 2016, 11:03:20 »
Hallo Bryan_Kro und willkommen in diesem ziemlich toten Forum!

Zu deinen Fragen:
  • Damit dein Programm von vorne anfängt müsstest du nur deinen gesamten Code in eine Schleife packen (z.B. eine while-Schleife, die am Ende fragt, ob noch etwas ausgerechnet werden soll)
  • Die Eingabe von bestimmten Zeichen in der Konsole kannst du soweit ich weiß nicht verhindern. Das geht aber auch in keiner mir sonst geläufigen Programmiersprache und ist dem Umstand geschuldet, dass die Standardkonsole ein sehr einfaches Ding ist. Mehr als den Input auf Korrektheit zu testen und ggf. neu anzufordern ist da wahrscheinlich nicht drin.

Generell wenn du hier Code postest, dann pack den bitte zwischen die Tags [ code][ /code] (ohne Leerzeichen). Diese kannst auch mit dem Knopf mit dem Hashtag # einfügen. Sieht dann so aus:
System.out.println("Hallo ich bin Code");

Noch ein paar Hinweise zu deinem Programm:
  • Warum hast du Methoden für deine Rechenoperationen erstellt? Das scheint mir unnötig zu sein.
  • Denk evtl nochmal drüber nach, ob du die Abfrage nach dem Ergebnis der Rechnung nicht aus den einzelnen ifs rausziehen kannst, sodass folgender Code vielleicht insgesamt nur einmal in deinem Programm vorkommt.
System.out.println("Was denkst du ist die Lösung tippe es ein:");
a=s.nextInt();
if (a==l)
    System.out.println("Richtig die Antwort ist: "+l);
else
    System.out.println("Schade, leider falsch, denn die Antwort ist: "+l);

LG,
Fail

Schon meinen Notifier gesehen?

Bryan_Kro

  • Neuling
  • *
  • Beiträge: 2
  • Karma: 0
    • Profil anzeigen
Re: Verbesserungsvorschläge an Taschenrechner :D
« Antwort #2 am: 01. Dezember 2016, 00:21:37 »
Ok erst mal danke für die Tipps habe es soweit umgesetzt nur mit der while schleife macht das programm faxen kannst du mir erklären was da los ist ^^?
import java.util.Scanner;


public class Taschenrechner {
public static void main(String args[]){
long b,c,d;
double a,l,z,g,k,v;
String t;
Scanner s= new Scanner (System.in);
System.out.println("Wilkommen!\nDies ist ein Taschenrechner!\nGebe bitte eine Zahl(max. 11 Ziffern!) ein:");
z=s.nextDouble();
System.out.println(z+"__ (Rechenoperator)");
t=s.next();
System.out.println(z+t+"__ (zweite Zahl)");
g=s.nextDouble();

if (t.equals("+")){
l=z+g;
System.out.println(z+t+g+"=");
Methode(l);
}else if (t.equals("-")){
l=z-g;
System.out.println(z+t+g+"=");
Methode(l);
   }else if (t.equals("*")){
    l=z*g;
    System.out.println(z+t+g+"=");
    Methode(l);
   }else if (t.equals("/")){
    l=z/g;
    System.out.println(z+t+g+"=");
    Methode(l);
   }else{
   System.out.println("Error!!\nBitte starten sie das Programm neu.\nSchönen Tag!");}
   }private static void Methode(double l){
   System.out.println("Was denkst du ist die richitge Antwort?");
   Scanner scan=new Scanner (System.in);
   double a;
   a=scan.nextDouble();
   if (a==l){
   System.out.println("Richtig die Antwort ist: "+l);
   }else
   System.out.println("Schade, die Antwort ist: "+l);
   
   }}

LG Bryan

TheFail

  • Held Mitglied
  • *****
  • Beiträge: 859
  • Karma: 69
  • Kann alles, macht alles, weiß alles ;)
    • Profil anzeigen
Re: Verbesserungsvorschläge an Taschenrechner :D
« Antwort #3 am: 04. Dezember 2016, 01:09:28 »
Hi Bryan_Kro,

sorry das meine Antwort etwas gedauert hat.

Das mit dem Code aus den ifs herausziehen war etwas anders gemeint - ich strukturiere dein Programm mal noch etwas um.

import java.util.Scanner;


public class Test {

public static void main(String args[]){
//das kann man so lassen - evtl den Variablen etwas aussagekräftigere Namen geben
double a,l,z,g;
String t;
Scanner s = new Scanner (System.in);

// Hier beginnt das eigentliche Programm
// und hier würdest du die Schleife starten
System.out.println("Wilkommen!\nDies ist ein Taschenrechner!\nGebe bitte eine Zahl(max. 11 Ziffern!) ein:");
z=s.nextDouble();
System.out.println(z+"__ (Rechenoperator)");
t=s.next();
System.out.println(z+t+"__ (zweite Zahl)");
g=s.nextDouble();

//switch ist im Wesentlichen ein größeres if/else if
//wichtig ist das 'break;' nach jedem case.
switch(t){
case "+":   l = z+g; break;
case "-":   l = z-g; break;
case "*":   l = z*g; break;
case "/":   l = z/g; break;
default:    System.out.println("Error!!\nBitte starten sie das Programm neu.\nSchönen Tag!");return; 
//'return 0;' beendet das Programm
//wenn du die while-Schleife einbaust, dann könntest du hier ein continue verwenden.
}

//Hier ist das mit dem Rausziehen, was ich meinte
System.out.println(z+t+g+"=");
System.out.println("Was denkst du ist die richtige Antwort?");
a = s.nextDouble();
if (a==l){
System.out.println("Richtig die Antwort ist: "+l);
} else {
System.out.println("Schade, die Antwort ist: "+l);
}

//TODO: Abfrage ob das Programm beendet werden soll
// und dann die Schleife schließen
}
}

Wie du die Schleife einbaust, überlass ich dir. Ich will hier ja nicht deine ganze Arbeit übernehmen :P

LG Fail
« Letzte Änderung: 04. Dezember 2016, 01:23:21 von TheFail »

Schon meinen Notifier gesehen?