Java - Material

Hier finden sich die besprochenen Java Programme des Wintersemesters 2008 ohne weiteren Kommentar.

Beispiel:

public class PrimitivTypen {
        /* lexikalische Typen sind int und double 
            andere direkte Wertzuweisungen müssen   
            "gecastet" werden z.B.: */

        public static void main(String[] args) {
            byte b = (byte)37; 
            short s = (short)387; 
            System.out.println("b = " + b);
            System.out.println("s = " + s);
            
            int i = 37;   // dezimal
            int j = 017;  // oktal -> 10 dez
            int k = 0xa4; // hexadezimal -> 20 dez
            System.out.println("i = " + i);
            System.out.println("j = " + j);
            System.out.println("k = " + k);
            long l = 37168686876861111L; 
            System.out.println("l = " + l);

            float f = (float)0.37F; 
            double d = 0.37; 
            double e = 0.37e+10; 
            System.out.println("f = " + f);
            System.out.println("d = " + d);
            System.out.println("e = " + e);
                
            char c = 'K';
            char u = 'A';
            for ( int ii = 0; ii < 1000; ii++ ) {
                u = (char)ii; 
                System.out.print(u + " ");
                if ( ii % 40 == 0 ) {
                   System.out.println();
                }
            }
            System.out.println("u = " + u);
            
            int m = u;
            System.out.println("m = " + m);
            boolean w = true && false; 
            System.out.println("w = " + w);
        }
}

Beispiel:

public class Variablen {
        int objektVariable = 7;
        static int neun = 9;
        final int CONST = 7;

        public static void main(String[] args) {
                System.out.println("neun = " + neun);
                Variablen meine = new Variablen();
                System.out.println("objektVariable = " 
                                + meine.objektVariable);
                System.out.println("CONST = " + meine.CONST);
                //meine.CONST = 13;
                meine.objektVariable = 999;
                
                int eineVariableVomTypint = 0; // = 0
                int i = 3;  // bitmuster: 0...011
                long index = 0;
                System.out.println("eineVariableVomTypint = " 
                                    + eineVariableVomTypint);

                Integer x = null;  // = null 
                Integer y = new Integer( -3 );
                Integer z = 5; // auto boxing ab JDK 1.5
                int a = z; // JDK 1.5
                System.out.println("x = " + x);
                System.out.println("y = " + y);
                System.out.println("z = " + z);
                System.out.println("a = " + a);
                //int b = x;
                //System.out.println("b = " + b);

                String s   = null; //"Eine Zeichenkette";
                String w$2 = s + " mit Erweiterung";
                System.out.println("s   = " + s);
                System.out.println("w$2 = " + w$2); 
                //int w = s.indexOf("u");
        }
}

Beispiel:

public /*strictfp*/ class Operatoren {

  public void numericalops() { 
        int n = 43;
        int m;
        n += 7; // ist eine Abkuerzung von n = n + 7; 
                    // dies funktioniert auch mit -, /, >>, etc. 
        System.out.println("n = " + n);
        //n = n * 2; // verdoppelt n 
        //System.out.println("m = " + m);
        m = n / 3; // teilt n ganzzahlig durch 2 
        System.out.println("m = " + m);
        m = n % 3; // Rest der ganzzahligen Division   
        System.out.println("m = " + m);
  } 
        
  int x = 42;
  static int y = 23;
  
  strictfp public void floatingpointops() { 
          double d = 2.71;
          System.out.println("d = " + d);
          float one = 1.0f;
          System.out.println("one = " + one);
          float f = 1.0f / (float)2; // liefert das float- 
                                     // Divisionsergebnis 
          System.out.println("f = " + f);
          double zero = 0.0;         // 0.0
                 zero = 1 / 5;         // 0.0
          System.out.println("zero = " + zero);
      
          double p = d / zero;       // Double.POSITIVE_INFINITY
          double n = -d / zero;      // Double.NEGATIVE_INFINITY
          System.out.println("p = " + p);
          System.out.println("n = " + n);
          double z = zero / zero;    // NaN = not a number 
          System.out.println("z = " + z);
          z = d * one + p;
          System.out.println("z = " + z);
         } 

  public void logicalops() { 
          boolean bool = true && false; // bool ist false 
          System.out.println("bool = " + bool);
          bool = true || false; // bool ist true 
          System.out.println("bool = " + bool);
          bool = true == false; // bool ist false
          System.out.println("bool = " + bool);
          bool = false != true; // bool ist true
          System.out.println("bool = " + bool);
          bool = ! bool; 
          System.out.println("bool = " + bool);
          // ! nimmt eine logische Negierung vor 
          // bool ist jetzt gleich false 
          bool = (4 >= 3); // bool ist true 
          System.out.println("bool = " + bool);
          bool = 4 != 4; // bool ist false  
          System.out.println("bool = " + bool);
  } 

  public void bitwiseops() { 
          int i = 3; 
          i = i << 1; // i ist jetzt 6 
          System.out.println("011 << 1 = 110: " + i);
          i = i & 7; // i ist jetzt 6 
          System.out.println("110 & 111 = 110: " + i);
          i = i | 3; // i ist jetzt 7
          System.out.println("110 | 011 = 111: " + i);
          i = 3 >> 1; // i ist jetzt 1 
          System.out.println("011 >> 1 = 001: " + i);
          i = -3 >> 1; // i ist jetzt 1 
          System.out.println("xxx >> 1 = xxx: " + i);
          i = -3 >>> 1; // i ist jetzt 1 
          System.out.println("xxx >> 1 = xxx: " + i);
  } 

  public void difficultops() { 
          int var = 0;

          if (var++ > 0) {
                  System.out.println("werde nicht gedruckt");
          }
          System.out.println("var = " + var);
          // ist gleichbedeutend mit 
          if (var < 0) { }
          var = var + 1; 
          System.out.println("var = " + var);
          
          if (++var == 2) {
                  System.out.println("werde auch nicht gedruckt");
          }
          System.out.println("var = " + var);
          // ist gleichbedeutend mit 
          var = var - 1;
          if ( var == 2 ) { } 

          int a = 1;
          int cond = ( a >= 4 ? a : -2 ); 
          System.out.println("cond = " + cond);
          // conditional ist jetzt -2  
          if ( a == 4 ) { 
             cond = 3; 
          } else { 
            cond = -2; 
          }
          System.out.println("cond = " + cond);
  } 
  
  public static void main(String[] args) {
          Operatoren me = new Operatoren();
          me.numericalops();
          System.out.println("me.x = " + me.x);
          me.x *= 11; // me.x = me.x * 11
          System.out.println("me.x = " + me.x);
          System.out.println("y = " + Operatoren.y);
          me.floatingpointops();
          me.logicalops();
          me.bitwiseops();
          me.difficultops();
  }
}

