Ayuda con los threads

Caco
26 de Enero del 2009
Hola a todos,
Estoy haciendo un programa para que haga distintas operaciones con un polinomio, mi programa es el siguiente:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class prueba extends Polinomio{

public prueba(int grado) {
super(grado);
// TODO Auto-generated constructor stub
}

static Polinomio P,P1,P2,suma,resta,producto,escalar;
static int grado,evaluador;
static double evaluar;

public static int leerentero()throws IOException{
BufferedReader entrada=new BufferedReader(new InputStreamReader(System.in));
String cadena=entrada.readLine();
int grado=Integer.parseInt(cadena);
return(grado);

}

public static prueba leerpolinomio(int grado) throws IOException{
BufferedReader entrada=new BufferedReader(new InputStreamReader(System.in));
prueba P=new prueba(grado);

for(int i=0;i<=grado;i++){
int x=grado;

System.out.print("introduzca el producto de X elevado a "+x+":");
String cadena=entrada.readLine();
int prod=Integer.parseInt(cadena);
P.polinomio[x].producto=prod;
P.polinomio[x].exponente=x;
x--;
}
return P;
}

public static void main(String args[])throws IOException{

System.out.print("introduzca el grado del polinomio de mayor grado:");
grado=leerentero();
prueba P1=new prueba(grado);
prueba P2=new prueba(grado);
System.out.print("introduzca el evaluador:");
evaluador=leerentero();

P1=leerpolinomio(grado);
P2=leerpolinomio(grado);
suma=Polinomio.suma(P1,P2);
resta=Polinomio.resta(P1,P2);
producto=Polinomio.multiplicacion(P1,P2);
escalar=Polinomio.escalar(P1,P2);
evaluar=Polinomio.evaluar(P1,evaluador);
}

}


Me da varios errores al ejecutarlo, y yo creo que es por eso de los threads, no estoy muy seguro. Si alguien me pudiera ayudar se lo agradeceria mucho.
Los errores son estos:

Exception in thread "main" java.lang.NullPointerException
at polinomio.Polinomio.<init>(Polinomio.java:15)
at polinomio.prueba.<init>(prueba.java:10)
at polinomio.prueba.main(prueba.java:47)

MIRL
26 de Enero del 2009
Te está dando un error de puntero nulo, es decir, en algún momento, en tu clase Polinomio, estás intentando acceder a una posición inexistente de un array.
Repasa eso y tendrás la solución.

Por otro lado, en leerpolinomio() tienes dentro del para la asignación de grado a x... ¿estás seguro de que es eso lo que quieres?

Un saludo

Caco
26 de Enero del 2009
He estado mirando eso ke me dices, pero yo no veo el posible fallo, pongo la clase Polinomio para ver si tu lo puedes ver:

public abstract class Polinomio {

Termino polinomio[];
static Polinomio suma;
static Polinomio resta;
static Polinomio multiplicacion;
static Polinomio escalar;
int grado;

public Polinomio(int grado){
this.grado=grado;
this.polinomio[grado].producto=0;
this.polinomio[grado].exponente=0;
}

public static Polinomio suma(Polinomio P1,Polinomio P2){
for(int i=0;i<=P1.grado;i++){
for(int j=0;j<=P2.grado;j++){
if(P1.polinomio[i].exponente==P2.polinomio[j].exponente){
suma.polinomio[i]=Termino.Suma(P1.polinomio[i],P2.polinomio[j]);
}
}
}
return suma;
}


public static Polinomio resta(Polinomio P1,Polinomio P2){
for(int i=0;i<=P1.grado;i++){
for(int j=0;j<=P2.grado;j++){
if(P1.polinomio[i].exponente==P2.polinomio[j].exponente){
resta.polinomio[i].producto=Termino.Resta(P1.polinomio[i],P2.polinomio[j]);
}
}
}
return resta;

}

public static Polinomio multiplicacion(Polinomio P1,Polinomio P2){
int l=0;

multiplicacion.grado=P1.grado+P2.grado;
for(int i=0;i<=P1.grado;i++){
for(int j=0;j<=P2.grado;j++){
multiplicacion.polinomio[l]=Termino.Producto(P1.polinomio[i],P2.polinomio[j]);
l++;
}

}
return multiplicacion;
}

public static Polinomio escalar(Polinomio P1,Polinomio P2){
int l=0;
escalar.grado=P1.grado+P2.grado;
for(int i=0;i<=escalar.grado;i++){
escalar.polinomio[l]=Termino.Producto(P1.polinomio[i],P2.polinomio[i]);
l++;
}
return escalar;
}
public static double evaluar(Polinomio P1,int x){
double resul=0,resultado;

for(int i=0;i<=P1.grado;i++){
resultado=Termino.Evaluar(x,P1.polinomio[i]);
resul=resul+resultado;
}
return resul;
}


MIRL
26 de Enero del 2009
Bueno, el error que te da ahora sí que se ve muy simple.

Es un doble error en el constructor de la clase Polinomio.

1) Estás haciendo this.polinomio[grado] sin inicializar el array.

2) Estás accediendo a this.polinomio[grado].producto sin existir el objeto Termino necesario.


La solución:

public Polinomio(int grado){
this.grado=grado;
this.polinomio = new Termino[grado+1];
this.polinomio[grado] = new Termino();
this.polinomio[grado].producto=0;
this.polinomio[grado].exponente=0;
}

También puedes crearte un constructor de Termino tal que le pases el producto y el exponente directamente y quedaría así:

public Polinomio(int grado){
this.grado=grado;
this.polinomio = new Termino[grado+1];
this.polinomio[grado] = new Termino(producto, exponente);
}


Espero haberte ayudado ;)

El resto del código no lo he revisado así que si tienes algún otro problema ya sabes ^^

Un saludo!