Multiplizieren und Fakultät < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 15:45 Sa 13.02.2010 | Autor: | matheja |
Aufgabe | Hi Leute, sry wenn ich schon wieder störe.ich bin grad am lernen für eine wichtige Klausur.
1) Schreiben sie ein Programm das zwei Klassen mit einander multpilziert
2) Fakuläten berechnet
3)Lassen Sie sich nun die Ergebnisse der Funktion [mm] f(x)=x^2 [/mm] für ein
Zahlenintervall von 10 bis 50 innerhalb der main()-Methode ausgeben.
Deklarieren Sie hierzu zunächst zwei ganzzahlige Variablen innerhalb der
main()-Methode mit den Namen interval_start und interval_end
und weisen Sie ihnen die Werte 10 bzw. 50 zu.
Erweitern Sie die main()-Methode nun um eine for-Schleife, die vom
Beginn des Intervalls bis zum Ende des Intervalls läuft. Innerhalb dieser
Schleife rufen Sie Ihre square()-Methode mit dem Schleifenindex auf.
Geben Sie dass Ergebnis innerhalb der Schleife in folgender Form aus
[mm] 10^2=100
[/mm]
[mm] 20^2=400.... [/mm] |
Ich arbeite mit Eclipse und erhalte folgenden Code:
package MathCalc;
//Klassenerstellung
public class MathCalc {
//Anlegen der main()-Methode
public static void main(String[] args)
{
//Deklarierung von interval_start
int interval_start = 10;
//Deklarierung von interval_end
int interval_end = 50;
//Deklarierung von interval_step
int interval_step = 10;
//Deklarierung von factorial
int factorial = 1000;
//Deklarierung von Variable n
int n = 1;
//Deklarierung von Variable k
int k = n + 1;
//Deklarierung der ersten Zahl
int ersteZahl = Integer.parseInt(args[0]);
//Ausgabe der Zeile in VM
System.out.println("Geben sie die erste Zahl ein: "+ersteZahl);
//Deklarierung der zweiten Zahl
int zweiteZahl = Integer.parseInt(args[0]);
//Ausgabe der Zeile in VM
System.out.println("Geben sie die zweite Zahl ein: "+zweiteZahl);
//Multiplikation und Ausgabe in Ergebnis
int Ergebnis = multiply(ersteZahl, zweiteZahl);
//Quadrierung und Ausgabe in Ergebnis2
int Ergebnis2 = square (Ergebnis);
//for-Schleife, die von 10 bis 50 quadriert
for (int i=interval_start; i<=interval_end;i = i + interval_step) {
square (i);
}
//while-schleife für Fakultätberechnung
while ( n<factorial) {
multiply(n, k);
n = n * k;
k++;
}
System.out.println("Maximum factorial below 1000: " + n + "=" + (k - 1)+"!");
}
//Anlegen der multiply()-Methode
public static int multiply (int a, int b) {
// Ausgabe der Zeile in VM
System.out.println("Das Ergebnis ist: " + a * b);
//Multiplikation und Übergabe in r
int r = a * b;
//Rückgabe von r
return r;
}
//Anlegen der square()-Methode
public static int square (int c) {
// Ausgabe der Zeile in VM
System.out.println(c + "^2 = " + c * c);
//Quadrierung und Übergabe in d
int d = c * c;
//Rückgabe von d
return d;
}
}
Ich erhalte immer die Fehlermeldung
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
Ich sitz schon seit stunden an diesem Programm.Langsam dreh ich echt durch.Wär schön wenn ihr mir helfen könntet.
Danke
matheja
|
|
|
|
hallo, du musst das programm auch mit einem parameter aufrufen, sonst kann auch nichts ausgegeben werden! wo man das in eclipse einstlelt weiss ich jedoch nicht, ich nutze netbeans. notfalls halt über die eingabeaufforderung aufrufen
gruß tee
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 16:16 Sa 13.02.2010 | Autor: | matheja |
Aufgabe | Grüß dich Fenchel,
joa ich bin kein großes java genie.eher das gegenteil.
|
> hallo, du musst das programm auch mit einem parameter
> aufrufen, sonst kann auch nichts ausgegeben werden! wo man
> das in eclipse einstlelt weiss ich jedoch nicht, ich nutze
> netbeans. notfalls halt über die eingabeaufforderung
> aufrufen
>
> gruß tee
warum muss ich einen parameter überweisen?
ich weiß wo ich das bei eclipse glaube ich tun kann:
Run>RunConfigurations>Arguments
welchen parameter sollte ich überweisen.
Danke
matheja
|
|
|
|
|
> Grüß dich Fenchel,
>
> joa ich bin kein großes java genie.eher das gegenteil.
>
>
> warum muss ich einen parameter überweisen?
> ich weiß wo ich das bei eclipse glaube ich tun kann:
> Run>RunConfigurations>Arguments
>
> welchen parameter sollte ich überweisen.
>
> Danke
> matheja
int ersteZahl = Integer.parseInt(args[0]);
//Ausgabe der Zeile in VM
System.out.println("Geben sie die erste Zahl ein: "+ersteZahl);
//Deklarierung der zweiten Zahl
int zweiteZahl = Integer.parseInt(args[0]);
mach dir klar, was du mit args[0] überhaupt abrufst, und wie man diese eingabe tätigt
gruß tee
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:59 Sa 13.02.2010 | Autor: | matheja |
zu args[0];
wenn ein Programm mit java aufgerufen wird, ließt args[0] den ersten Wert ein, der nach dem Namen des Programms folgt, args[1] danach den zweiten Wert, der nach dem ersten folgt usw.
zu Integer.parseInt:
Integer.parseInt bedeutet hierbei, dass die eingelesenen Zeichen bzw. Ziffern als ganze Zahlen interpretiert werden, mit denen im Verlauf des Programms gerechnet werden kann.
=> d.h wandelt Strings in z.b integer um
wird also ein String übertragen der in ein inter umgewandelt wird?
Mein problem liegt glaube ich zum größten teil darin wie ich dieses s..chöne programm endlich zum laufen bringen kann
wie gesagt, ich weiß wo ich da argumente übergeben kann, habe auch schon einfach einige werte eigegeben :
Das Ergebnis ist: 24
Das Ergebnis ist: 120
Das Ergebnis ist: 720
Das Ergebnis ist: 5040
Maximum factorial below 1000: 5040=7!
hmm....also irgendwas stimmt da nicht?
wenn ich iwelche zahlen übergebe bekomm ich obiges ergebnis
man irgendjemand muss mir da raus helfen ich seh mal wieder vor lauter bäumen den urwald nicht
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 17:26 Sa 13.02.2010 | Autor: | matheja |
Aufgabe | Danke für die Antwort Fenchel.
|
> dein problem eben bestand doch darin, dass du einen fehler
> erhalten hast. was aufgrund eines fehlenden parameters
> passierte. nun übergibst du ja scheinbar dann ja werte..
> das jetzige problem (was aber nicht definiert wurde)
> scheint dann eins der logischen art zu sein
> also wo drückt der schuh denn jetzt noch? abgesehen davon
> dass du 2 mal den gleichen wert parst
>
> gruß tee
Ja gute Frage :D.Ich glaub ich bin einfach nur verwirrt.der gesammtzusammenhang fehlt mir.es sind viele bruchstücke da, dich ich langsam zusammenfügen muss.
Ich muss das jetzt alles noch mal reinziehen.
was mich verwirrt hat war das mit den parameter die ich noch irgenwo übergeben soll.bisher war es so das diese noch automatisch übergeben wurden.Ich glaub eclipse ist schuld XD.
Es wär echt großartig wenn du nochmal oder jemand anders-hab dich denk ich genug geägert ;)- kurz resümieren kann,
welche parameter, wann wo wie warum übertragen werden und welche werte ich dann bei mir als übergabe parameter eintagenm soll
grüße und danke für eure geduld leutz
matheja
|
|
|
|
|
> Danke für die Antwort Fenchel.
>
>
> Ja gute Frage :D.Ich glaub ich bin einfach nur verwirrt.der
> gesammtzusammenhang fehlt mir.es sind viele bruchstücke
> da, dich ich langsam zusammenfügen muss.
>
> Ich muss das jetzt alles noch mal reinziehen.
> was mich verwirrt hat war das mit den parameter die ich
> noch irgenwo übergeben soll.bisher war es so das diese
> noch automatisch übergeben wurden.Ich glaub eclipse ist
> schuld XD.
>
> Es wär echt großartig wenn du nochmal oder jemand
> anders-hab dich denk ich genug geägert ;)- kurz
> resümieren kann,
> welche parameter, wann wo wie warum übertragen werden und
> welche werte ich dann bei mir als übergabe parameter
> eintagenm soll
>
> grüße und danke für eure geduld leutz
> matheja
>
>
also du willst ja "flexibel" 2 zahlen vermultiplizieren lassen.
dazu musst du also die zahlen direkt während der programmausführung einlesen (was in java aber schon komplizierter ist, als etwa in c)
siehe
http://openbook.galileocomputing.de/javainsel8/javainsel_14_004.htm#mj1d0203580263334d55e78601998800e5
wie gesagt, dass wäre der kompliziertere weg, und das scheint ihr noch nicht behandelt zu haben?!
dr wesentlich einfachere weg ist es, die parameter direkt vor der ausführung mit ans programm zu übergeben
bsp:
1: | public static void main(String[] args)
| 2: | {
| 3: | int zahl1= Integer.parseInt(args[0]);
| 4: | int zahl2= Integer.parseInt(args[1]);
| 5: | System.out.printf("%d * %d= %d",zahl1,zahl2,zahl1*zahl2);
| 6: | }
| 7: |
| 8: | } |
|
|
|
|
|
Hallo!
Ich sehe da noch ein paar weitere Probleme:
Generell zu multiply und square: Du solltest vermeiden, die Ausgabe direkt darin zu machen. Denn die beiden Funktionen sollten nur das Ergebnis berechnen. Was mit so einem Endergebnis geschehen soll, also auf den Bildschirm ausgeben, in eine Datei schreiben, oder für weitere Berechneungen verwenden, sollte die aufrufende Funktion main bestimmen. Also direkt in der main so:
for (int i=interval_start; i<=interval_end;i = i + interval_step) {
System.out.println(i + "^2="+square (i));
}
(Wobei ich mich frage, ob Java es erlaubt, Zahlen und Strings so wie hier einfach zu addieren, ich kann es mir kaum vorstellen.)
Außerdem läßt du das Produkt bzw das Quadrat zwei mal berechnen, einmal in der Ausgabe, dann als Rückgabewert. Funktioniert, ist aber nicht schön.
Nebenbei, was hälst du von dieser Spielerei?
public static int square (int c) {
int d = multiply(c, c);
//Rückgabe von d
return d;
}
In der Fakultätsschleife steht ein multiply - wozu?
Dann läuft die Schleife so lange, bis n deine Grenze von 1000 überschreitet. Das heißt, die Schleife wird zwar verlassen, das n ist aber schon größer als 1000. Also anschließend nochmal durch k teilen, und k um eins kleiner machen.
mit dem k++, (k-1) und so. Was hälst du davon:
int n=1;
int k=n;
while(n<1000){
k++
n=multiply(n,k);
}
Nach verlassen dieser Schleife gilt n=k!, bei dir gilt n=(k-1)!.
|
|
|
|