Beispiel:

public class Sichtbarkeit {

        static void blocks() {
          int x = 1;
          int y;
          if ( true ) {
            int z = 2; // fehler x wird verdeckt
            y = z;
          }
          y = x;
          System.out.println("y = " + y);
        }

        static void leben() {
          int x = Sichtbarkeit.x;
          if ( true ) { 
             int y = 2; 
             x = y;
          }
          // x = y; // fehler y existiert nicht mehr
          System.out.println("x = " + x);
        }

        static int x = 7;
        int z = 3;

        void objectLeben() {
          int z = this.z + Sichtbarkeit.x;
          if ( true ) { 
            int y = 2; 
            z = y;
          }
          // x = y; // fehler y existiert nicht mehr
          System.out.println("z = " + z);
        }

        public static void main(String[] args) {
           blocks();
           leben();
           (new Sichtbarkeit()).objectLeben();
        }
}

Beispiel:

public class Kontrollstrukturen {

        static public void decision() { 
            int variable = 2; 
            if (false && variable > 1 && variable < 3) { 
               variable = variable - 1; 
            } else { 
                if (variable != 2) { 
                   variable = variable + 1; 
                } else if (true){
                   variable = 0;
                   //return;
                } else {
                   variable = -1;
                }
            }
            System.out.println("variable = " + variable);
            variable = 999;
            final int acht = 8;
            switch (variable) { 
            case acht:
            case 99:
                System.out.println("variable_0,99 = " + variable);
            case 1: 
                // variable ist 0 oder 1 
                    System.out.println("variable_1 = " + variable);
                break; 
            case 2: 
                variable = variable * 2; 
                System.out.println("variable_2 = " + variable);
                //break; 
            default: 
                System.out.println("variable_d = " + variable);
                // variable ist nicht 0, 1 oder 2 
            }
            char ch = 'i';
            switch (ch) {
                case 'i': System.out.println("ch = i"); //break;
                case 'k': System.out.println("ch = k"); //break;
                default:  System.out.println("ch = ?"); 
            }
        }

        static public void loop() { 
            //int index1 = 0;
            for (int index = 0; index < 9; index++) { 
                 System.out.println("index = " + index);
            } 
            //System.out.println("index = " + index);
            int i = 0;
            for (;;) {
                //int i = 0;
                if ( i > 3 ) {
                        break;
                }
                System.out.println("i_1 = " + i);
                i++;
            }
            while ( i > 0 ) {
                System.out.println("i_2 = " + i);
                i--;
            }
            do {
                System.out.println("i_3 = " + i);
            } while ( false );
        }       

        public static void main(String[] args) {
            decision();
            loop();
        }
}

Beispiel:

import java.util.Date;
public class Reihungen {
        byte[] buffer = new byte[40];
        byte[] data   = new byte[40];
        int[][] plot  = new int[6][6];
        float[] stat  = { 1.0f, 2.0f, 3.14f, 2.71f, 1.99f };
        Date[] ds     = new Date[6];

        public void initialisieren() {
            for (int i=0; i < buffer.length; i++) {
                buffer[i] = (byte)i;
            }
            for (int i=0; i < ds.length; i++) {
                ds[i] = new Date();
            }
        }

        public void drucken() {
                System.out.print("buffer =");
                for (int i=0; i < buffer.length; i++) {
                System.out.print(" " + buffer[i]);
            }
                System.out.println();
        }

        public String holeDatum() {
            String s = "";
            for (int i=0; i < ds.length; i++) {
                s += "ds[" + i + "] = " + ds[i] + "\n";
            }
            return s;
        }

        public static void main(String[] args) {
          Reihungen r = new Reihungen();
          r.initialisieren();
          r.drucken();
          System.out.println( r.holeDatum() );
        }
}

Beispiel:

public class IntString {
        public static void main(String[] args) {
          int[] iargs = new int[ args.length ];
          int summe = 0;
          for (int i = 0; i < args.length; i++ ) { 
            System.out.println("args["+i+"]  = " + args[i]);
            try {
               iargs[i] = Integer.parseInt( args[i] );
            } catch( NumberFormatException e ) {
                   iargs[i] = 0;
                   System.out.println("Fehler bei " + args[i]);
                   System.out.println("Ausnahme = " + e);
            } catch ( Exception e ) {
                   System.out.println("Damit habe ich nicht gerechnet");
            } finally {
                   // ganz zum schluss
            }
            summe += iargs[i];
            System.out.println("iargs["+i+"] = " + iargs[i]);
          }
          System.out.println("die Summe ist " + summe);
        }
}

Beispiel:

public class Unterprogramme {

        void prozedur() {
            // return 4; //geht nicht
        }

        void prozedur(int a) {
                System.out.println("a = " + a);
        }

        int funktion() {
            return 4711;
        }

        double funktion(double d) {
                d = 4711.0 + d;
                return d;
        }

        int facultaet(int i) {
                System.out.println("i = " + i);
                if ( i &lt;= 1 ) {
                        return 1;
                } else {
                        int k = facultaet( i - 1 );
                        System.out.println("k = " + k);
                        return i * k;
                }
        }

        int fac(int n) {
                int k = 1;
            for ( int i = 1; i &lt;= n; i++ ) {
                k = k * i;
            }
                return k;
        }

        double summe(double[] feld) {
                double sum = 0.0;
                for ( int i = 0; i &lt; feld.length; i++ ) {
                        sum += feld[i];
                }
                return sum;
        }

        public static void main(String[] args) {
          Unterprogramme up = new Unterprogramme();
          double[] vector = { 1.0, 2.0, 2.71, 3.14156, -1.0 };
          double s = up.summe( vector );
          System.out.println("summe = " + s);        
          int n = up.facultaet( 15 );
          System.out.println("n = 15! " + n);
          n = up.fac( 15 );
          System.out.println("n = 15! " + n);
          up.prozedur();
          up.prozedur(5);
          int k = 7;
          up.prozedur(k);
          up.prozedur( up.funktion() );
          int i = up.funktion();
          System.out.println("i = " + i);
          System.out.println("funktion() = " + up.funktion());
          double d = up.funktion( 3.14159 );
          System.out.println("d = " + d);
        }
}

Beispiel:

public class Uebergabe {

        void referenz( Unter u ) {
                        int x = u.a * 3;
                        u.b = x + 14;
        }

        void unveraendert( Unter u ) {
               u = new Unter();
               int x = u.a * 3;
               u.b = x + 14;
        }

        public static void main(String[] args) {
                Uebergabe ub = new Uebergabe();
                Unter u = new Unter();
                System.out.println(" u = " + u);
                ub.referenz( u );
                System.out.println(" u1 = " + u.toString());
                u = new Unter();
                ub.unveraendert(u);
                System.out.println(" u2 = " + u);
        }
}

class Unter {
        int a = 0;
        int b = 1;
        public String toString() {
                return "a = " + a + ", b = " + b;
        }
}

Beispiel:

public class Klassen {
    static int klassen = 0;
    int meineNummer = -1;

    Klassen() {
        //meineNummer = klassen++; // klassen = klassen + 1 
        //int i = 0;
        this( klassen );
        int y = 0;
    }

    Klassen(int n) {
        meineNummer = n;
        klassen++;
    }

    static String statistik() {
        return klassen + " erzeugte(s) Objekt(e)";
    }

    public String toString() {
        return "Object Nummer " + meineNummer + " von " + klassen;
    }

    public static void main(String[] args) {
            System.out.println("Statistik: " + Klassen.statistik());
            Klassen eins = new Klassen();
            System.out.println("eins = " + eins);
            for ( int i = 0; i < 10; i++ ) {
                eins = new Klassen( 5*i );
            }
            System.out.println("eins = " + eins);
            Klassen zwei = new Klassen();
            System.out.println("zwei = " + zwei);    
            System.out.println("Statistik: " + statistik());
    }
}

Beispiel:

public class Rational {
        long zaehler; 
        long nenner;

        Rational(long z, long n) {
                zaehler = z;
                nenner = n;
        }

        Rational(long z) {
                this(z,1);
        }

        Rational() {
                this(0);
        }

        Rational multiply(Rational b) {
                return new Rational( zaehler * b.zaehler,
                                             nenner * b.nenner );
        }

        Rational summe(Rational b) {
                return new Rational(  zaehler * b.nenner 
                                             + nenner * b.zaehler,
                                             nenner * b.nenner );
        }

        public String toString() {
                return zaehler + " / " + nenner;
        }
}

Beispiel:

public class Beispiel {

      public static void main(String[] args) {
        Rational h = new Rational(1,2);
        Rational t = new Rational(1,3);
        System.out.println("h = " + h);
        System.out.println("t = " + t);
        Rational m = h.multiply(t); // m = h * t
        System.out.println("m = " + m);
        Rational s = h.summe(t); // s = h + t
        System.out.println("s = " + s);
      }
}

Beispiel:

import java.awt.event.WindowListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import java.awt.Color;
import java.awt.Font;

public class GutenAbendBA {

   public static void main(String[] args) {
          JFrame.setDefaultLookAndFeelDecorated(false);
          Font meiner = new Font("SansSerif", Font.BOLD, 28 );
          JFrame main = new JFrame("Guten Abend BA");
          //JComponent innen;
          //innen = new JLabel("wie gehts ?");
          //innen = new JTextArea("wie gehts ?");
          final JTextField innen = new JTextField("wie gehts ?");
          innen.setBackground( Color.GREEN );
          innen.setForeground( Color.red );
          innen.setFont( meiner );
          main.setContentPane( innen );
          main.setLocation(200,100);
          main.pack();
          main.setSize(300,200);
          String text = "";
          main.addWindowListener( new WindowAdapter() {
               public void windowClosing(WindowEvent event) {
                    String x = innen.getText();
                    //text = innen.getText();
                    System.out.println("x = " + x);
                    System.exit(0); // not do this in production
               }
             }
          );
          main.setVisible(true);
          text = innen.getText();
          System.out.println( "text = " + text );
   }
}

Beispiel:

import java.awt.event.WindowListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.JPanel;

public class GutenMorgenBA {

