Per carità! L'indentazione, ti prego! Comunque ti commento il codice riga per riga
codice:
public static int escursione(int[][] M,int i) {
for (i=0;i<M.length;i++) {
for (int j=0;j<M[i].length;j++) { //non c'è bisogno che scrivi M[i], va bene anche M[0]
int max=v[0]; //dichiari il massimo ad ogni ciclo e l'inizializzi a v[0]? In questo caso
//ad ogni iterazione il massimo varrà sempre v[0], qualunque esso sia.
//affinché funzioni devi inizializzare il massimo fuori dalla matrice
//c'è anche da dire che il vettore v non esiste, forse intendevi M[i][0] (cioè la riga i della
//matrice nella colonna 0)
if (v[i] > max) { //anche qua il vettore v non esiste, e se non te ne sei accorta non stai
//iterando un bel niente, hai dichiarato la variabile nel for come j, i invece è la riga che ti viene
// passata come parametro, dunque sostituisci v[i] con M[i][j]
max=v[i]; //come sopra, sostituisci v[i] con M[i][j]
for (int x=0;x<v.length;x++) { //ma da dove te lo sei uscito fuori sto v?
int min=v[0];
if (v[x] < min) {
min=v[x]; //tutto come sopra
return max-min; //metti max-min tra parentesi in quanto è un operazione algebrica, dunque
//return (max-min)
//in più se non te ne sei accorta il return è dentro l'if, chiudi l'if e tutte le altre parentesi graffe
//prima di ritornare l'escursione
}
}
}
}
}
}
}//INDENTAZIONE! E' UN MACELLO!
public static int [] filtraEscursioni (int [] [] M,int k) {
int [] v=new int[M.length]; //finalmente ci siamo con la dichiarazione del vettore
int count=0;
for (int i=0;i<M.length;i++) {
for (int j=0;j<M[i].length;j++) {
if (M[i][j] <= k) {
count++;
if (count == 0) { //hai incrementato la variabile count, dunque non sarà MAI uguale a 0
v[i]=M[i][j]; } //in questo caso v[i] conterrà l'ultimo valore della riga M[i], cosa volevi fare?
return v;
}
}
}
}
}
Avrei anche potuto svolgere l'esercizio al posto tuo, ma non ti servirebbe a nulla.
Prova a correggerlo come ti ho suggerito.