Autor Tema: java Exception in thread "main" java.lang.NullPointerException  (Leído 6565 veces)

virgi1911

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Me sale éste error y no se como corregirlo Exception in thread "main" java.lang.NullPointerException

Código: [Seleccionar]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ej2_JuanLuis {


static int matriz[][];
static int numfilas;

public static void 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(" ");
}
}
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++){
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;
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);

}

}
« Última modificación: 21 de Septiembre 2014, 11:35 por Alex Rodríguez »

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:java
« Respuesta #1 en: 21 de Agosto 2012, 19:33 »
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  ;)

Código: [Seleccionar]
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);

}

}

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:java
« Respuesta #2 en: 08 de Septiembre 2012, 11:01 »
¿Lo has probado?

virgi1911

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:java
« Respuesta #3 en: 08 de Septiembre 2012, 11:11 »
Si lo he probado y fallababan algunas cosas, ahora ya esta bien

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".