ho risolto cambiando le dimensioni degli array riga e colonna
codice:
int[] colonna=new int[row];
int[] riga=new int[col];
anzichè
codice:
int[] colonna=new int[col];
int[] riga=new int[row];
Posto tutto il codice. Magari può essere di aiuto.
codice:
int row=Input.getInt("Numero di righe della matrice: ");
int col=Input.getInt("Numero di colonne della matrice: ");
int[][] matrice = new int[row][col];
int[][] newMatrice = new int[row][col];
int[] riga = new int[col];
int[] colonna = new int[row];
int massimoElemento = matrice[0][0];
int maxIndexRow = 0, maxIndexCol = 0;
//Assegno alla matrice numeri generati casualmente da 1 a 100 e la stampo.
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
matrice[i][j] = 1 + (int) (Math.random() * 100);
System.out.print(matrice[i][j] + "\t");
}
System.out.println();
}
//Scorro tutti gli elementi alla ricerca dell'elemento massimo e me lo salvo in una variabile.
//Mi salvo anche la sua posizione.
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (matrice[i][j] > massimoElemento) {
massimoElemento = matrice[i][j];
maxIndexRow = i;
maxIndexCol = j;
}
}
}
System.out.println("\nL'elemento massimo e': " + massimoElemento);
//Restituisco maxIndexRow+1 e maxIndexCol+1 perchè in questo modo il primo elemento della
//matrice è [1,1] e non [0,0]. E' più per comodità.
System.out.println("e si trova in posizione " + (maxIndexRow + 1) + " " + (maxIndexCol + 1));
//Se l'elemento massimo non si trova nella riga 0 (la prima riga), mi salvo gli elementi
//della riga dove è presente l'elemento massimo in un vettore di appoggio.
if (maxIndexRow != 0) {
for (int i = 0; i < col; i++) {
riga[i] = matrice[maxIndexRow][i];
}
}
//Copio la matrice originale nella seconda matrice.
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
newMatrice[i][j] = matrice[i][j];
}
}
//Se l'elemento massimo non si trova nella riga 0 (la prima riga), eseguo il ciclo for iterando la colonna i-esima
//e copio nella riga [maxIndexRow] gli elementi presenti nella riga[0], poi copio nella prima riga della nuova matrice
//i valori presenti nell'array riga
if (maxIndexRow != 0) {
for (int i = 0; i < col; i++) {
newMatrice[maxIndexRow][i] = newMatrice[0][i];
newMatrice[0][i] = riga[i];
}
}
//Se l'elemento massimo non si trova nella colonna 0 (la prima colonna), mi salvo gli elementi
//della colonna dove è presente l'elemento massimo in un vettore di appoggio.
if (maxIndexCol != 0) {
for (int i = 0; i < row; i++) {
colonna[i] = newMatrice[i][maxIndexCol];
}
}
//Se l'elemento massimo non si trova nella colonna 0 (la prima colonna), eseguo il ciclo for iterando la riga i-esima
//e copio nella colonna [maxIndexRow] gli elementi presenti nella colonna[0], poi copio nella prima colonna della nuova matrice
//i valori presenti nell'array colonna
if (maxIndexCol != 0) {
for (int i = 0; i < row; i++) {
newMatrice[i][maxIndexCol] = newMatrice[i][0];
newMatrice[i][0] = colonna[i];
}
}
//Stampo la matrice che ottengo dopo gli scambi.
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
System.out.print("" + newMatrice[i][j] + "\t");
}
System.out.println();
}