Java - Evaluar polinomio -Divir y vencer

 
Vista:

Evaluar polinomio -Divir y vencer

Publicado por Jessica Carranza (2 intervenciones) el 28/11/2020 05:43:15
Buenas noches,

Por favor su ayuda, estoy evaluando el metodo f, pero al momento de ingresar a la for de evaluación me retorna un error:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Poli.f(Poli.java:27)
at Poli.main(Poli.java:44)

Les comparto mi codigo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import java.util.Scanner;
public class Poli{
 
    public static double f (double x){
    Scanner sc=new  Scanner(System.in);
    int n=0;
    double t;
        System.out.println("Digite el grado del polinomio: \t");
        n=sc.nextInt();
        n=n+1;
        double polinomio[] = new double [n];
        for(int i=0;i<n;i++){
           System.out.println("Digite el coeficiente de grado:\t"+i);
            polinomio[i]=sc.nextDouble();
           }
        for(int i=0;i<polinomio.length;i++){
            System.out.println(""+polinomio[i]);
           }
        double s;
        s=polinomio.length;
        int w=(int)s;
        System.out.println(""+w);
        System.out.println(""+x);
        double valor;
        valor = 0;
        for (int i = w ; i >= 0; i--){
    	valor = polinomio[i] + (x * valor);
    }
    return valor;
    }
    public static void main(String[] args) {
        Scanner sc=new  Scanner(System.in);
        double a,b,imax,iter,ea,em,test,va,vaold;
        iter=0;
        va=0;
        em=.01;
        imax=20;
 
        System.out.println("Digite el intervalo izquierdo: \t");
        a=sc.nextDouble();
        System.out.println("Digite el intervalo derecho: \t");
        b=sc.nextDouble();
 
        if (f(b)*f(a)>0){
            System.out.println("No hay ninguna raiz en ese intervalo");
        }else{
          do{
          iter++;
          vaold=va;
          va=(a+b)/2;
          ea=Math.abs((va-vaold)/va)*100;
          test=f(a)*f(va);
          if (test<0){
            b=va;
          } if (test>0){
            a=va;
          }else{
            ea=0;
              System.out.println("La raiz aproximada es: "+va);
          }
          }while(ea>em && iter<imax);
        }
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 2.152
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Evaluar polinomio -Divir y vencer

Publicado por Rodrigo (576 intervenciones) el 28/11/2020 06:02:40
Cuando recorres un arreglo de tamano n los indices van de 0 a n-1.
El for que tienes en la linea en donde ocurre la falla recorre el arreglo de n a 0. n no es un indice valido -> error.
Modifica el for para que comience en n-1.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Evaluar polinomio -Divir y vencer

Publicado por Jessica (2 intervenciones) el 28/11/2020 06:17:44
Muchas gracias Rodrigo, al momento de hacer el cambio, el codigo me queda cliclico en el ingreso del metodo f

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static double f (double x){
    Scanner sc=new  Scanner(System.in);
    int n=0;
    System.out.println("Digite el grado del polinomio: \t");
    n=sc.nextInt();
    n=n+1;
    double polinomio[] = new double [n];
    for(int i=0;i<polinomio.length;i++){
       System.out.println("Digite el coeficiente de grado:\t"+i);
        polinomio[i]=sc.nextDouble();
    }
 
    double s;
    s=polinomio.length;
    int w=(int)s;
    double valor;
    valor = 0;
    for (int i = w-1 ; i >= 0;i--){
    	valor = polinomio[i] + (x * valor);
    }
    return valor;
}

Porque puede suceder esto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.152
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Evaluar polinomio -Divir y vencer

Publicado por Rodrigo (576 intervenciones) el 28/11/2020 06:44:37
Aun no miro el detalle, seria bueno que encerraras tu codigo usando el boton </>Codigo que aparece cuando publicas cosas.
El codigo queda asi:

1
2
3
int main() {
 // ...
}

y no asi


int main() {
// ...
}

indentado el codigo es mas facil seguirlo y con numero de lineas es mas facil decir donde esta algo por corregir.

A que te refieres que "el codigo me queda cliclico" ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar