Lösungen - oth-regensburg.de

Werbung
Lösungen:
1. Aufgabe
Clock.html
<applet code="Clock.class" width=200 height=200></applet>
/* Clock.java */
import java.util.*;
import java.applet.*;
import java.awt.*;
import java.awt.image.*;
/*
* @author Benjamin Kormann
*/
public class Clock
extends Applet
implements Runnable
{
Thread runner;
GregorianCalendar gc;
Image dbImage;
Graphics dbGraphics;
int mitte;
int xSt = 0, ySt = 0;
int xMin = 0, yMin = 0;
int xSek = 0, ySek = 0;
int stunde, minute, sekunde;
public void init()
{
setBackground(Color.white);
Dimension d = getSize();
mitte
= d.width / 2;
}
public void start()
{
if (runner == null)
{
runner = new Thread(this);
runner.start();
}
}
public void run()
{
while (true)
{
gc = new GregorianCalendar();
stunde = gc.get(Calendar.HOUR_OF_DAY);
minute = gc.get(Calendar.MINUTE);
sekunde = gc.get(Calendar.SECOND);
// Reduzieren der Stunden
if (stunde > 12)
stunde -= 12;
// Berechnung der Zeigerpositionen
xSt = (int) (7*mitte*Math.sin((Math.toRadians(stunde*30))+(Math.toRadians(minute*0.5)))/12);
ySt = (int)
(-7*mitte*Math.cos((Math.toRadians(stunde*30))+(Math.toRadians(minute*0.5)))/12);
xMin = (int) (5*mitte*Math.sin(Math.toRadians(minute*6))/6);
yMin = (int) (-5*mitte*Math.cos(Math.toRadians(minute*6))/6);
xSek = (int) (7*mitte*Math.sin(Math.toRadians(sekunde*6))/12);
ySek = (int) (-7*mitte*Math.cos(Math.toRadians(sekunde*6))/12);
repaint();
try {
Thread.sleep(1000);
}
catch (InterruptedException ie)
{}
}
}
public void paint(Graphics g)
{
// Uhrrahmen zeichnen
g.setColor(Color.black);
g.drawOval(0,0,(2*mitte)-1,(2*mitte)-1);
// Stundenzeiger zeichnen
g.setColor(Color.black);
g.drawLine(mitte, mitte, mitte+xSt, mitte+ySt);
// Minutenzeiger zeichnen
g.drawLine(mitte, mitte, mitte+xMin, mitte+yMin);
// Zahlen zeichnen
for (int i=1; i<13;i++)
g.drawString(Integer.toString(i), -5 + mitte + 5*((int) (mitte*Math.sin(Math.toRadians(i*30))))/6,
5 + mitte + 5*((int) (-mitte*Math.cos(Math.toRadians(i*30))))/6);
// Sekundenzeiger zeichnen
g.setColor(Color.red);
g.drawLine(mitte, mitte, mitte+xSek, mitte+ySek);
}
public void update(Graphics g)
{
// doublebuffering initialisieren
if (dbImage == null)
{
dbImage = createImage(this.getSize().width, this.getSize().height);
dbGraphics = dbImage.getGraphics();
}
// background loeschen
dbGraphics.setColor(getBackground());
dbGraphics.fillRect(0, 0, this.getSize().width, this.getSize().height);
// foreground setzen
dbGraphics.setColor(getForeground());
paint(dbGraphics);
// offset zeichnen
g.drawImage(dbImage, 0, 0, this);
}
}
2. Aufgabe
/* PI.java */
import java.io.*;
import java.util.*;
/*
* @author Benjamin Kormann
*/
public class PI
{
public static void main(String args[])
throws IOException
{
String pi = new BufferedReader(new FileReader("pi")).readLine();
pi = pi.substring(2, pi.length());
Hashtable hash = new Hashtable();
for(int i = 0; i < pi.length(); i++)
{
Integer tmp = Integer.valueOf(pi.substring(i,i+1));
if (hash.containsKey(tmp))
((Counter) hash.get(tmp)).count++;
else
hash.put(tmp, new Counter());
}
Enumeration e = hash.keys();
while(e.hasMoreElements())
{
Integer c = (Integer)e.nextElement();
System.out.println(c.toString() + " = " + ((Counter)hash.get(c)).count);
}
}
}
class Counter
{
int count;
public Counter()
{
count = 1;
}
public String toString()
{
return Integer.toString(count);
}
}
3. Aufgabe
<html>
<head>
<title>Berechnung von PI</title>
</head>
<body>
<applet code="ViertelKreis.class" width=200 height=300></applet>
</body>
</html>
/* Viertelkreis.java */
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/*
* @author Benjamin Kormann
*/
public class ViertelKreis
extends JApplet
implements AdjustmentListener
{
private JTextField pi, anzahl;
private JScrollBar scroll;
private Panel pBottom;
private ZeichenFlaeche zf;
private int dreiecke;
private double kreisZahl;
public void init()
{
dreiecke
= 3;
pi
= new JTextField(20);
anzahl
= new JTextField(20);
scroll
= new JScrollBar(JScrollBar.HORIZONTAL, 3, 5, 3, 1005);
pBottom
= new Panel();
zf
= new ZeichenFlaeche(this.dreiecke);
pi.setEditable(false);
anzahl.setEditable(false);
berechnePI();
pi.setText(piToString());
anzahl.setText("3");
scroll.addAdjustmentListener(this);
Container c = getContentPane();
c.setLayout(new BorderLayout());
pBottom.setLayout(new GridLayout(3,1));
pBottom.add(scroll);
pBottom.add(anzahl);
pBottom.add(pi);
c.add("South", pBottom);
c.add("Center", zf);
zf.zeichne(dreiecke);
}
public void adjustmentValueChanged(AdjustmentEvent ae)
{
dreiecke = ae.getValue();
anzahl.setText(Integer.toString(dreiecke));
zf.zeichne(dreiecke);
berechnePI();
}
public void berechnePI()
{
kreisZahl = 2*dreiecke*Math.sin(Math.toRadians(90)/(double)dreiecke);
pi.setText(piToString());
}
public String piToString()
{
return Double.toString(kreisZahl);
}
}
class ZeichenFlaeche
extends Canvas
{
private int dreiecke;
private Image dbImage;
private Graphics dbGraphics;
private double winkel;
private int hoehe, breite;
public ZeichenFlaeche(int dreiecke)
{
this.dreiecke = dreiecke;
this.winkel = holeWinkel(this.dreiecke);
}
public void zeichne(int dreiecke)
{
this.dreiecke = dreiecke;
this.winkel = holeWinkel(this.dreiecke);
repaint();
}
public double holeWinkel(int dreiecke)
{
return Math.toRadians(90.0/(double)dreiecke);
}
public void paint(Graphics g)
{
breite = this.getSize().width;
hoehe = this.getSize().height;
g.setColor(Color.red);
// 3Eck zeichnen
for (int i = 1; i < dreiecke; i++)
{
g.drawLine(0, hoehe, (int)(breite*Math.sin(i*winkel)),
hoehe - (int)(hoehe*Math.cos(i*winkel)));
}
for (int i = 0; i < dreiecke; i++)
{
g.drawLine((int)(breite*Math.sin(i*winkel)),
(int)(hoehe - (int)(hoehe*Math.cos(i*winkel))),
(int)(breite*Math.sin((i+1)*winkel)),
(int)(hoehe - (int)(hoehe*Math.cos((i+1)*winkel))));
}
// 1/4-Kreis zeichnen
g.setColor(Color.black);
g.drawArc(-breite, 0, 2*breite, 2*hoehe, 0, 90);
}
public void update(Graphics g)
{
if (dbImage == null)
{
dbImage = createImage(breite, hoehe);
dbGraphics = dbImage.getGraphics();
}
dbGraphics.setColor(getBackground());
dbGraphics.fillRect(0, 0, breite, hoehe);
dbGraphics.setColor(getForeground());
paint(dbGraphics);
g.drawImage(dbImage, 0, 0, null);
}
}
Herunterladen