Foro de elhacker.net

Programación => Java => Mensaje iniciado por: mardres en 8 Mayo 2007, 03:02 am



Título: ¿POR QUE NO ENTRA AL "FOR"? _ Arreglos + JAVA
Publicado por: mardres en 8 Mayo 2007, 03:02 am
Estoy creando un programa el cual con ayuda de un arreglo bidimencional imprime un triangulo de pascal.

Ejemplo:Si en la ventana se digita el valor 6 esto generaria una salida de la siguiente manera:
Código:
         1  0  0  0  0  0 
         1  1  0  0  0  0
         1  2  1  0  0  0
         1  3  3  1  0  0
         1  4  6  4  1  0
         1  5 10 10 5  1

Pero en vez de esto me genera lo siguiente:
Código:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
    at TrianguloPascal.main(TrianguloPascal.java:26)

Aqui les coloco el codigo para ver si encuentran el error y me dicen donde esta ya que yo ya me canse de buscar y a la unica Conclusión a la que llego es que en la linea en la cual coloco pascal[i+1][j+1]=pascal[j]+pascal[j+1];no entra al FOR.

Código:
import javax.swing.JOptionPane;

public class TrianguloPascal {

    public TrianguloPascal() {
    }
    public static void main (String args[]) {
    String texto;
    texto="";
    int max=Integer.parseInt(JOptionPane.showInputDialog(null, "Digite la dimencion del triangulo de pascal; "));
    int [][] pascal=new int [max][max];
   
    for(int i=0;i<max;i++) {
    for(int j=0;j<max;j++) {
    if(j==0) {
    pascal[i][j]=1;
    }
    pascal[i+1][j+1]=pascal[i][j]+pascal[i][j+1];
    }
    }
    for(int i=0;i<pascal.length;i++) {
    for(int j=0;j<pascal.length;j++) {
    texto+=pascal[i][j]+ "\t";
    }
    texto+="\n";
    }
    System.out.print(texto);
    }   
  }
[/size]


Título: Re: ¿POR QUE NO ENTRA AL "FOR"? _ Arreglos + JAVA
Publicado por: Crack_X en 8 Mayo 2007, 05:08 am
Te explico lo que sucede. Cuando llegas al ultimo ciclo del loop, supongamos que max es 4, el ultimo ciclo sera con i o j = 3

Código:
pascal[i+1][j+1]=pascal[i][j]+pascal[i][j+1];

Eso intenta acceder a 3+1 = 4, y eso el maximo que no existe. Prueba poniendo en el loop max-1. O con un if a ver si i+1 o j+1 no sea igual a max.


Título: Re: ¿POR QUE NO ENTRA AL "FOR"? _ Arreglos + JAVA
Publicado por: Ragnarok en 8 Mayo 2007, 18:01 pm
Código:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
    at TrianguloPascal.main(TrianguloPascal.java:26)

En la línea 26 salta una excepción porque el índice con el que intentas acceder a un array (6) está fuera de los límites.

Los errores que da java son de los mejores que te puedes encontrar.


Título: Re: ¿POR QUE NO ENTRA AL "FOR"? _ Arreglos + JAVA
Publicado por: ana89bel en 13 Mayo 2009, 23:45 pm
HOLA ESTE MIRA PUES YO TENGO ESTE KODIGO PERO LO UNIKO que ME FALTA ES que ME LO IMPRIMA EN FORMA DE TRIANGULO ESPERO que TE AYUDE PERO SI ALGUIEN ME PUEDE DECIR KOMO SE LO AGREDASERE ATTE UNA NOVATITA EN JAVA :-\

import javax.swing.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TrianguloPascal extends JFrame implements ActionListener
 {
    Label      et1     = new Label("De que numero: ");   
    TextField  num   = new TextField();
    Button     botonCalcular = new Button("Calcular");
    Button     botonLimpiar  = new Button("Limpiar");
   Button     botonCerrar   = new Button("Cerrar");
   TextArea resultado = new TextArea();
 public TrianguloPascal()
    {
    // Establesco el nombre en la barra de titulo
   super("---TRIANGULO DE PASCAL---");
      // Se establece que el Administrador de Aspecto sea nulo
    this.setLayout(new BorderLayout ());
     this.setLayout(null);
   
   // Establesco los parametros del TextArea

   resultado.setBackground(Color.pink);
   resultado.setFont(new Font("Tahoma",Font.PLAIN,12));
   resultado.setForeground(Color.black);// Letra del TextArea
   // Se establecen posicion y tamaño del Frame y de los componentes
    this.setBounds(220,220,700,500);//Esto es el frame
   
   et1.setBounds(20,40,120,20);
   num.setBounds(150,40,160,20);
   resultado.setBounds(50,100,590,300);
   botonCalcular.setBounds(80,450,100,30);
   botonLimpiar.setBounds(220,450,100,30);
   botonCerrar.setBounds(360,450,100,30);
   
      this.add(et1);
      this.add(num);
   
   this.add(resultado);
      this.add(botonCalcular);
      this.add(botonLimpiar);
      this.add(botonCerrar);


      botonCalcular.addActionListener(this);
      botonLimpiar.addActionListener(this);
      botonCerrar.addActionListener(this);
      
            this.show();
            
      addWindowListener(new WindowAdapter()
      {
         public void windowClosing(WindowEvent d)
          {
             System.exit(0);
          }});
      
      

    }            
   public void actionPerformed(ActionEvent ev)
   {
      if(ev.getSource() == botonCerrar)
      {
         this.dispose();
         System.exit(0);
      }
   
    if(ev.getSource() == botonLimpiar)
      {

         num.setText("");
         resultado.setText("");
      }
      
      
     if(ev.getSource ()==botonCalcular)
     {
        int w=0;
        try
        {
        w=   Integer.parseInt(num.getText());
        }
        catch (Exception e)
        {
           w=0;
   
        }
        //para el calculo
        
     int[] a = new int[0]; 
           for (int i = 1 ; i <=w +1 ; i++)
                 { 
                    
                  int[] x = new int;
                 for (int j = 0; j < i; j++)
                     {
                     if(j==0 || j== (i-1) )
                         {    
                    x[j]=1;
                          }
                        else {
                           
                            x[j]=a[j]+a[j-1];
                        
                            }
            resultado.append( " "+x[j]+" ");
                              }
                            a = x;
                                 
                resultado.append("\n");
                
                
                
              }         
    }
      
   }//fin de action event   
   
public static void main(String args[])
{
new TrianguloPascal();   // Se crea un objeto anonimo (Sin referencia)
}
}


Título: Re: ¿POR QUE NO ENTRA AL "FOR"? _ Arreglos + JAVA
Publicado por: Amerikano|Cls en 14 Mayo 2009, 18:35 pm
Bueno primero no escribas en mayusculas que nadie te esta isultando  :-[, y segndo mete el code en la etiqueta java.

salu2