N
Nikamort
Gast
Hallo,
ich bin absoluter Anfänger in Sachen Java. Ich habe mir erstmal ein paar Klassen von meinen Komolitonen gezogen um einen Überblick über die ganze Geschichte zu bekommen....
Jetzt habe ich das Problem dass er manche sachen nicht Compilen kann, die aber zuvor bei den anderen gelaufen sind ( und das immer noch tun!!!) ich habe die klassen genauso kopiert....
Bin etwas ratlos.
Immer wenn eine do while schleife anfängt und ich etwas einlesen möchte kommt folgende Fehlermeldung :
unreported exception java.lang.exception must be caught or declared to be thrown
...!? Ich kann damit gar nix anfangen zumal es ja bei den anderen läuft....
Hier ein Beispiel :
Bei n = fenster.readInt("n: "); kommt der Fehler....
[Java]
public class Endliche_Summen
{
public static void main( String args[] ) {
JConsole fenster = new JConsole("Summe Aufgabe 10_b");
while (true) {
int n;
// Einlesen von n (Ganzzahl > 0)
do {
n = fenster.readInt("n: ");
}
while (n < 1);
// 1. Versuch: Berechnung der 1. Summe der Aufgabe mit einem int-Datentyp.
int s = 0; // Initialisierung der int-Summe auf 0 !!
for (int k = 1; k <= n; k++) {
s += k*k;
}
fenster.println(" int-Summe 1 bis n von k²: " + s);
/* Die Aufgabe sieht auf den ersten Blick sehr einfach aus. Jedoch kann
* die Summe der Quadrate (abhängig von n) sehr groß werden! Wählt man
* als Datentyp der Summenvariable int, so kann man feststellen (einfach
* einmal n eingeben!), dass bei n = 1861 eine negative Summe herauskommt!
* Der Grund liegt in dem begrenzten Wertebereich einer int-Variablen.
* Aus ähnlichem Grund tritt irgendwann auch bei Wahl eines long-Datentyps
* eine Wertebereichs-Überschreitung auf.
*
* Die Wahl des Datentyps double für die Summe ist also in jedem Fall ratsam,
* da bei einem double keine Wertebereichs-Überschreitung auftreten kann!
*/
// 2. Versuch: Berechnung der 1. Summe der Aufgabe mit einem double-Datentyp.
double s2 = 0; // Initialisierung der double-Summe auf 0 !!
for (int k = 1; k <= n; k++) {
s2 += k*k;
}
fenster.println("double-Summe 1 bis n von k²: " + s2);
/* Auch dieser Algoritmus hat ein Problem, das man erkennt, wenn man die
* Summe für n = 46340 und n = 46341 berechnet. Obwohl die Summe größer werden
* müsste, ist sie für n = 46341 kleiner!!???!!!???
*
* Der Grund liegt wieder in einer Wertebereichsüberschreitung. Diesmal ist der
* Summand k*k schuld. Um k*k zu berechnen wird eine int-Arithmetik angewandt,
* denn k ist ein int. Demzufolge ist das Ergebnis von k*k ein int. Jedoch lässt
* sich der Wert 46341² nicht mehr in einem int speichern, er wird sogar als
* negative Zahl interpretiert. Dadurch wird etwas Falsches zur Summe s2 aufaddiert.
*
* Die Lösung für dieses Problem ist das Erzwingen einer Gleitkommaarithmetik bei
* der Berechnung von k²!
*/
// 3. Versuch: Berechnung der 1. Summe der Aufgabe mit einem double-Datentyp.
double s3 = 0; // Initialisierung der double-Summe auf 0 !!
for (int k = 1; k <= n; k++) {
s3 += (double)k*k;
}
fenster.println("double-Summe 1 bis n von k²: " + s3);
fenster.println();
} // Ende true-Schleife
} // Ende main
}
[/Java]
Weiß jemand einen Rat? Ist ziemlich dringend....
ich bin absoluter Anfänger in Sachen Java. Ich habe mir erstmal ein paar Klassen von meinen Komolitonen gezogen um einen Überblick über die ganze Geschichte zu bekommen....
Jetzt habe ich das Problem dass er manche sachen nicht Compilen kann, die aber zuvor bei den anderen gelaufen sind ( und das immer noch tun!!!) ich habe die klassen genauso kopiert....
Bin etwas ratlos.
Immer wenn eine do while schleife anfängt und ich etwas einlesen möchte kommt folgende Fehlermeldung :
unreported exception java.lang.exception must be caught or declared to be thrown
...!? Ich kann damit gar nix anfangen zumal es ja bei den anderen läuft....
Hier ein Beispiel :
Bei n = fenster.readInt("n: "); kommt der Fehler....
[Java]
public class Endliche_Summen
{
public static void main( String args[] ) {
JConsole fenster = new JConsole("Summe Aufgabe 10_b");
while (true) {
int n;
// Einlesen von n (Ganzzahl > 0)
do {
n = fenster.readInt("n: ");
}
while (n < 1);
// 1. Versuch: Berechnung der 1. Summe der Aufgabe mit einem int-Datentyp.
int s = 0; // Initialisierung der int-Summe auf 0 !!
for (int k = 1; k <= n; k++) {
s += k*k;
}
fenster.println(" int-Summe 1 bis n von k²: " + s);
/* Die Aufgabe sieht auf den ersten Blick sehr einfach aus. Jedoch kann
* die Summe der Quadrate (abhängig von n) sehr groß werden! Wählt man
* als Datentyp der Summenvariable int, so kann man feststellen (einfach
* einmal n eingeben!), dass bei n = 1861 eine negative Summe herauskommt!
* Der Grund liegt in dem begrenzten Wertebereich einer int-Variablen.
* Aus ähnlichem Grund tritt irgendwann auch bei Wahl eines long-Datentyps
* eine Wertebereichs-Überschreitung auf.
*
* Die Wahl des Datentyps double für die Summe ist also in jedem Fall ratsam,
* da bei einem double keine Wertebereichs-Überschreitung auftreten kann!
*/
// 2. Versuch: Berechnung der 1. Summe der Aufgabe mit einem double-Datentyp.
double s2 = 0; // Initialisierung der double-Summe auf 0 !!
for (int k = 1; k <= n; k++) {
s2 += k*k;
}
fenster.println("double-Summe 1 bis n von k²: " + s2);
/* Auch dieser Algoritmus hat ein Problem, das man erkennt, wenn man die
* Summe für n = 46340 und n = 46341 berechnet. Obwohl die Summe größer werden
* müsste, ist sie für n = 46341 kleiner!!???!!!???
*
* Der Grund liegt wieder in einer Wertebereichsüberschreitung. Diesmal ist der
* Summand k*k schuld. Um k*k zu berechnen wird eine int-Arithmetik angewandt,
* denn k ist ein int. Demzufolge ist das Ergebnis von k*k ein int. Jedoch lässt
* sich der Wert 46341² nicht mehr in einem int speichern, er wird sogar als
* negative Zahl interpretiert. Dadurch wird etwas Falsches zur Summe s2 aufaddiert.
*
* Die Lösung für dieses Problem ist das Erzwingen einer Gleitkommaarithmetik bei
* der Berechnung von k²!
*/
// 3. Versuch: Berechnung der 1. Summe der Aufgabe mit einem double-Datentyp.
double s3 = 0; // Initialisierung der double-Summe auf 0 !!
for (int k = 1; k <= n; k++) {
s3 += (double)k*k;
}
fenster.println("double-Summe 1 bis n von k²: " + s3);
fenster.println();
} // Ende true-Schleife
} // Ende main
}
[/Java]
Weiß jemand einen Rat? Ist ziemlich dringend....
Zuletzt bearbeitet von einem Moderator: