Historgam

Kaisah

Neues Mitglied
Hallo ich habe folgendes Problem....

wenn ich das Applet mit dem Browser ausführe, zeigt er mir nur einen grauen Kasten an....


Programm:
Java:
import java.applet.*;
import java.awt.*;
import java.util.*;
import java.lang.Double;
import java.text.*;			//Paket das Klassen zur Behandlung von Texten, Daten, Nummern und Nachrichten beinhaltet

public class Histogram extends Applet
{
//Variablen und Arrays festlegen
	int[] anzahlWerte;		
	double[] werte;
	double maximum;
	double minimum;			
	int k;

public void init()
{
	setBackground(Color.yellow);
	String s = getParameter("data");				// Liest die Applet-Parameter aus der HTML datei aus.
	
	StringTokenizer st = new StringTokenizer(s);			
//initialisiert den Tokenizer, zerlegt die Daten-Zeichenkette in ihre einzelnen Bestandteile (Durch Leerzeichen getrennt)

	werte = new double[st.countTokens()];			
//das Array "Werte" wird initialisiert, Größe wird über countTokens ermittelt und entspricht der Anzahl der Zahlen
	
	for ( int i=0; i<werte.length; i++)				//wird für jeden Wert, bis Länge des Arrays erreicht ist ausgeführt
		werte[i] = Double.parseDouble(st.nextToken());		//"hüllklasse" hier wird der string in double umgewandelt und dann in das Array gespeichert
									//parseDouble wandelt um, nextToken() springt zum Nächsten Token

	maximum = werte[0];	//Anfangs Minimum und Maximum wird gesetzt, 0. Stelle des Arrays
	minimum = werte[0];
	 
	for(int i=0; i<werte.length; i++)		//for schleife, element für element durchgehen, variable für Min und max festlegen! Suche das Min und Max!
	{		
		 if (werte[i] > maximum)
			maximum = werte[i];
		if (werte[i] < minimum)
			minimum = werte[i];
	}

	k=Integer.parseInt(getParameter("k"));		//Intervallanzahl aus der html, mit getParameter k, ParseInt wandelt String in Int um
	
	// Array für die Anzahl der Element im Intervall i
	anzahlWerte = new int[k];			
//neues Array mit der Länge k, also jede Stelle des Arrays ist ein Intervall?! AnzahlWerte= Werte im Intervall
	
	double intervallbreite = (maximum-minimum)/k;		//legt die einzelne Intervallbreite fest
	
	for (int i = 0; i < werte.length; i++)				//Jeder Datenwert wird duchgegangen
		for (int j = 0; j < anzahlWerte.length; j++)		//Für jedes Array
			if ((((j+1)*intervallbreite)+minimum) > werte[i] && ((j*intervallbreite)+minimum) <= werte[i])
				anzahlWerte[j]++;	//Werte im Intervall wird einen hochgesetzt wenn obige Zeile erfüllt ist


}
//der Zeichenteil
public void paint(Graphics g)
{
		int appletWidth = getWidth();		//dynamische Breite und Höhe
		int appletHeight = getHeight();
		
		int hoehe = (appletHeight-50);		//Höhe der x & y _Achse, wieder dynamisch
		int breite = (appletWidth-50);
		
		

		g.drawLine(25, 25, 25, hoehe+25);					//y-Achse zeichnen
		g.drawLine(25, hoehe+25, breite+25, hoehe+25);				//x-achse

		int max_haeufigkeit=0;
		for (int i = 0; i < anzahlWerte.length; i++)		//Für alle Elemente eines Intervalls...
		{
			if (anzahlWerte[i] > max_haeufigkeit)		//die max. auftretenden Häufigkeit für spätere max. balkenhöhe
				max_haeufigkeit = anzahlWerte[i];	
		}
		int maxbalkenhoehe = hoehe/max_haeufigkeit;
		int balkenbreite = breite/k;
		double intervallbreite = (maximum - minimum)/k ;

		DecimalFormat df = new DecimalFormat("0.00");			//Formatiert in Dezimalzahlen
		DecimalFormat prozent = new DecimalFormat("0%");		//und Prozentsatz
		for (int i = 0; i < anzahlWerte.length; i++)			//Zeichnet Rechtecke für jedes Intervall
		{
			int balkenhoehe = anzahlWerte[i]*maxbalkenhoehe;	//relative Häufigkeit entspricht Balkenhöhe
			g.drawString(""+df.format((i*intervallbreite)+minimum),25+i*balkenbreite, hoehe+40);			
			g.drawString((" "+prozent.format(anzahlWerte[i]/(double)werte.length)), 0, hoehe-balkenhoehe+25);
			g.setColor(Color.red);
			g.drawLine(25,hoehe-balkenhoehe+25,25+breite,hoehe-balkenhoehe+25);
			g.setColor(Color.black);
			g.drawRect((int)(25+i*balkenbreite),hoehe-balkenhoehe+25,(int)balkenbreite,balkenhoehe);
		} 
					
}
}


Applet:
Java:
<CENTER>
<APPLET code="Histogram.class" width=500 height=500>
<PARAM name=data value="4.37 3.87 4.00 4.03 3.50 4.08 2.25 4.70 1.73
4.93 1.73 4.62 3.43 4.25 1.68 3.92 3.68 3.10 4.03 1.77 4.08 1.75 3.20
1.85 4.62 1.97 4.50 3.92 4.35 2.33 3.83 1.88 4.60 1.80 4.73 1.77 4.57
1.85 3.52 4.00 3.70 3.72 4.25 3.58 3.80 3.77 3.75 2.50 4.50 4.10 3.70
3.80 3.43 4.00 2.27 4.40 4.05 4.25 3.33 2.00 4.33 2.93 4.58 1.90 3.58
3.73 3.73 1.82 4.63 3.50 4.00 3.67 1.67 4.60 1.67 4.00 1.80 4.42 1.90
4.63 2.93 3.50 1.97 4.28 1.83 4.13 1.83 4.65 4.20 3.93 4.33 1.83 4.53
2.03 4.18 4.43 4.07 4.13 3.95 4.10 2.27 4.58 1.90 4.50 1.95 4.83 4.12 ">
<PARAM name=k value=10>
<PARAM name=title value="Histogram">
</APPLET>
</CENTER>

Woran liegt denn das??


Danke....
 

chalkbag

Bekanntes Mitglied
Was sagt denn die Console deines Browsers bzw. welche Fehlermeldung gibt es?

Wenn du sowas nicht hast, kannst du entweder Firebug für Firefox installieren oder das ganze in Eclipse ausführen, da sollte es dann eine Fehlermeldung geben.

(natürlich geht das auch mit einer anderen IDE sowie einen anderen Browser)
 
Zuletzt bearbeitet:
S

SlaterB

Gast
bitte umbenennen in 'Applet Anzeige' oder irgendetwas aussagekräftiges, zumindest Applet ist ja das Haupt-Stichwort,
ich kann es nicht wenn HTML-Code in einem Posting drin ist ;)


hast du ein Hello World-Applet in dem irgendwas zu sehen ist?
mach doch ein ganz einfaches paint() mit einer einfachen Zeichnung,
danach Schritt für Schritt befüllen, z.B. die ganzen init()-Berechnungen rein und paint() immer noch einfach lassen,
gehts noch oder schon nicht mehr?
usw., mit Fleiß alles selber zu schaffen
 

parabool

Bekanntes Mitglied
deine Parameter "data value" haben jeweils am Ende kein Leerzeichen = Trennzeichen -> aus 1.73 und 4.93 wird somit 1.734.93 -> NumberformatException (in der Javakonsole einsehbar)

Wenn Du die Exception im Programm fängst und eventuell behandelst läuft das Programm weiter.
 

Oben