Fachhochschule Regensburg Probeklausur Prüfungsfach: PG1 (Programmieren in Java) Name: ______________________________ Aufgabensteller: Prof. Sauer Vorname:______________________________ Semester: _______ Matrikel-Nr.: ___________ Prüfungstermin: 20.01.2005 Zugel. Hilfsmittel: keine Einschränkung Arbeitszeit: 90 Minuten Anzahl der erreichten Punkte: _______________ Erstprüfer: ________________________ Benotung: ________________________ Zweitprüfer: _______________________________ Bewertung: Aufgabe 1: Punkte Aufgabe 2: Punkte Aufgabe 3: Punkte Aufgabe 4: Punkte Aufgabe 5: Punkte Lösungen 1. Aufgabe import java.awt.*; import java.awt.event.*; public class ButtonTest extends Frame implements ActionListener { /* Erzeugt eine Warnung * Falls ein Schaltflaeche gedrueckt wird, * macht sie das Fenster rot */ Button warteButton; Button rebootButton; String[] nachricht = { "W A R N U N G", "Moelicherweise Virus entdeckt", "Reboot und lasse den Virus-", " Entferner ablaufen" }; ButtonTest() { setBackground(Color.lightGray); setForeground(Color.black); setLayout(new FlowLayout(FlowLayout.CENTER,15,10)); for (int i = 0; i < nachricht.length; i++) add(new Label(nachricht[i])); warteButton = new Button("Warten"); warteButton.addActionListener(this); add(warteButton); rebootButton = new Button("Reboot"); rebootButton.addActionListener(this); add(rebootButton); setTitle("Warnung"); setSize(220,200); setBackground(Color.lightGray); setForeground(Color.black); 1 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource() == rebootButton) { setVisible(false); dispose(); System.exit(0); } else if (e.getSource() == warteButton) { setForeground(Color.white); setBackground( Color.red); } } public static void main(String args []) { new ButtonTest(); } } 2. Aufgabe import java.awt.*; import java.awt.event.*; /* A class to test dialogs and component parenting */ public class Dialoge extends Frame { protected static ActionListener dismiss = new ActionListener() { public void actionPerformed (ActionEvent e) { if (e.getActionCommand().equals("exit")) System.exit(0); Button b = (Button)e.getSource(); ((Dialog)b.getParent()).dispose(); } }; protected Dialog dialog (boolean modal) { Dialog d = new Dialog(this, modal ? "Modal" : "Dialog", modal); String s = modal ? "This is a modal dialog" : "This is a dialog"; d.add(new Label(s), BorderLayout.CENTER); Button down = new Button("Ok"); down.setActionCommand("dismiss"); down.addActionListener(dismiss); d.add(down, BorderLayout.SOUTH); d.pack(); d.show(); return d; } public Dialoge () { setLayout(new GridLayout(3,1)); Button up; add(up = new Button("Dialog")); up.addActionListener(new ActionListener() { public void actionPerformed (ActionEvent e) 2 { dialog(false).setLocation(100,100); } }); add(up = new Button("Modal")); up.addActionListener(new ActionListener() { public void actionPerformed (ActionEvent e) { dialog(true).setLocation(200,200); } }); add(up = new Button("Quit")); up.setActionCommand("exit"); up.addActionListener(dismiss); setSize(220,200); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); setVisible(true); } public static void main(String args[]) { Dialoge dial = new Dialoge(); } } 3. Aufgabe import java.awt.*; import java.awt.event.*; /* A class to test a scrollbar connected to a textfield */ public class ScrollbarTest extends Frame { Panel p = new Panel(); public ScrollbarTest () { p.setLayout(new GridLayout(3,1)); final TextField tf; p.add(tf = new TextField(30)); tf.setText("50"); final Scrollbar sb; p.add(sb = new Scrollbar(Scrollbar.HORIZONTAL, 50, 10, 0, 100)); Button b; p.add(b = new Button("Quit")); tf.addActionListener(new ActionListener() { public void actionPerformed (ActionEvent e) { sb.setValue(Integer.parseInt(tf.getText())); } }); tf.addFocusListener(new FocusAdapter() { public void focusLost (FocusEvent e) { sb.setValue(Integer.parseInt(tf.getText())); } }); sb.addAdjustmentListener(new AdjustmentListener() { 3 public void adjustmentValueChanged (AdjustmentEvent e) { tf.setText(""+sb.getValue()); } }); b.addActionListener(new ActionListener() { public void actionPerformed (ActionEvent e) { System.exit(0); } }); add(p); setSize(200,100); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); setVisible(true); } public static void main(String args[]) { ScrollbarTest scroll = new ScrollbarTest(); } } 4. Aufgabe import java.applet.*; import java.awt.*; import java.awt.event.*; public class Zins4 extends Applet implements ActionListener { int n=1; Panel bereich1, bereich2; Label l1, l2, l3; TextField akapital, zins; Button b; Label zeit[] = new Label[11]; Label kapital[] = new Label[11]; public void init() { bereich1 = new Panel(); bereich2 = new Panel(); add(bereich1); add(bereich2); bereich1.setLayout(new GridLayout(13,1,10,10)); bereich2.setLayout(new GridLayout(13,1,10,10)); bereich1.setBackground(Color.yellow); bereich2.setBackground(Color.yellow); l1=new Label("Anfangskapital"); bereich1.add(l1); akapital = new TextField(" ", 8); bereich1.add(akapital); l2=new Label("Zinssatz"); bereich2.add(l2); zins = new TextField(" ", 8); bereich2.add(zins); l3=new Label("Kapitalwachstum"); bereich1.add(l3); b=new Button("berechnen"); bereich2.add(b); b.addActionListener(this); for (int i=1; i<11; i=i+1) { zeit[i] = new Label(" "); kapital[i] = new Label(" "); bereich1.add(zeit[i]); bereich2.add(kapital[i]); } } 4 public void f(double k, double p) { if (n<11) { k = k * (1 + p/100); zeit[n].setText(""+n); kapital[n].setText("" + k); n=n+1; f(k,p); } } public void actionPerformed(ActionEvent e) { String kapitalString=akapital.getText(); double ka=Double.valueOf(kapitalString).doubleValue(); String zinsString=zins.getText(); double zi=Double.valueOf(zinsString).doubleValue(); f(ka,zi); } } 5. Aufgabe import java.awt.*; import java.applet.*; import java.awt.event.*; class Spots extends Thread { Color farbe; Graphics g; int mx, my; int change; int radius; // Der Konstruktor registriert die Farbe des Threads Spots(Color c,Graphics g,int mx,int my,int change,int radius) { farbe = c; this.g = g; this.mx = mx; this.my = my; this.change = change; this.radius = radius; } public void run() { while (true) { draw(); try { sleep(500); } catch(InterruptedException e) { } } } public void draw() { // Graphics g = getGraphics(); g.setColor(farbe); // berechne einen neuen Punkt und // zeichne ihn mx = (int) (Math.random() * 1000) % change; my = (int) (Math.random() * 1000) % change; g.fillOval(mx,my,radius,radius); } } public class SpotTest extends Applet 5 { } /* Zeichnen von Punkten in verschiebenen Farben * Veranschaulichung einfacher Threads */ int mx, my; int radius = 10; int boardSize = 200; int change; public void init() { boardSize = getSize().width - 1; change = boardSize - radius; // Erzeugen und Start von drei neuen Threads Graphics g = getGraphics(); new Spots(Color.red,g,mx,my,change,radius).start(); new Spots(Color.blue,g,mx,my,change,radius).start(); new Spots(Color.green,g,mx,my,change,radius).start(); } 6. Aufgabe /** * <H2>WordParser</H2> * <P> * Problem description: * <P> * A text consists of words separated by spaces or other special * characters (like signs or symbols). We are interested in getting * the words, one by one, without the surrounding extra characters. * <P> * WordParser is a class that allows an application to break a String * into words. Words are defined as contiguous sequences of letters * and/or digits. All other characters are treated as "white space" * and are thrown away. */ public class WordParser { private String text; private int currentIndex; // // // // // text to be parsed // current position within text String Note: Between calls of nextWord() currentIndex points to the first character of the next word. If there ar no more words available then currentIndex points to the position after the last character of the text String; i.e. currentIndex == text.length() /** * Construct a WordParser for a given String. */ public WordParser (String text) { this.text = text; currentIndex = 0; skipWhiteSpace (); // be prepared for the first request } /** * See whether there are more words available. */ public boolean hasMoreWords() { return currentIndex < text.length(); } /** * Return the next word. */ public String nextWord () { 6 } } if (hasMoreWords ()) { String word = String.valueOf(text.charAt(currentIndex)); currentIndex++; while (currentIndex < text.length() && Character.isLetterOrDigit(text.charAt(currentIndex))) { word += String.valueOf(text.charAt(currentIndex)); currentIndex++; } skipWhiteSpace (); return word; } else { return "Error!"; // instead of 'return "Error!"' we should: // throw (new java.util.NoSuchElementException()); } /* * Skip white space (i.e. all characters that are not * characters or letters). */ private void skipWhiteSpace () { while (currentIndex < text.length() && ! Character.isLetterOrDigit(text.charAt(currentIndex))) currentIndex++; } /** * <H2>WordParserTest * <P> * A test program for the WordParser class. */ import java.io.*; public class WordParserTest { } public static void main(String[] args) throws IOException { System.out.print("\nWordParserTest\n"); System.out.println("Please enter some test sentences. " + "Terminate with an empty line"); boolean moreInput; do { System.out.print("> "); String inputString = ""; BufferedReader ein = new BufferedReader( new InputStreamReader(System.in)); inputString = ein.readLine(); WordParser wp = new WordParser(inputString); if (wp.hasMoreWords()) { moreInput = true; String word = wp.nextWord(); System.out.print (word); while (wp.hasMoreWords()) { System.out.print(" / "); System.out.print(wp.nextWord()); } System.out.println(); } else { moreInput = false; } } while (moreInput); } 7