Programmbeispiele

Lottozahlen

Beschreibung

Man kann sich mit Java ein Programm schreiben, dass sich Lottozahlen ausdenkt. In diesem Beispiel die Variante des „6 aus 49“-Lotto. Eine Superzahl wird sich auch ausgedacht. Die Zahlen (mit der Superzahl) werden auf Befehl generiert und auf Wunsch auf der Konsole ausgegeben. Doppelte Zahlen werden nicht erzeugt, da ich eine (oder mehrere) if-Funktion(en) eingebaut habe, die dieses vermeidet. Allerdings sieht das ganze sehr unübersichtlich aus.. Trotzdem viel Glück beim Lottospielen :-D

Das Programm

/**
 * Lottozahlen
 * Autor: JW
 * Datum: 2007/08
 */
public class Lotto
{
    // Instanzvariablen - es werden 7 Stueck benoetigt
    int a, b, c, d, e, f, g;
 
    /**
     * Konstruktor für Objekte der Klasse Lotto
     * ist in diesem Fall unwichtig
     */
    public Lotto()
    {
 
    }
 
    public void denkeDirLottozahlen()
    {
        a = (int) (Math.random() * 48) +1; // Eine Zahl zwischen 1 und 49 ausdenken
        b = (int) (Math.random() * 48) +1; // Eine Zahl zwischen 1 und 49 ausdenken
        c = (int) (Math.random() * 48) +1; // Eine Zahl zwischen 1 und 49 ausdenken
        d = (int) (Math.random() * 48) +1; // Eine Zahl zwischen 1 und 49 ausdenken
        e = (int) (Math.random() * 48) +1; // Eine Zahl zwischen 1 und 49 ausdenken
        f = (int) (Math.random() * 48) +1; // Eine Zahl zwischen 1 und 49 ausdenken
        g = (int) (Math.random() * 10);    // Eine Zahl zwischen 0 und 9 ausdenken
 
        /**
         *  Doppelte Zahlen vermeiden -> neue ausdenken!
         */
 
        if (a == b)
        { a = (int) (Math.random() * 48) +1;} 
        if (a == c)
        { a = (int) (Math.random() * 48) +1;}
        if (a == d)
        { a = (int) (Math.random() * 48) +1;}
        if (a == e)
        { a = (int) (Math.random() * 48) +1;}
        if (a == f)
        { a = (int) (Math.random() * 48) +1;}
        if (b == c)
        { b = (int) (Math.random() * 48) +1;}
        if (b == d)
        { b = (int) (Math.random() * 48) +1;}
        if (b == e)
        { b = (int) (Math.random() * 48) +1;}
        if (b == f)
        { b = (int) (Math.random() * 48) +1;}
        if (c == d)
        { c = (int) (Math.random() * 48) +1;}
        if (c == e)
        { c = (int) (Math.random() * 48) +1;}
        if (c == f)
        { c = (int) (Math.random() * 48) +1;}
        if (d == e)
        { d = (int) (Math.random() * 48) +1;}
        if (d == f)
        { d = (int) (Math.random() * 48) +1;}
        if (e == f)
        { e = (int) (Math.random() * 48) +1;}
    }
 
    public void gibLottozahlen()
    {
        System.out.println("Die Lottozahlen sind: " + a + " " + b + " " + c + " " + d + " " + e + " " + f);
        System.out.println("Superzahl: " + g);
    }
}

Erklärung

veraendernde Methode denkeDirLottozahlen: Hier werden den Variablen a, b, c, d, e und f Zahlen zwischen 1 und 49 zugewiesen. Die Spielmethode ist schließlich 6 aus 49.. der Befehl hier für lautet:

(int) (Math.random() * 48) +1;

Die +1 steht dafür, dass die generierte Zahl mit 1 addiert wird. So wird z.B. aus der Zahl 0 eine 1 und aus der Zahl 48 eine 49. Somit können alle Zahlen zwischen 1 und 49 vorkommen. Die Variable g erhält eine Zahl zwischen 0 und 9.

Zusätzlich zu dem Generieren kommt das Vermeiden von doppelten Zahlen mit einer Reihe von if-Funktionen.

sondierende void Methode gibLottoZahlen: In dieser Methode werden die Werte der Variablen a bis f ausgegeben. Die Zahlen 6 aus 49, also a, b, c, d, e und f, werden zusammen in einer Reihe auf der Konsole ausgegeben, während die Superzahl g nochmal extra in einer Zeile ausgegeben wird. Hierzu wird der Befehl benoetigt:

System.out.println("TEXT");

Lotto - Variante

Unter Verwendung eines Sets, lässt sich einiges an Programmieraufwand einsparen.

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
 
/**
 * @author AB
 */
public class Lotto {
 
	public static HashSet<Integer> generateLotto(){
		HashSet<Integer> values = new HashSet<Integer>();  // Ein Set zur Vermeidung von doppelten Werten
		while(values.size() < 6){						   // Solange neue Werte generieren, bis Set 6 
			values.add(new Random().nextInt(49)+1);		   // Werte enthält.
		}
		return values;
	}
 
	public static void print(Collection<Integer> values){   // Interface Collection dient zur flexiblen Nutzung.
		ArrayList<Integer> sortedValues = new ArrayList<Integer>(values);
		Collections.sort(sortedValues);						// sortier-Kram
		Iterator<Integer> it = sortedValues.iterator();		// Ein Iterator wird beschaffen.
		while(it.hasNext()){								// Solange es noch ein Element in der Collection gibt,
			System.out.println(it.next());					// gib das nächste Element aus.
		}
	}
 
	public static void main(String[] args) {
		print(generateLotto());
	}
}

Weihnachtsbaum


Das Ziel diese Programmes ist die Erstellung eines Weihnatsbaumes mit variabler Breite,der auf die Konsole ausgegeben wird. (Aufgabe der letzten Stunde vor den Ferien)


weihnachtsbaum 1.0

Variablen Erklärung

  String z;            //Parameterübergabe des "zeichen"s (z als anfangsbuchstabe)          
  String zaus;         //Der Wert "z", der ausgegeben wird (z+aus(ausgabe))             
  String zfest;        //Der Wert "z", der sich nie ändert (z+fest)              
  String leer;         //"leer" für " " (leerzeile)                
  String leeraus;      //"leeraus" ,da diese leerzeilen ausgegeben werden 

int b; Parameterübergabe der „breite“(„b“ als kurzform) (auch zum ausrechnen der abstände zum rand benutzt) int bfest; b+fest —→ ändert sich nicht

  int rechenb;         // "rechenb" mit dieses "b" speichert die meisten zwischenrechnungen
  int einrückenfix;    // zur übergabe von ergebnissen genutzt
  int forzähler;       // zählt in einer bestimmten forschleife die durchgänge und errechnet so wie viel leerzeilen weniger eingerückt werden muss

0.1

-einrücken mit „ “ (noch nicht richtig eingerückt:-?)

-variables zeichen

0.2

-added Stamm

0.3

-added kommentare8-)

0.4

-linkes einrücken gut aber zulange zeilen:?:

0.5

-mit 10 als breite klappts nu^^

1.0

-sollte nu mit jeder zahl klappen

-baum wird nun sehr weit nach rechts verschoben (auch aus dem bild raus)

-hoffnungsvollerweise alles variable

-angabe der breite beim erstellen gibt die stammdicke und die breite der oberen reihe an

-beim erstellen muss auch ein zeichen angegeben werden mit dem der baum „gemalt“ wird (in üblicher »String« [zB„X“] Form)

1.1

-Variablen reset zum verhindern von zweitzeichnungen (die verzerrt gewesen wären)

- neue Methode zum nachträglichen einstellen der breite und des zeichens

-verhindern von breitenangaben unter 5 ,da diese kein vernünftiges/gutes Bild ausgeben

-sinnvollere variablen


Programm
/**
 * Weihnachtsbaumhalt (mit viel phantasieeeeeeeeeeeeeeeeeee)
 * 
 * IB
 * 1.1
 */
public class Baum
{
 
    String z;              //string variablen zum diversen speichern/bearbeiten des "zeichen"s         
    String zaus;                     
    String zfest;                      
    String leer;                         
    String leeraus; 
 
    int b;                //int variablen zum rechnen bzw speichern der angegebenen "breite"     
    int bfest;
    int rechenb;
    int einrückenfix;
    int forzähler;
 
 
    public Baum(int breite,String zeichen)    //benutzer gibt gewünschte breite bzw gewünschtes zeichen an
    {
 
 
        leer = " ";                    //übertragen der angegeben werte/zeichen bzw =0setzung der variablen    
        zfest = zeichen;
        z = zeichen;
        zaus = " ";
        leeraus = " ";
 
        rechenb = 0;
        bfest = breite;
        b = breite;
        einrückenfix = 0;
        forzähler = 0;
        if(breite<=5)
         {
 
             System.out.println("Error: Breite zu gering");
             bfest = 0;
             b = 0;
 
            }
 
    }
 
    public void zahlentausch(int breite,String zeichen)            //neue maße für den baum angeben
        {
 
          leer = " ";              //übertragen der angegeben werte/zeichen bzw =0setzung der variablen  
          zfest =zeichen;
          z = zeichen;
          zaus = " ";
          leeraus = " ";
 
          rechenb = 0;
          bfest = breite;
          b = breite;
          einrückenfix = 0;
          forzähler = 0;
        }
 
 
    public void zeichnen()                    //baumzeichnen
    {
        rechenb = (b*b-b)/2;                //ausrechnen der anzahl der leerstellen die eingerückt werden  
        einrückenfix = rechenb;
 
        for(int i=1;i<=rechenb;i++)          //string variable "leer" wird "rechenb" mal um " " erhöht 
       {
 
          leer = leer + " ";    
 
        }
 
          for(int u=1;u<=b/2;u++)              //block wird 1/2 "b" mal wiederholt   
 
           {
 
            for(int y=1;y<=b;y++)                // "zaus" wird "b" mal um "zfest" erhöht (speichern über "z")
 
             {
 
                zaus = z + zfest;
                z = zaus;
 
             }
 
 
 
 
             leeraus = leer;                      //"leeraus" wird = "leer" gesetzt
 
             System.out.println(leeraus + zaus);    //Ausgabe auf die konsole
 
 
             forzähler = forzähler + (b);
 
             rechenb = ((bfest*bfest-b)-forzähler)/2;                //rechenb mit "zeichen" startwert "bfest" bestimmen      
 
             leer = " ";                               //variable "leer" reseten
 
             for(int i=1;i<=rechenb;i++)           //"rechenb" mal "leer" um " " erhöhen
 
               {
 
                    leer = leer + " ";
 
             }
 
 
 
         }
 
        for(int h=1;h<=bfest/4;h++)    // 1/4"bfest" mal den nächsten block
        {
 
          leer = " ";
 
          for(int f=1;f<=einrückenfix;f++)        //"rechenb" mal "leer" um " " erhöhen    
 
         {
 
            leer = leer + " ";  
 
         } 
 
         zaus = zfest;                         //"zaus" = "zfest" setzen
 
         for(int e=1;e<=bfest;e++)             //"bfest" mal "zaus" um "zfest" erhöhen
          {
 
            zaus = zaus + zfest;
 
          }
 
         System.out.println(leer + zaus );      //ausgabe des ergebniss 
 
        leer = " ";                    //nullsetzen   (reseten)
        zfest = " ";
        z = " ";
        zaus = " ";
        leeraus = " ";
 
        rechenb = 0;
        bfest = 0;
        b = 0;
        einrückenfix = 0;
        forzähler = 0;
 
        }
    }
}

Ballaufgabe

Variante 1

import java.applet.*;
import java.awt.*;
 
/* IB, JM*/
 
public class Ball extends Applet
{
 
int x;
int y;
int x1;
int y1;
int xrandom;
int yrandom;
int brems;
 
 
 
    public ball()
    {
 
    }
 
 
    public void paint(Graphics g)
    {
        x= (int) (Math.random() * 400) + 1;
        y= (int) (Math.random() * 400) + 1;
        xrandom= (int) (Math.random() * 400) + 1;
        yrandom= (int) (Math.random() * 400) + 1;
 
        if(xrandom>=0.5)
        {
            x1=0;
        }
 
        if(xrandom<0.5)
        {
            x1=1;
        }
 
        if(yrandom>=0.5)
        {
            y1=0;
        }
 
        if(yrandom<0.5)
        {
            y1=1;
        }
 
           for(int i=0;i<=9999;i++)
           {
            brems=i/20;
 
            if(x>=400)
            {
                x1=1;
            }
            if(x<=0)
            {
                x1=0;
            }
            if(y>=400)
            {
                y1=1;
            }
            if(y<=0)
            {
                y1=0;
            }
 
 
 
            if(x1==1)
            {
                x=x-1;
                balltwo(g,x,y,brems);
 
                if(y1==1)
                {
                   y=y-1;
                   balltwo(g,x,y,brems);
                }
 
                if(y1==0)
                {
                   y=y+1;
                   balltwo(g,x,y,brems);
                }
            }
 
 
            if(x1==0)
            {
                x=x+1;
                balltwo(g,x,y,brems);
 
                if(y1==1)
                {
                   y=y-1;
                   balltwo(g,x,y,brems);
                }
 
                if(y1==0)
                {
                   y=y+1;
                   balltwo(g,x,y,brems);
                }
            }
 
 
            if(y1==1)
            {
                y=y-1;
                balltwo(g,x,y,brems);
 
                if(x1==1)
                {
                   x=x-1;
                   balltwo(g,x,y,brems);
                }
                if(x1==0)
                {
                   x=x+1;
                   balltwo(g,x,y,brems);
                }
            }
 
 
            if(y1==0)
            {
                y=y+1;
                balltwo(g,x,y,brems);
 
                if(x1==1)
                {
                   x=x-1;
                   balltwo(g,x,y,brems);
                }
 
                if(x1==0)
                {
                   x=x+1;
                   balltwo(g,x,y,brems);
                }
            }
        }
    }
 
 
 
 
 
 
     public void balltwo(Graphics g,int xOval,int yOval,int slow)
    {
       g.setColor(Color.green);
       g.fillRect(0,0,450,450);
       g.setColor(Color.black);
       g.fillOval(xOval,yOval,50,50);
       g.setColor(Color.green);
       g.fillOval(xOval+15,yOval+15,20,20);
       pause(slow);
       g.setColor(Color.black);
       g.fillRect(0,0,450,450);
       g.setColor(Color.green);
       g.fillOval(xOval,yOval,50,50);
       g.setColor(Color.black);
       g.fillOval(xOval+15,yOval+15,20,20);
       pause(slow);
 
       g.setColor(Color.green);
       g.fillRect(0,0,450,450);
       g.setColor(Color.black);
       g.fillOval(400-xOval,400-yOval,50,50);
       g.setColor(Color.green);
       g.fillOval(400-xOval+15,400-yOval+15,20,20);
       pause(slow);
       g.setColor(Color.black);
       g.fillRect(0,0,450,450);
       g.setColor(Color.green);
       g.fillOval(400-xOval,400-yOval,50,50);
       g.setColor(Color.black);
       g.fillOval(400-xOval+15,400-yOval+15,20,20);
       pause(slow); 
 
    }
 
    public void ball(Graphics g,int xOval,int yOval,int slow)
    {
       g.setColor(Color.black);
       g.fillOval(xOval,yOval,50,50);
       pause(slow);
       g.setColor(Color.white);
       g.fillOval(xOval,yOval,50,50);
    }
 
    private void pause(int ms)
    {
     try
     {
      Thread.sleep(ms);
     }
      catch(InterruptedException e){}
    }
}

Variante 2

import java.applet.*;
import java.awt.*;
 
/**
 * Guck mal ein Ball!
 *
 * @author JW
 * @version 21.04.2008
 */
public class Ball extends Applet
{
    // Instanzvariable - ersetzen Sie das folgende Beispiel mit Ihren Variablen
    private boolean xbool;
    private boolean ybool;
 
 
 
    public void paint(Graphics g)
    {
        // x ist die Position des Balles auf der x-Achse
        int x;
        // y ist die Position des Balles auf der y-Achse
        int y;
        // speed braucht man fuer die Geschwindigkeit
        double speeddouble;
        int speedint;
        // Am Anfang mal 1...
        speeddouble=1.0;
 
 
 
        // X und Y Anfangspositionen des Balles werden erfunden
        x= (int) (Math.random() * 400) + 1;
        y= (int) (Math.random() * 400) + 1;
 
        // Some Information ANFANG
        g.setColor(Color.black);
        // Kasten 1
        g.drawRect(0, 435, 190, 70);
        g.drawString("Groesse des Vierecks: 450x430", 2, 450);
        g.drawString("Groesse des Balls: 30x30",2,462);
        g.drawString("Ballfarben: mal rot, mal schwarz",2,474);
        g.drawString("© Julian Wieland",2,486);
        // Kasten 2
        g.drawRect(190,435,280,60);
        g.drawString("Nach jedem Abprallen wird der Ball langsamer",200, 450);
        g.drawString("Das ist doof:",200,462);
        g.drawString("Man muss jedes mal mit Taskmanager beenden",200,474);
        g.drawString("..oder lange (sehr lange) warten",200,486);
        // Information ENDE
 
 
 
        // Anfangsbewegungsrichtung des Balles wird erfunden
        int weg;
        weg= (int) (Math.random() * 4);       
        switch(weg)
        {
            case 0:                 // wenn weg 0
            xbool=true;
            break;
            case 1:                 // wenn weg 1           
            xbool=false;
            break;
            case 2:                 // wenn weg 2
            ybool=true;
            break;
            case 3:                 // wenn weg 3
            ybool=false;
            break;
            default: xbool=true;    // sonst so
        }
        // Anfangsbewegungen ENDE
 
 
 
 
        while(true)
        {
            // Rahmen muss gezeichnet werden, damit man sieht wo der Ball abprallt ANFANG
            g.setColor(Color.black);
            g.drawRect(0, 0, 450, 430);
            // Rahmen ENDE
 
            // Alles verschwinden lassen, damit der vorher gezeichnete Ball wieder verschwindet
            clear(g);
 
            // Ball wird gezeichnet ANFANG
            ball(g,x,y);
            // Ball ENDE
 
            /** Langsam(er) machen.. */
            // speedint bekommt durch einen TypeCast den Wert von speeddouble (sleep nimmt nur int an)
            speedint=(int)speeddouble;
            sleep(speedint);
            // Ausgabe des Wertes auf Bildschirm (Kasten 1)
            g.setColor(Color.white);
            g.fillRect(2,487,150,12);
            g.setColor(Color.black);
            g.drawString("Geschw. Reduzierung:"+speeddouble,2,498);
 
            if(x==0 || x==420 || y==0 || y==400)
            {
                // wenn der Ball die Waende beruehrt, wird speeddouble um 0.1 erhoeht
                // und speedint bekommt dann den Wert von speeddouble, damit es fuer die sleep methode anerkannt wird
                speeddouble=speeddouble+0.1;
                // speeddouble runden
                speeddouble= Math.round(speeddouble*100)/100.0;
 
            }
            /** Langsam ENDE */
 
 
            /** Abfragen zum Abprallen */
            if(x>=420)
            {
                // wenn x 420 ist, xbool true, also: "ja, bitte umdrehen" -> Werte verkleinern
                xbool=true;
            }
            if(x<=0)
            {
                // wenn x 0 ist, xbool false, also: "nein, bitte wieder wie am Anfang" -> Werte vergroessern
                xbool=false;
            }
            if(y>=400)
            {
                // wenn y 400 ist, ybool true, also: "ja, bitte umdrehen" -> Werte verkleinern
                ybool=true;
            }
            if(y<=0)
            {
                // wenn y 0 ist, ybool true, also: "nein, bitte wieder wie am Anfang" -> Werte vergroessern
                ybool=false;
            }
            /** Abfragen ENDE */
 
 
 
            // Abprallen ANFANG
            if(xbool==true)
            {
                // wenn wahr, Werte verkleinern -> umdrehen
                x=x-1;
            }
            if(xbool==false)
            {
                // wenn unwahr, Werte wieder vergroessern -> wieder normal
                x=x+1;               
            }
            if(ybool==true)
            {
                // wenn wahr, Werte verkleinern -> umdrehen
                y=y-1;
            }
            if(ybool==false)
            {
                // wenn unwahr, Werte vergroessern -> wieder normal
                y=y+1;
            }
            // Abprallen ENDE
 
        }
    }
 
 
 
 
    // Ball Methode mit Blinki (haesslich)
    public void ball(Graphics g,int xposball,int yposball)
    {
       //schwarzer Ball!!!
       g.setColor(Color.black);
       g.fillOval(xposball,yposball,30,30);
       // nein! roter Ball!!
       sleep(1);
       g.setColor(Color.red);
       g.fillOval(xposball,yposball,30,30);
    }
 
    // Ball verschwinden lassen Methode
    public void clear(Graphics g)
    {
       g.setColor(Color.white);
       g.fillRect(1,1,449,429);
    }
 
 
    /** Pause */
    private void sleep(int millis)
    {
     try
     {
      Thread.sleep(millis);
     }
      catch(InterruptedException e)
      {
 
      }
    }
 
 
 
}

Notendurchschnitt

/**
 * Diese Klasse berechnet den Notendurchschnitt einer Klausur.
 * Geben Sie die Anzahl der geschriebenen Noten ein, angefangen mit den Einsen,
 * um den Notendurchschnitt zu berechnen.
 * 
 * (Dies ist eine Rekonstruierung der Aufgabe 6 aus der Informatikarbeit.
 * Andere Lösungswege sind denkbar.)
 * 
 * @author (PT) 
 * @version (11.01.2011)
 */
public class Durchschnitt
{
    double alle;
    double notenanz;
    double[] note;
    double dschnitt;
   
    public Durchschnitt()
    {
        alle=0;
        notenanz=0;
        note = new double[6];
        for(int i=0; i<6; i++)
        {
            note[i]=i+1;
        }
    }

   public double noten(double einsen, double zweien, double dreien, double vieren, double fuenfen, double sechsen)
   {
       notenanz=einsen+zweien+dreien+vieren+fuenfen+sechsen;
       alle=note[0]*einsen+note[1]*zweien+note[2]*dreien+note[3]*vieren+note[4]*fuenfen+note[5]*sechsen;
       dschnitt=alle/notenanz;
       System.out.println("Der Notendurchschnitt ist:"+dschnitt);
       return dschnitt;
      
   }
}

Schülerbeiträge 2007/08

schule/if/ef/beispiele.txt · Zuletzt geändert: 2018/05/31 18:46 von ahrens
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0