Guten Abend,
ich soll eine Matrix n x m abfragen und diese dann auf mindestens doppelte Werte überprüfen und diese dann durch eine "-1" ersetzen...
Das Einlesen und Ausgeben funktioniert soweit, nur probiere ich seit mehreren Stunden meine Matrix auf doppelte Werte zu überprüfen und die Werte durch die -1 zu ersetzen, aber ich komme echt nicht mehr weiter.
Hat zufällig wer einen Tipp oder eine Lösung für mich ?
Ich bin für jede kleine Hilfe dankbar.
LG
Gute Frage, entweder erst die doppelten Zahlen durchstreichen und dann eine -1 hinschreiben oder alles neu hinschreiben und die doppelten durch -1 ersetzen.
Java:
publicclassMatrix{publicstaticint[][]readIn(int[][] size,int n,int m){int[][] b =newint[n][m];for(int i =0; i < n; i++){Out.println("Geben Sie Zeile "+ i +" ein: ");for(int j =0; j < m; j++){
b [i][j]=In.readInt();}}return b;}publicstaticint[][]compareMatrices(int[][] base,int n,int m){boolean compare =false;int[][] crossing =newint[n][m];for(int a =0; a < n; a++){for(int b =0; b < m; b++){for(int c = a+1; c < n; c++){for(int d = b+1; d < m; d++){if(base[a][b]== base[c][d]){
compare =true;}else{
compare =false;}if(!compare){
crossing[a][b]=(-1);
crossing[c][d]=(-1);}else{
crossing[a][b]= base[n][m];}}}}}return crossing;}publicstaticvoidmain(String[] args){Out.println("Bitte geben Sie die gewünschte Zeilenanzahl n der Matrix an: ");int n =In.readInt();Out.println("Bitte geben Sie die gewünschte Spaltenanzahl m der Matrix an: ");int m =In.readInt();int[][] size =newint[n][m];int[][] base=readIn(size, n, m);int[][] output =compareMatrices(base, n , m);for(int z =0; z < n; z++){Out.println();for(int y =0; y < m; y++){Out.print(output[z][y]+" ");}}}}
"Gute Frage, entweder erst die doppelten Zahlen durchstreichen und dann eine -1 hinschreiben oder alles neu hinschreiben und die doppelten durch -1 ersetzen."
hatte bearbeitet D:
Also ich würde im eingelesenen Array jeden Wert mit jedem vergleichen
Mindestens doppelte Werte streichen
Nur einmal verkommene Werte übernehmen und durchgestrichene durch -1 ersetzen
Das ist zu ungenau. Du musst etwas finden wie: ich schaue mir die erste Zahl der Matrix in Zelle (0,0) an, dort steht eine Zahl x. Dann ... dann... wenn... dann... wiederhole... usw.
Ich schaue mir die Zelle (0,0) an, vergleiche diese mit allen anderen Zellen der Matrix auf gleiche Werte
Wenn ein Wert gleich ist, wird dieser gestrichen, alle anderen Werte werden in einen neuen Array gespeichert.
Werte die gleich waren werden im neuen Array durch eine -1 ersetzt.
Dies wiederhole ich mit allen Zellen (n, m)
Also auf dem Blatt Papier würde ich es entweder löschen und direkt ersetzen
oder die doppelten Zahlen "streichen" und klein eine -1 vermerken um dann in diesem Fall beim neu Aufschreiben an den "gestrichenen" Stellen eine -1 zu schreiben
Du könntest ja vorher die Matrix kopieren und z. B. sagen: wenn sich Zelle (x,y) in Matrix A von Zelle (x,y) in Matrix B unterscheidet, dann wurde die Zelle in Matrix A gelöscht.
das macht Sinn
Leider ist bei meiner Methode compareMatrices aber ein Fehler dadurch, dass ich c = a+1 und d = b+1 gesetzt habe, aber ich weiß nicht wie ich das ändere, so das es dann funktioniert..
compare Zeugs hab ich weggemacht, war unnötig ka, was da mein Plan war
ich dachte wenn der wert nicht doppelt ist, wird in dem neuen array einfach der alte wert aus base gespeichert
da muss auf jeden fall base[a] right?
[CODE lang="java" title="hatte das jetzt so"]public static int[][] compareMatrices(int[][] base, int n, int m) {
int[][] crossing = new int[n][m];
for (int a = 0; a < n; a++) {
for (int b = 0; b < m; b++) {
for (int c = 0; c < n; c++) {
for (int d = 0; d < m; d++) {
if (base[a] == base[c][d]) {
crossing[a] = (-1);
crossing[c][d] = (-1);
} else {
crossing[a] = base[a];
}
}
}
}
}
return crossing;
}[/CODE]
Musst Du Dir nochmal anschauen, ich hab das nur runtergerotzt und heute ist nicht mein Tag. Das Problem in Deinem Code ist, dass Du im else-Zweig Dir ja immer wieder die Werte überschreibst.