Integerwerte in einer ArrayList casten

Neue Frage »

Auf diesen Beitrag antworten »
Haevelin 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)
 
Auf diesen Beitrag antworten »
Haevelin RE: Integerwerte in einer ArrayList casten

Es scheinen auch die Zuordnungen von Feld zu ArrayList nicht zu funktionieren; was muss ich anders machen?
Auf diesen Beitrag antworten »
Haevelin 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();

	}

}
 
Auf diesen Beitrag antworten »
InformaTiger 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.

smile

Mit freundlichen Grüßen
InformaTiger
 
Auf diesen Beitrag antworten »
Haevelin RE: Integerwerte in einer ArrayList casten

Aber der Code I funktioniert auch dann nicht. Es wird einfach kein Arrays.asList aktiviert, so wie ich das will. Oder kommst du zu einem anderen Resultat?
Auf diesen Beitrag antworten »
Haevelin RE: Integerwerte in einer ArrayList casten

Folgendes funktioniert:

code:
1:
2:
3:
4:
 int[] probe = {1,2,3,4};
        ArrayList<int[]> al = new ArrayList<>(Arrays.asList(probe));
        System.out.println(al.get(0)[0]);
Auf diesen Beitrag antworten »
as_string

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
Auf diesen Beitrag antworten »
as_string

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
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »