Hola virgi, tú has definido matriz como atributo de la clase. Si después lo pasas como parámetro de un método, aunque tú establezcas valores para matriz no te los establece para el atributo de la clase, sino para el parámetro que has nombrado igual.
Hay muchas soluciones posibles, una sería el uso de this.matriz en lugar de matriz; yo he planteado una basada en hacer que cuando invocas el método generarmatrizymostrar se devuelva una matriz de forma que puedas establecer así el valor del atributo de la clase:
matriz = generarmatrizymostrar(matriz);
Por otro lado, tener en un mismo método generarmatrizymostrar no es muy adecuado, lo más lógico es tener un método para generar la matriz y otro para mostrar.
Aquí te dejo el código con algún cambio que al menos "parece que empieza a hacer algo". Pruébalo y a ver si puedes ir avanzando, si no aquí estamos
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ej2_JuanLuis {
static int matriz[][];
static int numfilas;
public static int[][] generarmatrizymostrar(int matriz[][]){
int valor=0,signo=0;
numfilas = (int)(Math.random()*9+2);
matriz=new int[numfilas][numfilas];
//generamos la matriz cuadrada
for(int i=0;i<numfilas;i++){
for (int j=0;j>numfilas;j++){
valor=(int)(Math.random()*6);
signo=(int)(Math.random()*2);
if(signo==1){
valor=valor*(-1);
}
}
}
//Mostramos la matriz
for(int i=0;i<numfilas;i++){
for(int j=0;j<numfilas;j++){
System.out.print(matriz[i][j]+" ");
}
System.out.println(" ");
}
return matriz;
}
public static void mostrarsuma(int matriz[][]){
//mostramos la suma de cada fila
for(int f=0;f<numfilas;f++){
int suma=0;
for(int c=0;c<numfilas;c++){
//JUSTO EN ESTA LÍNEA DE AQUÍ DEBAJO SE QUEDA COLGADO: NO HABÍAS DEFINIDO MATRIZ y matriz[f][c] no era una referencia válida
suma=suma+matriz[f][c];
}
//hemos terminado de sumas la fila"f"
System.out.println("El resultado de la fila "+f+"es "+suma);
}
for(int c=0;c<numfilas;c++){
int suma = 0;
for(int f=0;f<numfilas;f++){
suma=suma+matriz[f][c];
}
//hemos terminado de sumar la columna "c"
System.out.println("El resultado de la columa "+c+"es"+suma);
}
}
public static void mostrarDprincialysuma(int matriz[][]){
int suma=0;
System.out.println("La diagonal principal es:");
for(int i=0;i<numfilas;i++){
suma=suma+matriz[i][i];
System.out.println(matriz[i][i]);
}
System.out.println("El resultado de la Diagonal principal es "+suma);
}
public static void cambiarsignoymostrar(int matriz[][]){
System.out.println("La matriz con el signo cambiado es");
for(int f=0;f<numfilas;f++){
for(int c=0;c<numfilas;c++){
matriz[f][c]=matriz[f][c]*(-1);
System.out.print(matriz[f][c]+" ");
}
System.out.println(" ");
}
}
public static void sustituirymostrar(int matriz[][],int valorO,int valorN){
System.out.println("La nueva matriz con el cambio"+valorO+"->"+valorN+"es");
for(int f=0;f<numfilas;f++){
for(int c=0;c<numfilas;c++){
if(matriz[f][c]==valorO){
matriz[f][c]=valorN;
}
System.out.print(matriz[f][c]+" ");
}
System.out.println(" ");
}
}
public static void main(String[]args)throws IOException {
int valorO;
int valorN=0;
matriz = generarmatrizymostrar(matriz);
mostrarsuma(matriz);
mostrarDprincialysuma(matriz);
cambiarsignoymostrar(matriz);
System.out.println(" Valor a sustituir ");
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader buff= new BufferedReader(isr);
valorO = Integer.parseInt(buff.readLine());//valorO =valor original
System.out.println("Nuevo valor ");
valorN=Integer.parseInt(buff.readLine());//valorN=valor nuevo
sustituirymostrar(matriz,valorO,valorN);
}
}