16.12.2014, 20:43 |
Auf diesen Beitrag antworten » |
neuling96 |
array a(i) fehler
code: |
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:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
|
public class Algorithmen {
public static int[] countElements(int[] werte, int max, int numBuckets) {
int x=0;
int [] a = new int [numBuckets];
int [] b = new int [numBuckets];
int [] z = new int [numBuckets];
int w=0;
x=(max-numBuckets)/(numBuckets);
for (int i=0;i<numBuckets;i++){
a[i]=i+x*(i);
}
for (int i=0;i<numBuckets;i++){
b[i]=i+(i+1)*(x);
}
for (int i=0;i<numBuckets;i++){
for (int y=0;y<werte.length;y++){
if(werte[y]<=b[i] && werte[y]>=a[i] ){
w++;
}
}
z[i]=w;
}
return z;
}
public static void main(String[] args) {
System.out.print("countElements{0, 9, 2, 3, 4, 5, 7, 8, 1},10, 2): { ");
int[] werte = {0, 9, 2, 3, 4, 5, 7, 8, 1};
int max = 10;
int numBuckets = 2;
int[] counted = countElements(werte, max, numBuckets);
for (int i = 0; i < counted.length; i++) {
System.out.print(counted[i] + " ");
}
System.out.println("}"); // { 5 4 }
}
}
|
|
auf a(i) wird nicht richtig zugegriffen, aber wies0? |
|
|
|
16.12.2014, 20:57 |
Auf diesen Beitrag antworten » |
eulerscheZahl |
Je genauer du die Frage stellst, desto höher sind die Chancen auf eine sinnvolle Antwort.
Ich sehe hier ein Programm, dass Arrays erstellt, irgendwas damit tut und dann { 5 9 } ausgibt.
Ich habe keine Ahnung, was die eigentliche Intention ist, also kann ich dir so nicht helfen.
Fangen wir also damit an: was soll das Programm tun? |
16.12.2014, 21:00 |
Auf diesen Beitrag antworten » |
neuling96 |
Implementieren Sie eine offentlich sichtbare statische Methode int[] countElements(int[]
werte, int max, int numBuckets) in Java, die das Integer-Intervall [0;max-1] in gleich große
zusammenhängende Teilintervalle unterteilt und in einem Ergebnisarray des Typs int[] die Anzahl der
Array-Elemente aus werte zur¨uckgibt, die in das entsprechende Teilintervall fallen. Sie konnen davon
ausgehen, dass beide Arrays eine L¨ange von mindestens 1 haben, dass max > 0 und max durch
numBuckets teilbar ist. Außerdem konnen Sie annehmen, dass alle Zahlen in werte im Intervall
[0;max-1] liegen. |
16.12.2014, 21:08 |
Auf diesen Beitrag antworten » |
eulerscheZahl |
Könnte man zwar deutlich kürzer machen, aber du hast es ja schon fast.
Lösche die Variable w. Zeile 26 wird zu z[i]++; Und Zeile 29 fliegt raus. feritg. |
Anzeige |
|
|
16.12.2014, 21:13 |
Auf diesen Beitrag antworten » |
neuling96 |
vielen dank hat funktioniert, aber was genau war falsch an
w++;
}
}
z[i]=w;
?
"Könnte man zwar deutlich kürzer machen"
wie? |
16.12.2014, 21:19 |
Auf diesen Beitrag antworten » |
eulerscheZahl |
Du hast den Wert zu jedem Bucket hinzugefügt, solange der Mindestwert passt. Alternativ kannst du auch nach z[i]=w;[/“] ein [b]w=0; einfügen, dann geht es auch. Du hattest nämlich den Zähler nicht zurückgesetzt.
Das, woran ich beim Lesen der Aufgabe als ersten gedacht habe, ist das hier:
code: |
1:
2:
3:
4:
5:
6:
7:
|
public static int[] countElements(int[] werte, int max, int numBuckets) {
int[] result = new int[numBuckets];
for (int i = 0; i < werte.length; i++) {
result[werte[i] * numBuckets / max]++;
}
return result;
} |
|
|
16.12.2014, 21:34 |
Auf diesen Beitrag antworten » |
neuling96 |
wow das ist kurz!
|
16.12.2014, 23:50 |
Auf diesen Beitrag antworten » |
neuling96 |
(istquadrat prüft ob zahl eine quadratzahl ist
int fib gibt ein n elmenten array mit den werten der fib reihe)
code: |
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:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
|
public class Algorithmen {
public static boolean istQuadratzahl(int zahl) {
int n=0;
while ( n*n< zahl){
n++;
}
if (n*n==zahl){
return true;
}else {
return false;
}
}
public static int[] fib(int n) {
int[] a= new int [n];
a[0]=0;
a[1]=1;
for (int i=2; i<n;i++){
a[i]=a[i-1]+a[i-2];
}
}
public static int[] countElements(int[] werte, int max, int numBuckets) {
int x=0;
int [] a = new int [numBuckets];
int [] b = new int [numBuckets];
int [] z = new int [numBuckets];
int w=0;
x=(max-numBuckets)/(numBuckets);
for (int i=0;i<numBuckets;i++){
a[i]=i+x*(i);
b[i]=i+(i+1)*(x);
}
for (int i=0;i<numBuckets;i++){
for (int y=0;y<werte.length;y++){
if((werte[y]<=b[i] && werte[y]>=a[i] ) ){
z[i]++;
}
}
return z;
}
public static void main(String[] args) {
System.out.println("istQuadratzahl(1337): " + istQuadratzahl(1337)); // false
System.out.print("fib(6): { ");
int[] fibonacci = fib(6);
for (int i = 0; i < fibonacci.length; i++) {
System.out.print(fibonacci[i] + " ");
}
System.out.println("}"); // { 0 1 1 2 3 5 }
System.out.print("countElements({0,9,2,3,4,5,7,8,1}, 10, 2): { ");
int[] werte = {0, 9, 2, 3, 4, 5, 7, 8, 1};
int max = 10;
int numBuckets = 2;
int[] counted = countElements(werte, max, numBuckets);
for (int i = 0; i < counted.length; i++) {
System.out.print(counted[i] + " ");
}
System.out.println("}"); // { 5 4 }
}
}
|
|
illegal start of expression
beim public static void
wie kann es beheben? |
17.12.2014, 14:56 |
Auf diesen Beitrag antworten » |
eulerscheZahl |
Du hast schon wieder die Klammern falsch gesetzt.
Versuche dich am Einrücken, dann findest du den Fehler auch schneller.
code: |
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:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
|
public static boolean istQuadratzahl(int zahl) {
int n=0;
while ( n*n< zahl){
n++;
}
if (n*n==zahl){
return true;
} else {
return false;
}
}
public static int[] fib(int n) {
int[] a= new int [n];
a[0]=0;
a[1]=1;
for (int i=2; i<n;i++){
a[i]=a[i-1]+a[i-2];
}
return a;
}
public static int[] countElements(int[] werte, int max, int numBuckets) {
int x=0;
int [] a = new int [numBuckets];
int [] b = new int [numBuckets];
int [] z = new int [numBuckets];
int w=0;
x=(max-numBuckets)/(numBuckets);
for (int i=0;i<numBuckets;i++){
a[i]=i+x*(i);
b[i]=i+(i+1)*(x);
}
for (int i=0;i<numBuckets;i++){
for (int y=0;y<werte.length;y++){
if((werte[y]<=b[i] && werte[y]>=a[i] )){
z[i]++;
}
}
}
return z;
}
public static void main(String[] args) {
System.out.println("istQuadratzahl(1337): " + istQuadratzahl(1337)); // false
System.out.print("fib(6): { ");
int[] fibonacci = fib(6);
for (int i = 0; i < fibonacci.length; i++) {
System.out.print(fibonacci[i] + " ");
}
System.out.println("}"); // { 0 1 1 2 3 5 }
System.out.print("countElements({0,9,2,3,4,5,7,8,1}, 10, 2): { ");
int[] werte = {0, 9, 2, 3, 4, 5, 7, 8, 1};
int max = 10;
int numBuckets = 2;
int[] counted = countElements(werte, max, numBuckets);
for (int i = 0; i < counted.length; i++) {
System.out.print(counted[i] + " ");
}
System.out.println("}"); // { 5 4 }
} |
|
istQuadratzahl gefällt mir nicht, ist viel zu langsam.
code: |
1:
2:
3:
4:
|
public static boolean istQuadratzahl(int zahl) {
int wurzel = (int)Math.sqrt(zahl);
return wurzel * wurzel == zahl;
} |
|
|