mathe trainer, division und andere fragen

Status
Nicht offen für weitere Antworten.
hi,
ich muss in der schule ein java-projekt machen. ich hab mich für einen mathe trainer entschieden. hier der code:
Code:
import static java.lang.System.out;
import java.util.Scanner;
import java.util.Random;


public class Projekteinmaleins1 {

   public static void main (String args[]) {
    char a;
    String s;
    System.out.println("Mathematik Trainer");
    System.out.println("m: Multiplizieren");
    System.out.println("d: Dividieren ");
    System.out.println("a: Addieren");
    System.out.println("s: Subtrahieren  ");
    Scanner lies = new Scanner(System.in);

    System.out.print("Wahl: "); s = lies.nextLine();
    a=s.charAt(0);
    switch (a) {
      case 'm': multiplikation () ; break;
      case 'd': division();break;
      case 'a': addition(); break;
      case 's': subtraktion();break;
     default : out.println("Option ungueltig!");
     }
    

   }

  public static void multiplikation (){
   String ant = "j";
   Scanner lies = new Scanner (System.in);
     do{
       int x,y,i,o=0;
       System.out.print("Anzahl der Rechnungen: ");i=lies.nextInt();
           while(o<i){

             int azufall = new Random().nextInt(100)+1;
             int bzufall = new Random().nextInt(100)+1;
             System.out.print("Multipliziere "+azufall+"*"+bzufall+"=");x=lies.nextInt();
             y=azufall*bzufall;
             if (x==y) {
              System.out.println("Das war richtig!");
             }
             else {
              System.out.println("Das war leider falsch. Das richtige Ergebnis ist: "+y);
             }
            o++;
           }
             System.out.println();
             System.out.print ("Willst du weiterrechnen? ");
             ant = lies.next();


      } while((ant.equals("j"))||(ant.equals("j")));

  }

 public static void addition (){
   String ant = "j";
   Scanner lies = new Scanner (System.in);
     do{
       int x,y,i,o=0;
       System.out.print("Anzahl der Rechnungen: ");i=lies.nextInt();
           while(o<i){

             int azufall = new Random().nextInt(100)+1;
             int bzufall = new Random().nextInt(100)+1;
             System.out.print("Addiere "+azufall+"+"+bzufall+"=");x=lies.nextInt();
             y=azufall+bzufall;
             if (x==y) {
              System.out.println("Das war richtig!");
             }
             else {
              System.out.println("Das war leider falsch. Das richtige Ergebnis ist: "+y);
             }
            o++;
           }
             System.out.println();
             System.out.print ("Willst du weiterrechnen? ");
             ant = lies.next();


      } while((ant.equals("j"))||(ant.equals("j")));

  }

   public static void subtraktion (){
   String ant = "j";
   Scanner lies = new Scanner (System.in);
     do{
       int x,y,i,o=0;
       System.out.print("Anzahl der Rechnungen: ");i=lies.nextInt();
           while(o<i){

             int azufall = new Random().nextInt(100)+1;
             int bzufall = new Random().nextInt(100)+1;
             System.out.print("Subtrahiere "+azufall+"-"+bzufall+"=");x=lies.nextInt();
             y=azufall-bzufall;
             if (x==y) {
              System.out.println("Das war richtig!");
             }
             else {
              System.out.println("Das war leider falsch. Das richtige Ergebnis ist: "+y);
             }
            o++;
           }
             System.out.println();
             System.out.print ("Willst du weiterrechnen? ");
             ant = lies.next();


      } while((ant.equals("j"))||(ant.equals("j")));

  }

   public static void division (){
   String ant = "j";
   Scanner lies = new Scanner (System.in);
     do{
       int x,y,i,o=0;
       System.out.print("Anzahl der Rechnungen: ");i=lies.nextInt();
           while(o<i){

             int azufall = new Random().nextInt(100)+1;
             int bzufall = new Random().nextInt(100)+1;
             System.out.print("Dividiere "+azufall+"/"+bzufall+"=");x=lies.nextInt();
             y=azufall/bzufall;
             if (x==y) {
              System.out.println("Das war richtig!");
             }
             else {
              System.out.println("Das war leider falsch. Das richtige Ergebnis ist: "+y);
             }
            o++;
           }
             System.out.println();
             System.out.print ("Willst du weiterrechnen? ");
             ant = lies.next();


      } while((ant.equals("j"))||(ant.equals("j")));

  }
}

so, ich habe zufällig erzeugte zahlen, kann die anzahl der aufgaben bestimmen und sagen, ob ich weitermachen will oder nicht.

allerdings hätte ich ein paar fragen:
- kann ich von einem unterprogramm, wie z.B. multiplikation auch wieder auf "main" zurückkommen,sodass das programm von vorne anfängt?
(im moment sieht es ja so aus, dass ich nachdem ich mich für eine rechenart entschieden habe nur diese eine machen kann, so oft ich will)
- was kann ich an dem aussehen noch verschönern?

- bezüglich division:
1. wie bekomme ich die größere der beiden erzeugten zahlen nach vorne? (fällt mir gerade ein, ne if else bedingung; ich probiers mal aus)
2. kann man irgendwie nur ganze zahlen erzeugen?

schonmal vielen dank
 

Wildcard

Top Contributor
- kann ich von einem unterprogramm, wie z.B. multiplikation auch wieder auf "main" zurückkommen,sodass das programm von vorne anfängt?
Entweder lässt du die ganze main in einer Schleife laufen, oder rufst am Ende von main einfach main(null) auf.
- was kann ich an dem aussehen noch verschönern?
Mach eine GUI
kann man irgendwie nur ganze zahlen erzeugen?
Code:
Random random = new Random();
random.nextInt(max);
 
hi,
vielen dank für die antwort. ich habe das programm jetzt fast komplett fertig.

das mit der division war eigentlich ganz einfach, nur auf die idee, die zufallszahlen erst zu multiplizieren und dann zu dividieren, musste ich erstmal kommen.:roll:

habe das jetzt mit "main(null)" gemacht. gibt es denn irgendeinen befehl, der das programm dann noch beendet?
 
B

Beni

Gast
Das mit dem "main(null)" funktioniert aber nicht allzulange: bei jedem Aufruf einer Methode wird zusätzlicher Speicher benötigt, der erst beim verlassen der Methode freigegeben wird. Irgendwann wird deinem Programm der Speicher ausgehen... besser ist immer wieder zurückkehren.

Zum Beenden: aus der main-Methode austretten (bei ihrem ersten Aufruf!), oder mit "System.exit" das Programm brutal abschiessen :wink:
 
nochmals vielen dank für die antwort. :toll:
das mit dem speicher muss mein lehrer ja nicht wissen. :wink:
mit dem beenden werd ichs mal ausprobieren.
 

PyroPi

Aktives Mitglied
Riesenmonster hat gesagt.:
das mit dem speicher muss mein lehrer ja nicht wissen. :wink:
Die Idee, die main-Methode durch rekursives Aufrufen als Schleife zu mißbrauchen ist so abwegig, daß es deinem Lehrer einfach auffallen muß. :autsch:

