Haevelin
Tripel-As
Dabei seit: 04.06.2013
Beiträge: 221
|
|
Integerwerte in einer ArrayList casten |
|
Folgender Code funktioniert nicht:
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:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
|
package WissensbasierteSysteme_3;
import java.util.ArrayList;
import java.util.Arrays;
public class EA3 {
ArrayList[] group = new ArrayList[8];
public EA3(){
int[] arrayE= {1,1,0,1,1,1,1,1,1,0};
ArrayList alE = new ArrayList(Arrays.asList(arrayE));
group[0] = alE;
int[] arrayD= {1,0,1,1,0,1,1,0,0,0};
ArrayList alD = new ArrayList(Arrays.asList(arrayD));
group[1] = alD;
int[] arrayR= {0,1,1,0,1,1,0,1,0,0};
ArrayList alR = new ArrayList(Arrays.asList(arrayR));
group[2] = alR;
int[] arrayN= {1,1,0,1,1,0,1,0,0,1};
ArrayList alN = new ArrayList(Arrays.asList(arrayN));
group[3] = alN;
int[] arrayEuR= {0,1,0,0,1,1,0,1,0,0};
ArrayList alEuR = new ArrayList(Arrays.asList(arrayEuR));
group[4] = alEuR;
int[] arrayEuN= {1,1,0,1,1,0,1,0,0,0};
ArrayList alEuN = new ArrayList(Arrays.asList(arrayEuN));
group[5] = alEuN;
int[] arrayER= {0,1,0,0,1,1,0,0,0,0};
ArrayList alER = new ArrayList(Arrays.asList(arrayER));
group[6] = alER;
int[] arrayEn= {1,1,0,0,0,0,1,0,0,0};
ArrayList alEn = new ArrayList(Arrays.asList(arrayEn));
group[7] = alEn;
}
public void auswertenPaar(ArrayList anfang, ArrayList ende, int i, int j){
int sum=0;
for (int h=0; h< 10; h++){
if ((((Integer)anfang.get(h))==1) && (((Integer)ende.get(h))==1)){
sum++;
}
}
double op = sum/10.0;
String k1="";
String k2="";
switch (i){
case 0: k1="E"; break;
case 1: k1 ="D"; break;
case 2: k1 = "R"; break;
case 3: k1= "N"; break;
case 4: k1 = "EuR"; break;
case 5: k1 = "EuN"; break;
case 6: k1 ="ER"; break;
case 7: k1 = "En"; break;
default: System.exit(0);
}
switch (j){
case 0: k2="E"; break;
case 1: k2 ="D"; break;
case 2: k2 = "R"; break;
case 3: k2= "N"; break;
case 4: k2 = "EuR"; break;
case 5: k2 = "EuN"; break;
case 6: k2 ="ER"; break;
case 7: k2 = "En"; break;
default: System.exit(0);
}
if (op>=0.4){ System.out.println("Das Paar "+ k1 + " " + k2 + " hat Wert: "+ op);}
}
public void auswerten(){
for (int i=0; i<group.length; i++){
for (int j= i+1; j<group.length;j++){
auswertenPaar(group[i], group[j], i, j);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
EA3 ea3 = new EA3();
ea3.auswerten();
}
}
|
|
Folgende Fehlermeldung bei der Castzeile: Exception in thread "main" java.lang.ClassCastException: [I cannot be cast to java.lang.Integer
at WissensbasierteSysteme_3.EA3.auswertenPaar(EA3.java:39)
at WissensbasierteSysteme_3.EA3.auswerten(EA3.java:77)
at WissensbasierteSysteme_3.EA3.main(EA3.java:85)
|
|
29.05.2017 15:28 |
|
|
|
Haevelin
Tripel-As
Dabei seit: 04.06.2013
Beiträge: 221
|
|
RE: Integerwerte in einer ArrayList casten |
|
Es scheinen auch die Zuordnungen von Feld zu ArrayList nicht zu funktionieren; was muss ich anders machen?
|
|
29.05.2017 15:39 |
|
|
|
Haevelin
Tripel-As
Dabei seit: 04.06.2013
Beiträge: 221
|
|
RE: Integerwerte in einer ArrayList casten |
|
Es funktioniert folgender Code, aber ich würde es gerne etwas ökonomischer halten:
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:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
|
package WissensbasierteSysteme_3;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.PriorityQueue;
public class EA3 {
ArrayList[] group = new ArrayList[8];
public EA3() {
int[] arrayE = { 1, 1, 0, 1, 1, 1, 1, 1, 1, 0 };
ArrayList<Integer> alE = new ArrayList<Integer>();
for (int i = 0; i < arrayE.length; i++) {
alE.add(arrayE[i]);
}
group[0] = alE;
int[] arrayD = { 1, 0, 1, 1, 0, 1, 1, 0, 0, 0 };
ArrayList<Integer> alD = new ArrayList<Integer>();
for (int i = 0; i < arrayD.length; i++) {
alD.add(arrayD[i]);
}
group[1] = alD;
int[] arrayR = { 0, 1, 1, 0, 1, 1, 0, 1, 0, 0 };
ArrayList<Integer> alR = new ArrayList<Integer>();
for (int i = 0; i < arrayR.length; i++) {
alR.add(arrayR[i]);
}
group[2] = alR;
int[] arrayN = { 1, 1, 0, 1, 1, 0, 1, 0, 0, 1 };
ArrayList<Integer> alN = new ArrayList<Integer>();
for (int i = 0; i < arrayN.length; i++) {
alN.add(arrayN[i]);
}
group[3] = alN;
int[] arrayEuR = { 0, 1, 0, 0, 1, 1, 0, 1, 0, 0 };
ArrayList<Integer> alEuR = new ArrayList<Integer>();
for (int i = 0; i < arrayEuR.length; i++) {
alEuR.add(arrayEuR[i]);
}
group[4] = alEuR;
int[] arrayEuN = { 1, 1, 0, 1, 1, 0, 1, 0, 0, 0 };
ArrayList<Integer> alEuN = new ArrayList<Integer>();
for (int i = 0; i < arrayEuN.length; i++) {
alEuN.add(arrayEuN[i]);
}
group[5] = alEuN;
int[] arrayER = { 0, 1, 0, 0, 1, 1, 0, 0, 0, 0 };
ArrayList<Integer> alER = new ArrayList<Integer>();
for (int i = 0; i < arrayER.length; i++) {
alER.add(arrayER[i]);
}
group[6] = alER;
int[] arrayEn = { 1, 1, 0, 0, 0, 0, 1, 0, 0, 0 };
ArrayList<Integer> alEn = new ArrayList<Integer>();
for (int i = 0; i < arrayEn.length; i++) {
alEn.add(arrayEn[i]);
}
group[7] = alEn;
}
public void auswertenPaar(ArrayList anfang, ArrayList ende, int i, int j) {
int sum = 0;
for (int h = 0; h < 10; h++) {
// System.out.println(anfang.get(h));
if (((Integer) (anfang.get(0)) == 1) && (((int) ende.get(h)) == 1)) {
sum++;
}
}
double op = sum / 10.0;
String k1 = "";
String k2 = "";
switch (i) {
case 0:
k1 = "E";
break;
case 1:
k1 = "D";
break;
case 2:
k1 = "R";
break;
case 3:
k1 = "N";
break;
case 4:
k1 = "EuR";
break;
case 5:
k1 = "EuN";
break;
case 6:
k1 = "ER";
break;
case 7:
k1 = "En";
break;
default:
System.exit(0);
}
switch (j) {
case 0:
k2 = "E";
break;
case 1:
k2 = "D";
break;
case 2:
k2 = "R";
break;
case 3:
k2 = "N";
break;
case 4:
k2 = "EuR";
break;
case 5:
k2 = "EuN";
break;
case 6:
k2 = "ER";
break;
case 7:
k2 = "En";
break;
default:
System.exit(0);
}
if (op >= 0.4) {
System.out.println("Das Paar " + k1 + " " + k2 + " hat Wert: " + op);
}
}
public void auswerten() {
for (int i = 0; i < group.length; i++) {
for (int j = i + 1; j < group.length; j++) {
auswertenPaar(group[i], group[j], i, j);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
EA3 ea3 = new EA3();
ea3.auswerten();
}
}
|
|
|
|
30.05.2017 08:57 |
|
|
|
InformaTiger
Tripel-As
Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol
|
|
RE: Integerwerte in einer ArrayList casten |
|
Hallo Havelin,
habe es soeben getestet: du musst die Integer gar nicht casten falls du dein Array anders anlegst. Und zwar kannst du dir die generischen Ausdrücke zunutze machen in etwa eben so:
code: |
1:
|
ArrayList<Integer>[] group = new ArrayList[8]; |
|
dadurch erzielst du, dass deine ArrayLists nur mehr Integer aufnehmen können und die Objekte daher nicht nur als Standardobjekt von Java darin abgelegt werden.
Mit freundlichen Grüßen
InformaTiger
__________________ Why do Java developers wear glasses? Because they can't C#
|
|
31.05.2017 18:54 |
|
|
|
Haevelin
Tripel-As
Dabei seit: 04.06.2013
Beiträge: 221
|
|
|
01.06.2017 09:38 |
|
|
|
Haevelin
Tripel-As
Dabei seit: 04.06.2013
Beiträge: 221
|
|
|
01.06.2017 11:48 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Ich verstehe nicht, warum Du überhaupt mit ArrayList rum machst. Du hast ein zweidimensionales Array, was sich nicht weiter verändern muss. Dann mach einfach ein final int[][] etwa so:
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:
|
public class EA3 {
private final int[][] group = {
{1,1,0,1,1,1,1,1,1,0},
{1,0,1,1,0,1,1,0,0,0},
{0,1,1,0,1,1,0,1,0,0},
{1,1,0,1,1,0,1,0,0,1},
{0,1,0,0,1,1,0,1,0,0},
{1,1,0,1,1,0,1,0,0,0},
{0,1,0,0,1,1,0,0,0,0},
{1,1,0,0,0,0,1,0,0,0}
};
public void auswertenPaar(int[] anfang, int[] ende, int i, int j){
int sum=0;
for (int h = 0; h < 10; h++) {
if ((anfang[h] == 1) && (ende[h] == 1)) {
sum++;
}
}
double op = sum / 10.0;
String k1 = "";
String k2 = "";
switch (i) {
case 0: k1 = "E"; break;
case 1: k1 = "D"; break;
case 2: k1 = "R"; break;
case 3: k1 = "N"; break;
case 4: k1 = "EuR"; break;
case 5: k1 = "EuN"; break;
case 6: k1 = "ER"; break;
case 7: k1 = "En"; break;
default:
System.exit(0);
}
switch (j) {
case 0: k2 = "E"; break;
case 1: k2 = "D"; break;
case 2: k2 = "R"; break;
case 3: k2 = "N"; break;
case 4: k2 = "EuR"; break;
case 5: k2 = "EuN"; break;
case 6: k2 = "ER"; break;
case 7: k2 = "En"; break;
default:
System.exit(0);
}
if (op >= 0.4) {
System.out.println("Das Paar " + k1 + " " + k2 + " hat Wert: " + op);
}
}
public void auswerten() {
for (int i = 0; i < group.length; i++) {
for (int j = i + 1; j < group.length; j++) {
auswertenPaar(group[i], group[j], i, j);
}
}
}
public static void main(String[] args) {
EA3 ea3 = new EA3();
ea3.auswerten();
}
}
|
|
Allerdings verstehe ich auch einige andere Dinge nicht so ganz an Deinem Code. Kannst Du mal grob umschreiben, was das überhaupt machen soll???
Gruß
Marco
|
|
21.06.2017 14:45 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Dann finde ich auch die switch-case-Anweisungen irgendwie unnötig. Ich meine: Du weißt ja nur den Zahlen 0 bis 7 einen String zu. Das kannst Du auch einfach mit einem String-Array machen.
Wenn Du z. B. das hier definierst:
code: |
1:
2:
3:
4:
|
private final String[] classification =
{"E", "D", "R", "N", "EuR", "EuN", "ER", "En"};
|
|
Kannst Du das komplette Switch durch einen einfach Array-Lookup ersetzen, etwa so:
code: |
1:
|
classification[i] |
|
und dann nochmal für j um den zweiten switch-Block raus zu bekommen.
Dann würde der Code so aussehen:
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:
|
public class EA3 {
private final int[][] group = {
{1,1,0,1,1,1,1,1,1,0},
{1,0,1,1,0,1,1,0,0,0},
{0,1,1,0,1,1,0,1,0,0},
{1,1,0,1,1,0,1,0,0,1},
{0,1,0,0,1,1,0,1,0,0},
{1,1,0,1,1,0,1,0,0,0},
{0,1,0,0,1,1,0,0,0,0},
{1,1,0,0,0,0,1,0,0,0}
};
private final String[] classification =
{"E", "D", "R", "N", "EuR", "EuN", "ER", "En"};
public void auswertenPaar(int[] anfang, int[] ende, int i, int j) {
int sum = 0;
for (int h = 0; h < 10; h++) {
if ((anfang[h] == 1) && (ende[h] == 1)) {
sum++;
}
}
if (i >= classification.length || j >= classification.length)
System.exit(0);
double op = sum / 10.0;
if (op >= 0.4) {
System.out.println("Das Paar " + classification[i] + " " + classification[j] + " hat Wert: " + op);
}
}
public void auswerten() {
for (int i = 0; i < group.length; i++) {
for (int j = i + 1; j < group.length; j++) {
auswertenPaar(group[i], group[j], i, j);
}
}
}
public static void main(String[] args) {
EA3 ea3 = new EA3();
ea3.auswerten();
}
} |
|
Bei mir ist die Ausgabe dann:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
Das Paar E D hat Wert: 0.4
Das Paar E R hat Wert: 0.4
Das Paar E N hat Wert: 0.5
Das Paar E EuR hat Wert: 0.4
Das Paar E EuN hat Wert: 0.5
Das Paar R EuR hat Wert: 0.4
Das Paar N EuN hat Wert: 0.5 |
|
Ich bin aber nach wie vor sehr skeptisch, dass das wirklich das ist, was Du haben wolltest.
Gruß
Marco
|
|
21.06.2017 15:15 |
|
|
|
|
|