   public static void main(String[] args) {
          JFrame.setDefaultLookAndFeelDecorated(false);
          Font meiner = new Font("SansSerif", Font.BOLD, 28 );
          JFrame main = new JFrame("Guten Abend BA");
          JPanel panel = new JPanel();
          panel.setBorder( BorderFactory.createEtchedBorder() );
          panel.setBackground( Color.yellow );
          panel.setForeground( Color.red );
          panel.setFont( meiner );
          // set its layout
          panel.setLayout(new BorderLayout());
          //JComponent innen;
          //innen = new JLabel("wie gehts ?");
          //innen = new JTextArea("wie gehts ?");
          final JTextField innen = new JTextField("wie gehts ?");
          innen.setBackground( Color.GREEN );
          innen.setForeground( Color.red );
          innen.setFont( meiner );
  
          panel.add( new JLabel("label north"),BorderLayout.NORTH );
          panel.add( new JLabel("label south"),BorderLayout.SOUTH );
          panel.add( new JLabel("west"),BorderLayout.WEST);
          panel.add( new JLabel("east"),BorderLayout.EAST);
          panel.add(innen);
          main.setContentPane( panel );

          main.setLocation(200,100);
          main.pack();
          main.setSize(300,200);
          String text = "";
          main.addWindowListener( new WindowAdapter() {
               public void windowClosing(WindowEvent event) {
                    String x = innen.getText();
                    //text = innen.getText();
                    System.out.println("x = " + x);
                    System.exit(0); // not do this in production
               }
             }
          );
          main.setVisible(true);
          text = innen.getText();
          System.out.println( "text = " + text );
   }
}

Beispiel:

public class Vererbung {

      public static void main(String[] args) {
        B1 b = new B1();
        System.out.println("b = " + b/*.toString()*/);
        b.b1methode2();
        A1 a = new A1();
        System.out.println("a = " + a);
        a.b1methode2();
      }
}

class B1 /*extends Object*/ {

        String b1methode() {
            return "von b1methode";
        }

        void b1methode2() {
            System.out.println( b1methode() );
        }

        public String toString() {  
            return "ich bin ein B1 Objekt";
        }
}

class A1 extends B1 {

        String b1methode() {
           return "von a1methode " + super.b1methode() ;
        }

        public String toString() {  
           return "ich bin ein A1 Objekt";
        }
}

Beispiel:

public class Car {
        String modell = "unbekannt";
        int jahr = -1;
        double preis = 0.0;

        public Car(String m, int j, double p) {
                modell = m; jahr = j; preis = p;
        }

        public String toString() {
                return modell + " [ " + jahr + " ]";
        }

        public double preis() {
                return preis;
        }
}

Beispiel:

public class UsedCar extends Car {
        int km = 0; // gefahrene km

        public UsedCar(String m, int j, double p, int k) {
                super(m,j,p);
                km = k;
        }

        public String toString() {
                return super.toString() + ", km = " + km;
        }

        public double preis() {
                return 10000.0*preis/(km+10000.0);
        }       

        public int gelaufen() {
                return km;
        }
}

Beispiel:

public interface Rank {

    public int compare(Rank other);
    //  0, falls this == other
    // -1, falls this < other
    //  1, falls this > other
}

Beispiel:

public abstract class JunkCar extends Car {

        public JunkCar(String m, int j, double p) {
                super(m,j,p);
        }

        public abstract double rostAnteil();    
}

Beispiel:

public class RostCar extends JunkCar {
        double rostAnteil; // in prozent

        public RostCar(String m, int j, double p) {
            super(m,j,p);
            rostAnteil = Math.random() * 100.0;
        }

        public double rostAnteil() {
                return rostAnteil;
        }

        public String toString() {
                return super.toString() + ", rostAnteil = "
                        + rostAnteil() + " %";
        }
}

Beispiel:

public class Haendler {

      public static void main(String[] args) {
        Car auto = new Car("Opel Corsa",2008,12000.0);
        System.out.println("auto = " + auto 
                + ", kostet " + auto.preis() );
        Car brum = auto;
        UsedCar gebraucht 
            = new UsedCar("Opel Corsa",1995,12000.0,70000);
        System.out.println("gebraucht = " + gebraucht 
                + ", kostet " + gebraucht.preis() );        
        auto = gebraucht;
        System.out.println("auto = " + auto
                + ", kostet " + auto.preis() );
        gebraucht = (UsedCar)auto;
        //gebraucht = (UsedCar)brum;

        Car[] lager = new Car[3];
        lager[0] = brum;
        lager[1] = gebraucht;
        lager[2] = auto;
        for ( int i = 0; i < lager.length; i++ ) {
                if ( lager[i] instanceof UsedCar) {
                        int k = ((UsedCar)lager[i]).gelaufen();
                        System.out.print("Gebrauchtwagen " + k + ": ");
                }
                System.out.println("lager[" + i + "] = "  
                                + lager[i] + ", kostet " 
                                + lager[i].preis() );
        }

        RankedCar[] ranklager = new RankedCar[3];
        for ( int i = 0; i < ranklager.length; i++ ) {
                Car a = lager[i];
                ranklager[i] = new RankedCar(a.modell,a.jahr,a.preis);
        }
        // suche billigstes auto:
        RankedCar billig = ranklager[0];
        for ( int i = 1; i < ranklager.length; i++ ) {
                if ( billig.compare( ranklager[i] ) > -1 ) {
                        billig = ranklager[i];
                }
        }
        System.out.println("billig = " + billig);

        Car rost = new RostCar("VW Käfer",1970,5000);
        System.out.println("rost = " + rost);
      }
}

Beispiel:

public class RankedCar extends Car implements Rank {

        public RankedCar(String m, int j, double p) {
                super(m,j,p);
        }

        public int compare(Rank other) {
           if ( other instanceof Car ) {
                double p = ((Car)other).preis();
                p = this.preis() - p;
                return (int)p;
           } else {
                return -2;
           }
        }
}

Beispiel:

package edu.bama;

public class UnterKasten {

        public static void main(String[] args) {
           System.out.println("Grüsse aus dem edu.bama.UnterKasten");
        }
}

Beispiel:

package edu;
import com.SchatzTruhe;

public class Kasten {

   public static void main(String[] args) {
       System.out.println("Grüsse aus dem edu.Kasten");
       if ( args != null && args.length > 0 ) {
          System.out.println(args[0]);
          SchatzTruhe s = new SchatzTruhe();
          int a = s.publ;
          //int b = s.prot;
          //int c = s.defa;
          //int d = s.priv;
       }
   }

}

Beispiel:

package edu;
import com.SchatzTruhe;

public class MySchatzTruhe extends SchatzTruhe {