Mach lieber ne Schleife um die switch-Anweisung und noch ne zusätzliche Option
Code:
    case 'e':
        System.out.println('Mach's gut!');
        return;
die das Programm beendet.
 
hi,
naja, mein lehrer ist eigentlich kein richtiger info lehrer (hat nur ne fortbildung und darfs deswegen unterrichten), der hat jetzt mit uns zusammen zum ersten mal java gemacht (neuer lehrplan). aber der kann turbo pascal und visual basic ganz gut.

aber zurück zum thema, wie ist das mit der schleife gemeint, ich weiß nicht was ich als bedingung nehmen soll :bahnhof:

ich kann ja mal das programm, so wie es jetzt ist anhängen

Code:
import static java.lang.System.out;
import java.util.Scanner;
import java.util.Random;


public class Projekteinmaleins6 {

   public static void main (String args[]) {
    char a;
    String s;
    System.out.println();
    System.out.println();
    System.out.println("Mathematik Trainer");
    System.out.println("<m> Multiplizieren");
    System.out.println("<d> Dividieren ");
    System.out.println("<a> Addieren");
    System.out.println("<s> Subtrahieren  ");
    System.out.println("<e> Ende");
    Scanner lies = new Scanner(System.in);

    System.out.println();
    System.out.print("Wahl: "); s = lies.nextLine();
    a=s.charAt(0);
    switch (a) {
      case 'm': multiplikation () ; break;
      case 'd': division();break;
      case 'a': addition(); break;
      case 's': subtraktion();break;
      case 'e': System.out.println("Mach's gut!"); return;
      default : out.println("Option ungueltig!");
     }
    main(null);
   }

  public static void multiplikation (){
   String ant = "j";
   Scanner lies = new Scanner (System.in);
     do{
       int x,y,i,o=0,z,grad=0;
          System.out.println();
          System.out.print("Anzahl der Rechnungen: ");i=lies.nextInt();
          System.out.println();
             System.out.println("Bitte Schwierigkeitsgrad angeben:");
             System.out.println("<1> maximal   5*5");
             System.out.println("<2> maximal  10*10");
             System.out.println("<3> maximal 100*100");
             System.out.println();
             System.out.print("Wahl: ");z = lies.nextInt();
            switch (z) {
              case 1: grad = 5;break;
              case 2: grad = 10;break;
              case 3: grad = 100;break;
              default: System.out.println("Schwierigkeitsgrad nicht verfügbar !");
             }
       
           while(o<i){
             int azufall = new Random().nextInt(grad)+1;
             int bzufall = new Random().nextInt(grad)+1;
             System.out.print("Multipliziere "+azufall+"*"+bzufall+"=");x=lies.nextInt();
             y=azufall*bzufall;
             if (x==y) {
              System.out.println("Das war richtig!");
             }
             else {
              System.out.println("Das war leider falsch. Das richtige Ergebnis ist: "+y);
             }
            o++;
           }
           
             System.out.println();
             System.out.print ("Willst du weiter multiplizieren? ");
             ant = lies.next();
      } while((ant.equals("j"))||(ant.equals("j")));

  }

 public static void addition (){
   String ant = "j";
   Scanner lies = new Scanner (System.in);
     do{
       int x,y,i,o=0,z,grad=0;
       System.out.println();
       System.out.print("Anzahl der Rechnungen: ");i=lies.nextInt();
       System.out.println();
         System.out.println("Bitte Schwierigkeitsgrad angeben:");
             System.out.println("<1> maximal   10+10");
             System.out.println("<2> maximal  100+100");
             System.out.println("<3> maximal 1000+1000");
             System.out.println();
             System.out.print("Wahl: ");z = lies.nextInt();
            switch (z) {
              case 1: grad = 10;break;
              case 2: grad = 100;break;
              case 3: grad = 1000;break;
              default: System.out.println("Schwierigkeitsgrad nicht verfügbar !");
             }
       
       
           while(o<i){
             int azufall = new Random().nextInt(grad)+1;
             int bzufall = new Random().nextInt(grad)+1;
             System.out.print("Addiere "+azufall+"+"+bzufall+"=");x=lies.nextInt();
             y=azufall+bzufall;
             if (x==y) {
              System.out.println("Das war richtig!");
             }
             else {
              System.out.println("Das war leider falsch. Das richtige Ergebnis ist: "+y);
             }
            o++;
           }
           
             System.out.println();
             System.out.print ("Willst du weiter addieren? ");
             ant = lies.next();
      } while((ant.equals("j"))||(ant.equals("j")));

  }

   public static void subtraktion (){
   String ant = "j";
   Scanner lies = new Scanner (System.in);
     do{
       int x,y,i,o=0,z,grad=0;
       System.out.println();
       System.out.print("Anzahl der Rechnungen: ");i=lies.nextInt();
       System.out.println();
          System.out.println("Bitte Schwierigkeitsgrad angeben:");
             System.out.println("<1> maximal   10+10");
             System.out.println("<2> maximal  100+100");
             System.out.println("<3> maximal 1000+1000");
             System.out.println();
             System.out.print("Wahl: ");z = lies.nextInt();
            switch (z) {
              case 1: grad = 10;break;
              case 2: grad = 100;break;
              case 3: grad = 1000;break;
              default: System.out.println("Schwierigkeitsgrad nicht verfügbar !");
             }
       
           while(o<i){
             int azufall = new Random().nextInt(grad)+1;
             int bzufall = new Random().nextInt(grad)+1;
             System.out.print("Subtrahiere "+azufall+"-"+bzufall+"=");x=lies.nextInt();
             y=azufall-bzufall;
             if (x==y) {
              System.out.println("Das war richtig!");
             }
             else {
              System.out.println("Das war leider falsch. Das richtige Ergebnis ist: "+y);
             }
            o++;
           }
             System.out.println();
             System.out.print ("Willst du weiter subtrahieren? ");
             ant = lies.next();


      } while((ant.equals("j"))||(ant.equals("j")));

  }

  public static void division (){
   String ant = "j";
   Scanner lies = new Scanner (System.in);
     do{
       int x,y,i,o=0,u,z,grad=0;
       System.out.println();
       System.out.print("Anzahl der Rechnungen: ");i=lies.nextInt();
       System.out.println();
         System.out.println("Bitte Schwierigkeitsgrad angeben:");
             System.out.println("<1> maximal   25/25");
             System.out.println("<2> maximal  100/100");
             System.out.println("<3> maximal  900/900");
             System.out.println();
             System.out.print("Wahl: ");z = lies.nextInt();
            switch (z) {
              case 1: grad = 5;break;
              case 2: grad = 10;break;
              case 3: grad = 30;break;
              default: System.out.println("Schwierigkeitsgrad nicht verfügbar !");
             }
       
           while(o<i){
             int azufall = new Random().nextInt(grad)+1;
             int bzufall = new Random().nextInt(grad)+1;
             u=azufall*bzufall;
             y=u/bzufall;
             System.out.print("Dividiere "+u+"/"+bzufall+"=");x=lies.nextInt();
             if (x==y) {
              System.out.println("Das war richtig!");
             }
             else {
              System.out.println("Das war leider falsch. Das richtige Ergebnis ist: "+y);
             }
            o++;
           }
             System.out.println();
             System.out.print ("Willst du weiter dividieren? ");
             ant = lies.next();


      } while((ant.equals("j"))||(ant.equals("j")));

  }

  
}
 

PyroPi

Aktives Mitglied
Die main-Methode könnte z.B. so aussehen:

Code:
public static void main (String args[]) {
    char a;
    String s;
    System.out.println();
    
    while (true) {
        System.out.println();
        System.out.println("Mathematik Trainer");
        System.out.println("<m> Multiplizieren");
        System.out.println("<d> Dividieren ");
        System.out.println("<a> Addieren");
        System.out.println("<s> Subtrahieren  ");
        System.out.println("<e> Ende");
        Scanner lies = new Scanner(System.in);

        System.out.println();
        System.out.print("Wahl: "); s = lies.nextLine();
        a=s.charAt(0);
    
        switch (a) {
            case 'm': multiplikation () ; break;
            case 'd': division();break;
            case 'a': addition(); break;
            case 's': subtraktion();break;
            case 'e': System.out.println("Mach's gut!"); return;
            default : out.println("Option ungueltig!");
        }
    }
}

Das Einlesen der Rechenoperation wird also in einer Endlosschleife ausgeführt. Wenn "e" eingegeben wird, springt das Programm durch die return-Anweisung automatisch aus der Schleife.

Was mir grad noch aufgefallen ist:
Code:
    while((ant.equals("j"))||(ant.equals("j")));
Da soll doch sicher anstatt des zweiten "j" ein "J" bzw. "y" stehen!?
 
PyroPi hat gesagt.:
Was mir grad noch aufgefallen ist:
Code:
    while((ant.equals("j"))||(ant.equals("j")));
Da soll doch sicher anstatt des zweiten "j" ein "J" bzw. "y" stehen!?

korrekt, vielen dank. das hab ich wohl irgendwie übersehen. ich hab auch noch mal die paar "ü"s ausgetauscht.

das mit der while schleife klappt ja wunderbar! :toll: :D :applaus:
 

Leroy42

Top Contributor
Riesenmonster hat gesagt.:
das mit der while schleife klappt ja wunderbar! :toll: :D :applaus:

Dann bleib' auch in Zukunft dabei!

Der Vorschlag Wildcard's mit dem Aufruf von main(null) war nur noch
daneben :autsch:

Andere Posts von Wildcard berücksichtigend, kann ich mir dies noch
nicht mal als Ausrutscher erklären, sondern nur damit, daß sein
Vorrat an Ironie/Sarkasmus-Tags dringend einer Auffrischung bedarf.

@Wildcard:
Code:
<ironie></ironie>, <ironie></ironie>, <ironie></ironie>, <ironie></ironie>

Na los! Wer spendet mit? :meld:
 

Wildcard

Top Contributor
Leroy42 hat gesagt.:
Der Vorschlag Wildcard's mit dem Aufruf von main(null) war nur noch
daneben :autsch:

Andere Posts von Wildcard berücksichtigend, kann ich mir dies noch
nicht mal als Ausrutscher erklären, sondern nur damit, daß sein
Vorrat an Ironie/Sarkasmus-Tags dringend einer Auffrischung bedarf.
:roll:
Kann man ruhig machen wenn man schreibfaul ist...
Sieh dir das Programm an:
typische prozedurale Schulaufgabe die irgendwas von Tastatur einliest und irgendwas damit macht.

Natürlich ist die while-Schleife der richtige weg, aber hier tut's auch die dreckige rekursive Variante.
Warum? Weil es dir spätestens nach der 10. Wiederholung langweilig wird und du das Programm beendest.
Für einen Stackoverflow müsste man schon EXTREME Ausdauer beweisen.
Auch die eventuelle Gefahr sich in der Lernphase falsche Dinge anzugewöhnen ist hier vernachlässigbar, da man (spätestens mit dem Erlernen von OOP) die Grundlagen beherscht und weiß wo man besser Schleifen, und wo besser Rekursion verwenden sollte.
Fazit: nicht übertreiben :wink:
 

Leroy42

Top Contributor
Wildcard hat gesagt.:
st hier vernachlässigbar, da man (spätestens mit dem Erlernen von OOP) die Grundlagen beherscht und weiß wo man besser Schleifen, und wo besser Rekursion verwenden sollte.
Fazit: nicht übertreiben :wink:

Das seh' ich ein! :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Mathe Bibliotheksfunktionen nutzen bei Geany Java Basics - Anfänger-Themen 1
S Mathe Lib gesucht Java Basics - Anfänger-Themen 2
Luk10 Logik/Mathe Problem Java Basics - Anfänger-Themen 6
-horn- Mathe: Variable gleich Infinity, wie mit if rausfiltern? Java Basics - Anfänger-Themen 9
M JCaptcha: Mathe-Captcha-Engine Java Basics - Anfänger-Themen 3
S Mathe in der Programmierung (Winkel im Bogenmaß) Java Basics - Anfänger-Themen 7
K Warum Mathe? Java Basics - Anfänger-Themen 11
R Wörter-KarteiSystem/Vokabel Trainer Source Fragen Java Basics - Anfänger-Themen 9
O OOP Vokabel-Trainer Java Basics - Anfänger-Themen 54
H Fehler bei integer Division Java Basics - Anfänger-Themen 28
Eninaj Division Java Basics - Anfänger-Themen 12
E Division von BigInteger soll Gelitkommazahl liefern Java Basics - Anfänger-Themen 46
Y Datentypen Double Division ungenau Java Basics - Anfänger-Themen 45
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
J Division ohne Arithmetische Funktion Java Basics - Anfänger-Themen 2
M rekursive division/0 mit exception Java Basics - Anfänger-Themen 18
Arif Java Division Java Basics - Anfänger-Themen 4
T Division durch 0 abfangen mit Schleife Java Basics - Anfänger-Themen 4
C Erste Schritte Problem mit der Division von Koeffizienten... oder einfach nur irgendwlechen zahlen Java Basics - Anfänger-Themen 10
Q Operatoren inkrement der Division ? Java Basics - Anfänger-Themen 16
A Ausgabe einer Division Java Basics - Anfänger-Themen 11
A Brauche Hilfe bei Division von Feldzahl durch Ganzzahl Java Basics - Anfänger-Themen 3
S double division Java Basics - Anfänger-Themen 4
Corben if Abfrage mit Division durch Null Java Basics - Anfänger-Themen 4
T Datentypen byte -Division..mal gehts mit cast mal ohne Java Basics - Anfänger-Themen 5
H Division Java Basics - Anfänger-Themen 4
A Problem bei der Division mit Java Java Basics - Anfänger-Themen 4
J division mit rest Java Basics - Anfänger-Themen 8
U if-Anweisung trotz Division/0 Java Basics - Anfänger-Themen 6
S Division von long! Java Basics - Anfänger-Themen 4
U Double-Variable führt Division nicht korrekt aus Java Basics - Anfänger-Themen 4
RaoulDuke Division von ints Java Basics - Anfänger-Themen 2
B Division ergibt null Java Basics - Anfänger-Themen 7
G Modulo Division funzt nicht Java Basics - Anfänger-Themen 3
S Division durch null abfangen :freak: Java Basics - Anfänger-Themen 14
C Wie erhalte ich nur ganze Zahlen als Ergebnis einer Division Java Basics - Anfänger-Themen 4
P Division Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben