Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
---- Algorithmen (http://www.informatikerboard.de/board/board.php?boardid=17)
----- Integerwerte in einer ArrayList casten (http://www.informatikerboard.de/board/thread.php?threadid=3602)


Geschrieben von Haevelin am 29.05.2017 um 15:28:

  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)



Geschrieben von Haevelin am 29.05.2017 um 15:39:

  RE: Integerwerte in einer ArrayList casten

Es scheinen auch die Zuordnungen von Feld zu ArrayList nicht zu funktionieren; was muss ich anders machen?



Geschrieben von Haevelin am 30.05.2017 um 08:57:

  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();

	}

}
 



Geschrieben von InformaTiger am 31.05.2017 um 18:54:

  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



Geschrieben von Haevelin am 01.06.2017 um 09:38:

  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?



Geschrieben von Haevelin am 01.06.2017 um 11:48:

  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]);



Geschrieben von as_string am 21.06.2017 um 14:45:

 

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



Geschrieben von as_string am 21.06.2017 um 15:15:

 

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


Forensoftware: Burning Board, entwickelt von WoltLab GmbH