Anna90
(Themenstarter)
Anmeldungsdatum: 9. November 2014
Beiträge: Zähle...
|
Hi, also meine errorprbleme sind fast gelöst.
Irgendwas stimmt mit meiner Klasse aber noch nicht
Wenn ich Schreibe:
public class EuklidModern {
public static int quadrat (int x) {
int q;
for(q = 1; q <= x + x; q = q + 2)
{
System.out.println(x + q);
}
return q;
}
} hat er das Problem: Aufgabe22.java:1: error: class EuklidModern is public, should be declared in a file named EuklidModern.java
public class EuklidModern {
^
1 error Wenn ich schreibe: public class EuklidModern.java {
public static int quadrat (int x) {
int q;
for(q = 1; q <= x + x; q = q + 2)
{
System.out.println(x + q);
}
return q;
}
} Dann hat er folgendes Problem: Aufgabe22.java:1: error: '{' expected
public class EuklidModern.java {
^
1 error
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Benenne doch mal die Datei mit dem Code um, wie in der ersten Fehlermeldung verlangt. Punkte in Klassennamen sind soweit ich weiß nicht erlaubt, die Syntax mit Klassenname.foo würdest du ja später nutzen, wenn du auf das (statische) Element foo deiner Klasse zugreifen willst.
|
unbuntuS12
Anmeldungsdatum: 2. Juni 2010
Beiträge: 1816
|
Also wenn man die Fehlermeldung genau liest, dann kann man dem eigentlich entnehmen, was zu tun ist: Wenn du in einer Datei eine Klasse Foo erstellst, dann sollte diese Datei, die du in deinem Editor gerade bearbeitest auch Foo.java heißen. Also: Benenne die Datei um! Die restlichen Fehler bist du jetzt noch nicht angegangen, aber übersetze das erstmal und probiere es aus.
|
Anna90
(Themenstarter)
Anmeldungsdatum: 9. November 2014
Beiträge: 33
|
Wenn ich folgendes schreibe: public class Aufgabe22 {
public static int quadrat (int x) {
int q;
for(q = 1; q <= x + x; q = q + 2)
{
System.out.println(x + q);
}
return q;
}
} dann compeliert der zwar aber ich kann das programm nicht ausführen/testen ...-StudiPC:~$ java Aufgabe22
Error: Main method not found in class Aufgabe22, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application Wenn ich nun tue was er sagt,
public class Aufgabe22 {
public static void main(String[] args) {
int x = quadrat (int x);
system.out.println(x);
}
public static int quadrat (int x) {
int q;
for(q = 1; q <= x + x; q = q + 2)
{
System.out.println(x + q);
}
return q;
}
}
dann mekkert er wieder beim compelieren: Aufgabe22.java:3: error: '.class' expected
int x = quadrat (int x);
^
Aufgabe22.java:3: error: ';' expected
int x = quadrat (int x);
^
2 errors
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Wenn du eine statische Klassenmethode aufrufen willst, musst du die Klasse angeben (this würde in dem Fall nicht funktionieren, weil es bei einer statischen Methode keine Instanz der Klasse gibt):
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | public class Aufgabe22 {
public static void main(String[] args) {
int x = Aufgabe22.quadrat (int x);
system.out.println(x);
}
public static int quadrat (int x) {
int q;
for(q = 1; q <= x + x; q = q + 2)
{
System.out.println(x + q);
}
return q;
}
}
|
Zeile 3 ist komisch, weil x nirgendwo einen brauchbaren Wert bekommt, Zeile 4 ist vermutlich ein Tippfehler und System.out musst du noch aus der entsprechenden Bibliothek importieren, wenn deine Entwicklungs-Umgebung das nicht automatisch für dich tut.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Du solltest ein Buch zur Javaprogrammierung durcharbeiten. Das wird in Büchern alles erklärt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | public class EuklidModern {
public static int quadrat (int x) {
int adder= -1;
int res = 0;
for (int q = 1; q <= x; ++q)
{
adder += 2;
res += adder;
System.out.println (res);
}
return res;
}
public static void main (String [] s)
{
quadrat (Integer.parseInt (s[0]));
}
}
|
So geht es zum Beispiel, wobei die Fehlerbehandlung (kein Parameter, keine Ganzzahl) spartanisch ist. | public static void main(String[] args) {
int x = Aufgabe22.quadrat (int x);
system.out.println(x);
}
|
Du Übergibst der Methode quadrat hier keinen Wert, sondern eine Deklaration - das geht nicht. unbuntuS12 schrieb: Also wenn man die Fehlermeldung genau liest, dann kann man dem eigentlich entnehmen, was zu tun ist: Wenn du in einer Datei eine Klasse Foo erstellst, dann sollte diese Datei, die du in deinem Editor gerade bearbeitest auch Foo.java heißen. Also: Benenne die Datei um!
Wenn man es genau liest, dann "error: class EuklidModern is public" stellt man fest, dass diese Aussage nur für public deklarierte Klassen zutrifft. Es ist allerdings ein zwingendes Erfordernis und sollte deshalb 'muss/must' heißen, nicht 'sollte/should'.
|
Anna90
(Themenstarter)
Anmeldungsdatum: 9. November 2014
Beiträge: 33
|
geschafft: Tausend dank an euch! Ergebnis:
public class Aufgabe22 {
public static void main(String[] args) {
int x = Integer.parseInt(args[0]);
x = quadrat (x);
System.out.println(x);
}
public static int quadrat (int x) {
int q;
int total=0;
for(q = 1; q <= x + x; q = q + 2)
{
total=total+q;
}
q=total;
return q;
}
}
|
donatlakers
Anmeldungsdatum: 16. November 2015
Beiträge: Zähle...
|
|
atze
Anmeldungsdatum: 11. März 2010
Beiträge: 83
|
Freut mich, dass du zu einer Lösung kommen konntest. Ich persönlich finde es immer ganz nett mal zu sehen wie andere es lösen würden. Daher möchte ich dir (und anderen interessierten Lesern), die Lösung die ich schrieb als ich deine Frage gelesen habe nicht vorenthalten. 1
2
3
4
5
6
7
8
9
10
11
12
13 | public class Quadrat {
public static void main (String[] args) {
System.out.println(quadrat(Integer.parseInt(args[0])));
}
public static int quadrat(int x) {
int q = 0;
for (int i = 1; i <= x + x; i += 2) {
q += i;
}
return q;
}
}
|
Und weil ich mir immer einen Keks freu, wenn ich Java mit Python vergleiche :p
| def quadrat(x):
return sum(range(1, x + x, 2))
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12821
|
Anna90 schrieb:
sie soll folgenden Rumpf haben: public static int quadrat (int x) {
int q;
return q;
}
Es gibt ein grundsätzliches Problem mit allen Lösungen hier, das aber durch die Aufgabenstellung verursacht wurde: führt mal Eure Lösungen mit dieser main -Methode aus: | public static void main(String[] args) {
for (int i = 0; i < Integer.MAX_VALUE; ++i) {
final int q = quadrat(i);
if (q < i) {
System.out.printf("Input: %10d Output: %10d\n", i, q);
}
}
}
|
Mindestens sollte man da eine Fehlerbehandlung einbauen. Zusätzlich könnte man auch den Rückgabewert auf long ändern.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
rklm schrieb:
Es gibt ein grundsätzliches Problem mit allen Lösungen hier, das aber durch die Aufgabenstellung verursacht wurde:
Mindestens sollte man da eine Fehlerbehandlung einbauen. Zusätzlich könnte man auch den Rückgabewert auf long ändern.
Nein, das kann man vorschlagen, aber nicht machen, wenn die Aufgabenstellung ein int als Rückgabewert vorsieht. Man kann für problematischen Input eine Fehlermeldung ausgeben, und mit dem Lehrer/Auftraggeber Rücksprache halten. Selbstherrlich die Schnittstelle inkompatibel machen würde ich als größeren Fehler ansehen. Im praktischen Gebrauch wird so eine Lösung niemand wählen, also genügt es völlig den Extrapunkt einzuheimsen, weil man es gemerkt hat. Von der Aufgabenschwierigkeit leite ich ab, dass elaborierte Fehlerbehandlung auch noch nicht Unterrichtsstoff war, womöglich nicht mals Überlauf von Variablen, man hier also Kontext und Intention falsch verstanden hätte, in denen man aktiv ist. Das sind aber Schlüsselqualifikationen. ☺
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12821
|
user_unknown schrieb: rklm schrieb:
Es gibt ein grundsätzliches Problem mit allen Lösungen hier, das aber durch die Aufgabenstellung verursacht wurde:
Mindestens sollte man da eine Fehlerbehandlung einbauen. Zusätzlich könnte man auch den Rückgabewert auf long ändern.
Nein, das kann man vorschlagen, aber nicht machen, wenn die Aufgabenstellung ein int als Rückgabewert vorsieht.
Es war nie die Rede davon, das innerhalb der Aufgabenlösung zu machen.
Von der Aufgabenschwierigkeit leite ich ab, dass elaborierte Fehlerbehandlung auch noch nicht Unterrichtsstoff war, womöglich nicht mals Überlauf von Variablen,
Das sind Spekulationen.
man hier also Kontext und Intention falsch verstanden hätte, in denen man aktiv ist. Das sind aber Schlüsselqualifikationen. ☺
Wer hätte "Kontext und Intention falsch verstanden" - und warum?
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
rklm schrieb: Nein, das kann man vorschlagen, aber nicht machen, wenn die Aufgabenstellung ein int als Rückgabewert vorsieht.
Es war nie die Rede davon, das innerhalb der Aufgabenlösung zu machen.
Ich wollte es nochmal unterstreichen.
Von der Aufgabenschwierigkeit leite ich ab, dass elaborierte Fehlerbehandlung auch noch nicht Unterrichtsstoff war, womöglich nicht mals Überlauf von Variablen,
Das sind Spekulationen.
Frag Anna90 wie gut die sind. ☺
man hier also Kontext und Intention falsch verstanden hätte, in denen man aktiv ist. Das sind aber Schlüsselqualifikationen. ☺
Wer hätte "Kontext und Intention falsch verstanden" - und warum?
Um auf die Wichtigkeit von Schnittstellen hinzweisen. Ein Dozent kann beispielsweise Antworten auf einem Server entgegennehmen und automatisiert prüfen. | int res = user17.Aufgabe22.quadrat (23);
|
|
xuniL123
Anmeldungsdatum: 5. August 2012
Beiträge: 293
|
Hierzu habe ich auch noch eine Lösung beizutragen. Allerdings ohne Euklid, nur reine Rekursion 😬 (und leider in C geschrieben statt Java) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 | #include<stdio.h>
int mult(int zahl1, int zahl2) {
if (zahl2 == 1)
return zahl1;
else
return zahl1 + mult(zahl1, zahl2 - 1);
}
int pot(int zahl1, int zahl2) {
if (zahl2 == 1)
return zahl1;
else
return mult(zahl1, pot(zahl1, zahl2 - 1));
}
int main() {
int zahl1, zahl2;
printf("Bitte Zahl1 eingeben: ");
scanf("%d", &zahl1);
printf("Bitte Zahl2 eingeben: ");
scanf("%d", &zahl2);
printf("%d x %d = %d\n", zahl1, zahl2, mult(zahl1, zahl2));
printf("%d ^ %d = %d\n", zahl1, zahl2, pot(zahl1, zahl2));
}
|
Beispiel:
Bitte Zahl1 eingeben: 3
Bitte Zahl2 eingeben: 5
3 x 5 = 15
3 ^ 5 = 243
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
Wohnort: Hamburg
|
@xunil123 Ui... Rekursion in einer Sprache ohne TCO 😬 @atze So sähe meine Python-Lösung aus:
| from itertools import repeat
def squared(value):
return sum(repeat(value, value))
assert(squared(3) == 9)
assert(squared(2) == 4)
assert(squared(10) == 100)
|
Und hier mal in Clojure:
| (defn squared [x]
(apply + (repeat x x)))
(assert (= (squared 3) 9))
|
|