Mein erstes Programm

  1. #1
    aKuJii


    Mein erstes Programm
    Hallo liebe Community!

    Ich fange gerade erst an mir JAVA bei zubringen also seid bitte net so hart zu mir ^^.
    Wollte mal fragen was ihr zu meinem Programm sagt?
    Es ist noch auf Consolen ebene also ihr müsste es mit JCreator oder sonst was öffnen.

    Code:
    import java.io.*;
     public class Lernprogramm
     {
     static BufferedReader input= new BufferedReader(new InputStreamReader(System.in));
     static int richtig=0;
     static int falsch=0;
     static int wahl=0;
     static int zufallsZahl1=0;
     static int zufallsZahl2=0;
     public static void main (String argv[])throws IOException
     {
     int auswahl=-6;
     while (auswahl !=0)
     {
     System.out.println("\t Grundrechenarten Lernprogramm");
     System.out.println("\n\n ");
     System.out.println("\t 1 - Addition von zwei Zahlen");
     System.out.println("\t 2 - Subtraktion von zwei Zahlen");
     System.out.println("\t 3 - Multiplikation von zwei Zahlen");
     System.out.println("\t 4 - Division von zwei Zahlen");
     System.out.println("\t 5 - Hilfe");
     System.out.println("\t 0 - ENDE");
     System.out.println("\n");
     System.out.print("\t Ihre Wahl: ");
     
     try
     {
     auswahl=Integer.parseInt(input.readLine());
     System.out.println();
     switch(auswahl)
     {
     case 1: add(); break;
     case 2: sub(); break;
     case 3: multi(); break;
     case 4: div(); break;
     case 5: hilfe(); break;
     }
     if(auswahl >0 && auswahl <=5)
     {
     System.out.println("\n\n\t Sie haben "+richtig+" von "+(richtig+falsch)+" Aufgabe(n) richtig geloest!");
     }
     else if(auswahl!=0)System.out.println("\t Bitte die Ziffern 0 bis 5 verwenden!");
     }
     catch(NumberFormatException e){ System.out.println("\n\t Bitte die Ziffern 0 bis 5 verwenden!");
                                     System.out.println("");
                                     System.out.println("\n\t *********************************"); }
     }
     
     }
     
     /*
      *Static void add()
      */
     static void add()throws IOException
     {
     	int erg=0,ergR=0;
     	boolean ok=true;
     	
      	do{
      	zufallsZahl1=zufallsZahl(10,1);
     	zufallsZahl2=zufallsZahl(20,1);
     	ergR=zufallsZahl1+zufallsZahl2;
      	do{
      	try{
     	ok=false;	
        System.out.print(""+zufallsZahl1+"+"+zufallsZahl2+"= ");
        erg=Integer.parseInt(input.readLine());
        if(erg==ergR){
        	System.out.println("Sie haben das korrekte Ergebnis eingegeben!");
        	richtig++;
        	System.out.print("Moechten Sie aufhoeren?ja(-0)nein(1)");
        	System.out.print("Ihre Wahl: ");
        	wahl=Integer.parseInt(input.readLine());
        }    
        else
        {
        	System.out.println("Sie haben das falsche Ergebnis eingegeben, Das richtige ergebnis lautet: "+ergR);
        	falsch++;
        }
        } catch (NumberFormatException e) {
        	System.out.println("Bitte nur Zahlen eingeben");
        	ok=true;}
        }while(ok);
       } while(wahl!=-0); 
       }
      /*
      *Static void sub()
      */
     static void sub()throws IOException
     {
     	int erg=0,ergR=0;
     	boolean ok=true;
     	
      	do{
      	zufallsZahl1=zufallsZahl(10,20);
     	zufallsZahl2=zufallsZahl(20,1);
     	ergR=zufallsZahl1-zufallsZahl2;
      	do{
      	try{
     	ok=false;	
        System.out.print(""+zufallsZahl1+"-"+zufallsZahl2+"= ");
        erg=Integer.parseInt(input.readLine());
        if(erg==ergR){
        	System.out.println("Sie haben das korrekte Ergebnis eingegeben!");
        	richtig++;
        }    
        else
        {
        	System.out.println("Sie haben das falsche Ergebnis eingegeben, Das richtige ergebnis lautet: "+ergR);
        	falsch++;
        }
        } catch (NumberFormatException e) {
        	System.out.println("Bitte nur Zahlen eingeben");
        	ok=true;}
        }while(ok);
       } while(erg!=-0); 
     }
      /*
      *Static void multi()
      */
     static void multi()throws IOException
     {
     	 	int erg=0,ergR=0;
     	boolean ok=true;
     	
      	do{
      	zufallsZahl1=zufallsZahl(10,1);
     	zufallsZahl2=zufallsZahl(20,1);
     	ergR=zufallsZahl1*zufallsZahl2;
      	do{
      	try{
     	ok=false;	
        System.out.print(""+zufallsZahl1+"*"+zufallsZahl2+"= ");
        erg=Integer.parseInt(input.readLine());
        if(erg==ergR){
        	System.out.println("Sie haben das korrekte Ergebnis eingegeben!");
        	richtig++;
        }    
        else
        {
        	System.out.println("Sie haben das falsche Ergebnis eingegeben, Das richtige ergebnis lautet: "+ergR);
        	falsch++;
        }
        } catch (NumberFormatException e) {
        	System.out.println("Bitte nur Zahlen eingeben");
        	ok=true;}
        }while(ok);
       } while(erg!=-0); 
     }
      /*
      *Static void div()
      */
     static void div()throws IOException
     {
     	int erg=0,ergR=0;
     	boolean ok=true;
     	
      	do{
      	zufallsZahl1=zufallsZahl(10,20);
     	zufallsZahl2=zufallsZahl(20,1);
     	ergR=zufallsZahl1/zufallsZahl2;
      	do{
      	try{
     	ok=false;	
        System.out.print(""+zufallsZahl1+"/"+zufallsZahl2+"= ");
        erg=Integer.parseInt(input.readLine());
        if(erg==ergR){
        	System.out.println("Sie haben das korrekte Ergebnis eingegeben!");
        	richtig++;
        }    
        else
        {
        	System.out.println("Sie haben das falsche Ergebnis eingegeben, Das richtige ergebnis lautet: "+ergR);
        	falsch++;
        }
        } catch (NumberFormatException e) {
        	System.out.println("Bitte nur Zahlen eingeben");
        	ok=true;}
        }while(ok);
       } while(erg!=-0); 
     }
      /*
      *Static void hilfe()
      */
     static void hilfe()
     {
     	System.out.print("Um in ein Menue zu wechseln druecken sie bitte im Hauptmenue eine Zahl von 1-5");
     	System.out.print("Die Zahl fuer das Menue in das sie wollen befindet sich vor der Beschreibeung ");
     	System.out.print("des Programmes");
     }
     /*
      *Static void zufallZahl()
      */
     static int zufallsZahl(int z,int anf)
     {
     int zahl=(int)(anf+Math.random()*z);
     return zahl;
     }
     }
    was sagt ihr dazu`? Soll ein Lernprogramm für die Grundschule sein. (Natürlich nicht, aber der einfachhalts halber sag ichs mal so =) ) Mein Problem ist nur bei der Division das ich da immer die Falschen zahlen bekommen so das Komma Zahlen rauskommen. Ist das der Begriff Float mit komma zahlen?

    mfG Chris

  2. #2
    MPW


    Ich bin gerade ein bisschen blind, wo ist denn ergR deklariert, ist das ein float?(Ich find das irgendwie nicht in deinem Code)

  3. #3
    aKuJii


    ergR ist das was der Computer rechnet um es später bei der IF schleife zu vergleichen.

    erg = Was der USer tippt
    ergR = was der Computer ausrechnet

    ergR wird immer in der Methode deklariert wenn du das meinst (int ergR)

    bitte net so fach ausdrücke ^^ bin noch net so der profi

  4. #4
    Beni

    Für ein Erstlingswerk, gar nicht übel

    Zur Division: int / int gibt int. Also z.B. 7 / 2 ergibt 3. Um das zu umgehen, verwendest du mit Vorteil "float" oder "double" (einfache bzw. doppelte Präzision Flieskommazahlen).

    Zu deinem Program, da habe ich folgende Kritiken:
    - Codeeinrückung ist misserabel. In der zweiten Hälfte wird es zwar besser, aber sauber ist das noch nicht. Gewöhn dir unbedingt an, die richtige Anzahl Tabulatoren/Leerzeichen vor einer Linie Code zu machen. Die Codeeinrückung erleichtert die Suche nach Fehlern, oder ganz allgemein das Lesen des Codes, ungemein.
    - Nimm etwas aussagekräftigere Namen für Variablen und Methoden.
    - Du hast ein bisschen gar oft denselben Code in den verschiedenen Methoden. Überleg dir mal, wie du diesen doppelten Code in eigene Methoden auslagen könntest.
    - Objektorientierte Programmierung sagt dir offensichtlich noch nicht viel. Das würde ich unbedingt anschauen. Mit OOP wäre dein Programm total anders aufgebaut (und ich kann dir garantieren, es wäre noch übersichtlicher )
    - Und gewöhn dir das "static" nicht zusehr an. Das Ding ist einfach "böse", man kann damit herrlich unflexiblen, fehlerbehafteten Code schreiben (sobald du OOP benutzt, solltes du versuchen, auf static zu verzichten).
    - Es gibt keine If-Schleife! Es gibt If-Verzweigungen, Bedingungen, Abschnitte, von mir aus Kreuzungen, aber keine Schleifen!

  5. #5
    aKuJii


    Ja das mit der einrückung mache ich noch nicht so stimmt =)
    OOP sagt mir rein gar nix. ist das jframe zeugs??

    was ist an static so schlimm?
    wo muss ich dann das float oder double setzten? vor ergR rechnung? kannnst du mir vllt den abschnitt mal posten?


    ALLES KLAR^^

  6. #6
    Beni

    Über OOP wurden (und werden) ganze Bücher geschrieben... JFrame ist ein Teil davon, ebenso der String. Es geht dabei um die Darstellung von Strukturen im Code und während der Laufzeit. OOP erlaubt mehrere Werte als "logische Einheit" aufzufassen, und als Ganzes in einem Programm hin und her zu schicken (inklusive Methoden die zu dem Objekt passen). Z.B. ist ein String eine Sammlung von Buchstaben, mit passenden Methoden wie "length()"...

    Wenn du sagst "static Haus xyz" kann es im gesammten Programm nur ein einziges Haus xyz geben. Wie soll man damit eine Stadt darstellen können? Static ist sozusagen das Gegnerparadigma zu OOP, in der es um die unabhängige Darstellung von Daten geht.
    "static" ist extrem bequem in der Anwendung (deshalb wird es auch von vielen Leuten benutzt), Programme mit vielen "statics" sind jedoch meist sehr unflexibel, wenn es darum geht, mal etwas abzuändern (z.B. eine Stadt und nicht nur ein einzelnes Haus darstellen).

    Das float: dort wo jetzt noch int steht (in der Division nur). Um Benutzereingaben als floats einzulesen, kannst du Float.parseFloat benutzen.

  7. #7
    Illuvatar


    Zitat Zitat von Beni
    Über OOP wurden (und werden) ganze Bücher geschrieben... JFrame ist ein Teil davon, ebenso der String. Es geht dabei um die Darstellung von Strukturen im Code und während der Laufzeit. OOP erlaubt mehrere Werte als "logische Einheit" aufzufassen, und als Ganzes in einem Programm hin und her zu schicken (inklusive Methoden die zu dem Objekt passen). Z.B. ist ein String eine Sammlung von Buchstaben, mit passenden Methoden wie "length()"...
    Das Zitat muss ich mir für meine GFS dieses Jahr merken


Keine Antwort auf Deine Suche gefunden? Registriere Dich kostenlos und stelle Deine eigene Frage zu Java!

Jetzt kostenlos registrieren