        void zuteilung() {
           publ = 11;
           prot = 12;
           //defa = 13;
           //priv = 14;
        }

        int priv = super.prot;

        public static void main(String[] args) {
          MySchatzTruhe s = new MySchatzTruhe();
          int a = s.publ;
          int b = s.prot; 
              //int c = s.defa;
              //int d = s.priv;
        }
}

Beispiel:

package com.bama;

public class UnterKasten {
        public static void main(String[] args) {
               System.out.println("Grüsse aus dem com.bama.UnterKasten");
        }
}

Beispiel:

package com;

public class Kasten {

    public static void main(String[] args) {
       System.out.println("Grüsse aus dem com.Kasten");
       SchatzTruhe s = new SchatzTruhe();
       int a = s.publ;
       int b = s.prot; // ???
       int c = s.defa;
       //int d = s.priv;
    }
}

Beispiel:

package com;

public class SchatzTruhe {

    public int     publ = 1;
    private int    priv = 3;
    protected int  prot = 5;
    /*nichts*/ int defa = 7;

    public void zugriff() {
        System.out.println("publ = " + publ);
        System.out.println("priv = " + priv);
        System.out.println("prot = " + prot);
        System.out.println("defa = " + defa);
    }

    public static void main(String[] args) {
        (new SchatzTruhe()).zugriff();
        //SchatzTruhe s = new SchatzTruhe();
        //s.zugriff();
    }
}

Beispiel:

import edu.Kasten;
import com.SchatzTruhe;

public class BenutzeKasten {

    public static void main(String[] args) {
       edu.Kasten x = new edu.Kasten();
       com.Kasten y = new com.Kasten();
       x.main( null );
       com.Kasten.main(new String[]{"a","b"});
       SchatzTruhe s = new SchatzTruhe();
       s.zugriff();
       int a = s.publ;
       //int b = s.prot;
       //int c = s.defa;
       //int d = s.priv;
    }
}

Beispiel:

import java.awt.event.WindowListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.JPanel;

public class GuteNacht {

   public static void main(String[] args) {
      JFrame.setDefaultLookAndFeelDecorated(false);
      Font meiner = new Font("SansSerif", Font.BOLD, 28 );
      JFrame main = new JFrame("Gute Nacht");
      JPanel panel = new JPanel();
      panel.setBorder( BorderFactory.createEtchedBorder() );
      panel.setBackground( Color.yellow );
      panel.setForeground( Color.red );
      panel.setFont( meiner );
      panel.setLayout(new BorderLayout());
      //JComponent innen;
      //innen = new JLabel("wie gehts ?");
      //innen = new JTextArea("wie gehts ?");
      final JTextField sued = new JTextField();
      panel.add( sued,BorderLayout.SOUTH );
      final JTextArea innen = new JTextArea("\nwie gehts ?");
      innen.setBackground( Color.GREEN );
      innen.setForeground( Color.red );
      innen.setFont( meiner );
      innen.addKeyListener( new KeyAdapter() {
          String text = "";
          public void keyPressed(KeyEvent k) {
                char c = k.getKeyChar();
                System.out.println("c = " + c);
                text += c;
                sued.setText( text );
            }
          }
                          );

      panel.add( new JLabel("label north"),BorderLayout.NORTH );
      panel.add( new JLabel("west"),BorderLayout.WEST);
      panel.add( new JLabel("east"),BorderLayout.EAST);
      panel.add(innen);
      main.setContentPane( panel );

      main.setLocation(200,100);
      main.pack();
      main.setSize(300,200);
      String text = "";
      main.addWindowListener( new WindowAdapter() {
               public void windowClosing(WindowEvent event) {
                    String x = innen.getText();
                    //text = innen.getText();
                    System.out.println("x = " + x);
                    System.exit(0); // not do this in production
               }
             }
          );
       main.setVisible(true);
       text = innen.getText();
       System.out.println( "text = " + text );
   }
}

Beispiel:

package fehler;

public class OutOfBeerException extends Exception  {
    public OutOfBeerException() {
        super();
    }
    public OutOfBeerException(String s) {
        super(s);
    }
}

Beispiel:

package fehler;

public class Wirtschaft {

        static int bierFass = 100;

        public static void zapfe() throws OutOfBeerException {
           while ( bierFass > 0 ) { 
              System.out.println("zapfe " + bierFass);
              bierFass--;
              if ( bierFass < 10 ) {
                   throw new OutOfBeerException("Bier ist gleich alle");
              }
           }
        }

        public static void main(String[] args) {
            for ( int i = 0; i < 10; i++ ) {
                try {
                      zapfe();
                } catch ( OutOfBeerException e ) {
                   System.out.println("e = " + e.getMessage());
                   bierFass += 100;
                   System.out.println("Bier ist geliefert");
                }
            }
        }
}

Beispiel:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class GuiRechner {

    public static String berechne(String text) {
        int i = text.indexOf("*");
        if ( i < 0 ) {
            return "Fehler: " + text;
        }
        String links = text.substring(0,i);
        String rechts = text.substring(i+1,text.length());
        int left = 0;
        int right = 0;
        try {
                left = Integer.parseInt(links);
                right = Integer.parseInt(rechts);
        } catch( NumberFormatException nfe ) {
                return "NumberFormatException";
        }   
        int r = left * right;
        return ""+r;
    }

    public static void main(String[] args) {
            JFrame.setDefaultLookAndFeelDecorated(false);
            Font schrift = new Font("SansSerif", Font.BOLD, 28 );
            JFrame main = new JFrame("GUI - Rechner");
            JPanel panel = new JPanel();
            panel.setBorder( BorderFactory.createEtchedBorder() );
            panel.setBackground( Color.yellow );
            panel.setForeground( Color.blue );
            panel.setFont( schrift );
            panel.setLayout( new BorderLayout() );
            //
            JLabel exit = new JLabel("exit");
            panel.add( exit, BorderLayout.NORTH );
            final JTextField eingabe = new JTextField("");
            final JTextField ausgabe = new JTextField("");
            eingabe.setBackground( Color.yellow );
            eingabe.setForeground( Color.blue );
            eingabe.setFont( schrift );
            eingabe.addKeyListener( 
              new KeyAdapter() {
                  String text = "";
                  public void keyPressed(KeyEvent k) {
                     char c = k.getKeyChar();
                     System.out.println("c = " + c);
                     text = eingabe.getText() + c;
                     text = berechne(text);
                     ausgabe.setText( text );
                  }
              }
            );
            panel.add( eingabe, BorderLayout.CENTER );
            ausgabe.setBackground( Color.yellow );
            ausgabe.setForeground( Color.red );
            ausgabe.setFont( schrift );
            panel.add( ausgabe, BorderLayout.SOUTH );
            //
            main.setContentPane( panel );
            main.pack();
            main.setSize(300,200);
            main.setLocationRelativeTo(null); //setLocation(200,200);
            main.setVisible(true);
    }
}

Beispiel:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class GuiRechner {

        public static int[] operation(String text) {
            int i = -1;
            int op = -1; // 1 = *, 2 = +, 3 = -, 4 = /
            i = text.indexOf("*");
            if ( i >= 0 ) {
                op = 1;
            } else {
                i = text.indexOf("+");
                if ( i >= 0) {
                        op = 2;
                } else {
                        i = text.indexOf("-");
                        if ( i >= 0 ) {
                                op = 3;
                        } else {
                                i = text.indexOf("/");
                                if ( i >= 0 ) {
                                        op = 4;
                                }
                        }
                }
            }
            //int[] x = { op, i };
            return new int[]{ op, i };
        }

        public static String berechne(String text) {
            int op = -1;
            int i = -1;
            int[] was = operation(text);
            op = was[0];
            i = was[1];
            if ( i < 0 || op < 0 ) {
                return "kein + - * / enthalten";
            }
            String links  = text.substring(0,i);
            String rechts = text.substring(i+1,text.length());
            int left = 0;
            int right = 0;
            try {
                left  = Integer.parseInt( links.trim() );
                right = Integer.parseInt( rechts.trim() );
            } catch( NumberFormatException nfe ) {
                return "NumberFormatException";
            }   
            int r = 0;
            switch ( op ) {
            case 1: r = left * right;
                    break;
            case 2: r = left + right;
                    break;
            case 3: r = left - right;
                    break;
            case 4: if ( right == 0 ) {
                       return "Division durch 0";
                    }
                    r = left / right;
                    break;
            default: return "this cannnot happen";
            }      
            return ""+r;
        }

        static boolean doExit() {
             JOptionPane pane = new JOptionPane(
                               "Wollen Sie GuiRechner verlassen?",
             JOptionPane.WARNING_MESSAGE,
             JOptionPane.YES_NO_OPTION);
             JDialog dialog = pane.createDialog(null, 
                                                     "Exit Dialog");
             dialog.show();
             Object selectedValue = pane.getValue();
             System.out.println("sel = " + selectedValue);
             if ( selectedValue.equals(1) ) {
                  return false;
             }
             return true;
        }

        public static void main(String[] args) {
            JFrame.setDefaultLookAndFeelDecorated(false);
            Font schrift = new Font("SansSerif", Font.BOLD, 28 );
            JFrame main = new JFrame("GUI - Rechner");
            JPanel panel = new JPanel();
            panel.setBorder( BorderFactory.createEtchedBorder() );
            panel.setBackground( Color.yellow );
            panel.setForeground( Color.blue );
            panel.setFont( schrift );
            panel.setLayout( new BorderLayout() );
            //
            //JLabel exit = new JLabel("exit");
            JButton exit = new JButton("exit");
            exit.addMouseListener( 
                 new MouseAdapter() {
                    public void mousePressed(MouseEvent me) {
                        System.out.println("exit request "+me);
                        if ( doExit() ) {
                           System.exit(0);
                        }
                    }
                 }
            );
            panel.add( exit, BorderLayout.NORTH );
            final JTextField eingabe = new JTextField("");
            final JTextField ausgabe = new JTextField("");
            eingabe.setBackground( Color.yellow );
            eingabe.setForeground( Color.blue );
            eingabe.setFont( schrift );
            eingabe.addKeyListener( 
              new KeyAdapter() {
                  String text = "";
                  public void keyPressed(KeyEvent k) {
                     char c = k.getKeyChar();
                     System.out.println("c = " + (int)c);
                     if ( c != 10 ) {
                        return;
                     }
                     text = eingabe.getText() + c;
                     text = berechne( text );
                     ausgabe.setText( text );
                  }
              }
            );
            panel.add( eingabe, BorderLayout.CENTER );
            ausgabe.setBackground( Color.yellow );
            ausgabe.setForeground( Color.red );
            ausgabe.setFont( schrift );
            panel.add( ausgabe, BorderLayout.SOUTH );
            //
            main.setContentPane( panel );
            main.pack();
            main.setSize(300,200);
            main.setLocationRelativeTo(null); //setLocation(200,200);
            main.setVisible(true);
        }
}

Beispiel:

public class Klammern { // alte version

        public static String[] extractKlammern(String text) {
            // xxx ( yyy ) zzz -> [ xxx, yyy, zzz ]
            if ( text == null ) {
                 return new String[] { "", "", "" };
            }
            int b = text.indexOf("(");
            int e = text.lastIndexOf(")");
            int x = text.indexOf("(",b+1);
            int y = 0;
            if ( b < 0 || e < 0 ) {
                   throw new RuntimeException("keine Klammer enthalten");
            }
            String xxx = text.substring(0,b);
            String yyy = text.substring(b+1,e);
            String zzz = text.substring(e+1);
            String[] s = new String[] { xxx, yyy, zzz };
            s = append(s,"www");
            return s;
        }

        public static String[] append(String[] a, String b){
            String[] n = new String[ a.length+1 ];
            for ( int i = 0 ; i < a.length; i++ ) {
                n[i] = a[i];
            }
            n[ a.length ] = b;
            return n;
        }

        public static void main(String[] args) {
            String s = "7";
            String t = new String();
            Integer i = new Integer(7); // = 7;
            if ( s.equals(i.toString()) ) {
                System.out.println("s == i");
            } else {
                System.out.println("s != i");
            }
            String eingabe = "3+(5*9+(4-6))+7";
            String[] klam = extractKlammern(eingabe);
            System.out.println("eingabe = " + eingabe);
            System.out.println("xxx = " + klam[0]);
            System.out.println("yyy = " + klam[1]);
            System.out.println("zzz = " + klam[2]);
        }
}

Beispiel:

public class Klammern { // neue verison

    public String[] operator(String text) {
        if ( text == null || text.length() == 0 ) {
            System.out.println("no operator");
        }
        String left  = "";
        String oper  = ""; 
        String right = "";
        int i = text.indexOf("*");
        if ( i == 0 ) { 
            oper = "*";
            right = text.substring(1).trim();
        } else if ( i > 0 ) {
            left = text.substring(0,i).trim();
            oper = "*";
            right = text.substring(i+1).trim();
        } else {
            i = text.indexOf("+");
            if ( i == 0 ) { 
                oper = "+";
                right = text.substring(1).trim();
            } else if ( i > 0 ) {
                left = text.substring(0,i).trim();
                oper = "+";
                right = text.substring(i+1).trim();
            } else {
                i = text.indexOf("-");
                if ( i == 0 ) { 
                    oper = "-";
                    right = text.substring(1).trim();
                } else if ( i > 0 ) {
                    left = text.substring(0,i).trim();
                    oper = "-";
                    right = text.substring(i+1).trim();
                } else {
                    System.out.println("no + - * operator in = " + text + " = ");
                }
            }
        }
        return new String[] { left, oper, right };
    }

    public void print(String[] parts) {
        System.out.print("left[" + parts[0] + "]");
        System.out.print(" oper[" + parts[1] + "]");
        System.out.println(" right[" + parts[2] + "]");
        for ( int i = 3; i < parts.length; i++ ) {
            System.out.println(" rest(" + i + ")[" + parts[i] + "]");
        }
    }

    public void extract(String text) {
        if ( text == null || text.length() == 0 ) {
            System.out.println("no text");
        }
        int i = text.indexOf("(");
        if ( i < 0 ) {
            String[] parts = operator( text );
            print( parts );
            return;
        }
        String links = text.substring(0,i).trim();
        String[] parts = null;
        if ( links.length() > 0 ) {
           parts = operator( links );
           print( parts );
        }
        text = text.substring(i).trim();
        int level = 1;
        for ( i = 1 ; i < text.length(); i++ ) {
            char c = text.charAt(i);
            if ( c == '(' ) {
                level++;
            }
            if ( c == ')' ) {
                level--;
            }
            if ( level == 0 ) {
                break;
            }
        }
        String innen = text.substring(1,i).trim();
        extract(innen);
        if ( i+1 < text.length() ) {
           String rest = text.substring(i+1).trim();
           extract(rest);
        }
    }

    public static void main(String[] args) {
        Klammern k = new Klammern();
        String s = "(3-4)*(7+2)";
        k.extract("2*3");
        System.out.println();
        k.extract("2*(1+3)+5");
        System.out.println();
        k.extract("(3-4)*(7+2)");
        System.out.println();
        k.extract("(4*(7+2))+5");
        System.out.println();
        k.extract("(4*(7+2))+(5-(8*6))");
        System.out.println();
    }
}

zusätzliche Programme

Aufgaben:

Es folgen einige prozedurale Programmier-Aufgaben.

  1. Schreiben Sie eine Methode String reverse(String s) mit der eine neue Zeichenkette erzeugt wird, die die Zeichen der Zeichenkette s in umgekehrter Reihenfolge enthält.

    Beispiel: reverse("abcdefg") ergibt "gfedcba".

  2. Verwenden Sie für Aufgabe 1) einmal String und einmal StringBuffer.

  3. Schreiben Sie eine Methode boolean klammerOK(String s), die überprüft, ob in der Zeichenkette s genausoviele öffnende Klammern wie schliessende Klammern enthalten sind. Die Art der Klammer dürfen Sie frei wählen.

  4. Entwickeln Sie eine Klasse KlammerCheck der Sie im Konstruktor die zuprüfende Klammer mitgeben können.

    Beispiel: new KlammerCheck("[]") prüft mit der Methode klammerOK() die eckigen Klammern.

  5. Schreiben Sie eine Methode String entferneVokale(String s), die aus der Zeichenkette s alle Vokale entfernt (aeiouüöä).

  6. Schreiben Sie eine Methode String camelCase(String[] s), die aus dem Feld von Zeichenketten s alle Elemente verbindet, so dass der Anfangsbuchstabe der Wörter in den Feldelementen gross und der Rest klein geschrieben ist.

    Beispiel: camelCase( new String[] { "auf", "der", "gruenen", "wIESE" } ) ergibt die Zeichenkette "AufDerGruenenWiese".

  7. Verwenden Sie für Aufgabe 6) einmal String und einmal StringBuffer.

  8. Schreiben Sie eine Methode int[] parseInt(String[] s), die alle Zeichenketten in s mit Hilfe der Methode Integer.parseInt() in int umwandelt.

  9. Schreiben Sie eine Methode boolean palindromCheck(String s), die überprüft, ob die Zeichenkette s ein Palindrom ist. Ein Palindrom ist ein Wort, das vorwärts wie rückwärts gleich ist.

    Beispiel: palindromCheck("otto") ergibt true. palindromCheck("lena") ergibt false.

Üben Sie die Programmier-Aufgaben auch mal auf Papier.

Beispiel:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class LesenSchreiben {

        public static void main(String[] args) throws IOException {
                String einaus = null;
                InputStreamReader isr = new InputStreamReader(System.in);
                BufferedReader br = new BufferedReader(isr);
                OutputStreamWriter osw = new OutputStreamWriter(System.out);
                PrintWriter pw = new PrintWriter(osw);
                pw.println("bitte um eingabe");
                pw.flush();
                do {
                        einaus = br.readLine(); //br.readLine(); //""+System.in.read(); // read()
                        if ( einaus == null ) {
                                break;
                        }
                        pw.println("einaus = " + einaus);
                        pw.flush();
                } while ( !einaus.equals("ende") );
                pw.println("fertig");
                pw.flush();
        }
}

Beispiel:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Dateien {

        public static void main(String[] args) throws IOException {
                String einaus = null;
                FileReader fr = new FileReader("die_datei.txt");
                BufferedReader br = new BufferedReader(fr);
                FileWriter fw = new FileWriter("die_ausgabe.txt");
                PrintWriter pw = new PrintWriter(fw);
                StringBuffer sb = new StringBuffer();
                do {
                        einaus = br.readLine(); 
                        if ( einaus == null ) {
                                break;
                        }
                        sb.append( einaus + "\r\n");
                } while ( !einaus.equals("ende") );
                // tuwas
                if ( sb.indexOf("Datei") >= 0 ) {
                        pw.print( sb.toString() );
                }
                pw.close();
                System.out.println("fertig");
        }
}

Beispiel:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.net.URL;

public class URLEin extends BufferedReader {

    public URLEin(String url) throws IOException { 
       super( new InputStreamReader(
                (new URL(url)).openStream() ) );
    } 
}

Beispiel:

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Wget {

  public static void main(String[] args) {
    String url = "http://www.ba-mannheim.de/";
    if ( args.length > 0 ) {
        url = args[0];
    }
    URLEin wa = null;
    try {
        wa = new URLEin( url );
    } catch( IOException e ) {
        System.out.println("Fehler: " + e);
        return;
    }
    String datei = "wget.css";
    // extrahiere datei name aus url
    FileWriter fw = null; 
    try {
        fw = new FileWriter(datei);
    } catch (IOException e) {
        System.out.println("Fehler: " + e);
    }
    PrintWriter pw = new PrintWriter(fw);
    String zeile = null;
    while (true) {
        try {
            zeile = wa.readLine();
        } catch (IOException e) {
                System.out.println("Fehler: " + e);   
            break;
        }
        if ( zeile == null ) {
                break;
        }
        pw.println(zeile);
        System.out.println(zeile);
    }
    pw.flush();
    pw.close();
  }
}

Beispiel:

import java.util.Date;

public class Mitarbeiter {

    String name;
    int lohnGruppe;
    String abteilung;
    //String adresse;
    //int alter;
    //int hierarchie;
    Date einstellung;

    public Mitarbeiter(String name, int lg, String ab) {
        this.name = name;
        lohnGruppe = lg;
        abteilung = ab; 
        einstellung = new Date();
    }

    public String toString() {
        return "Mitarbeiter("+name+","
                             +abteilung+","
                             +einstellung+")";
    }
}

Beispiel:

import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class Abteilung {

        public static void main(String[] args) {
                Mitarbeiter a = new Mitarbeiter("Karl",3,"Hausmeister"); 
                Mitarbeiter b = new Mitarbeiter("Yvonne",5,"ChefInn"); 
                Mitarbeiter c = new Mitarbeiter("Steffen",4,"CreativDirector"); 
                PrintStream p = System.out;
                p.println("a = " + a.toString());
                p.println("b = " + b);
                p.println("c = " + c);
                
                //List betrieb = new ArrayList(); // wie new Object[n]
                List betrieb = new LinkedList(); 
                betrieb.add(a); // betrieb[i] = a;
                betrieb.add(b); // betrieb[i+1] = b;
                betrieb.add(c);
                betrieb.add( new Date() );
                p.println("betrieb = " + betrieb);
                for ( Object m : betrieb ) {
                    Mitarbeiter mm = (Mitarbeiter)m;
                    p.println("m = " + m + ", lg = " + mm.lohnGruppe);        	
                }
                
                List<Mitarbeiter> betrieb2 = new ArrayList<Mitarbeiter>(); // new Object[10]
                betrieb2.add(a); // betrieb[i] = a;
                betrieb2.add(b); // betrieb[i+1] = b;
                betrieb2.add(c);
                //betrieb2.add( new Date() );
                p.println("betrieb = " + betrieb2);
                for ( Mitarbeiter m : betrieb2 ) {
                    p.println("m = " + m + ", lg = " + m.lohnGruppe);        	
                }
      
               // Map<Integer,Integer> geldBeutel = new TreeMap<Integer,Integer>();
        }
}

Aufgaben:

Es folgen einige weitere Ideen für Programmier-Aufgaben und Projekte.

  1. Entwickeln Sie einen Fahrkarten-Automaten.

    Prinzip: java Fahrkarte stufe geld ergibt Fahrkarte_x wechselgeld.
    stufe ist eine Preisstufe z.B. 1, 2, 3, 4, 5, 6, 7.
    geld sind die Münzen oder Scheine in Cent z.B. 100, 20, 10, 500.
    Wird keine Preisstufe und Geld angegeben, soll das Angebot ausgegeben werden.

    Beispiel: java Fahrkarte 2 200 200 ergibt Fahrkarte_2 20 20 20 für eine Fahrkarte der Preisstufe 2, die 3,40 EUR kostet, und für die 4,00 EUR (mit zwei 2 EUR Münzen) bezahlt werden wird die Fahrkarte ausgegeben und 0,60 EUR Wechselgeld (in drei 20 Cent Münzen).

  2. Bauen Sie die Zusatz-Klassen in den GuiRechner ein.

  3. Entwickeln Sie eine grafische Version des Fahrkarten-Automaten unter Verwendung von Aufgabe 1.