¿POR QUE NO ENTRA AL "FOR"? _ Arreglos + JAVA

Iniciado por mardres, 8 Mayo 2007, 03:02 AM

0 Miembros y 1 Visitante están viendo este tema.

mardres

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:

         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:
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.

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]

Crack_X

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

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.
Shit loads of money spend to show us wrong from right. Say no to war


Yasser Has Things To Say
WarZone

Ragnarok

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.
No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones

ana89bel

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)
}
}

Amerikano|Cls

Bueno primero no escribas en mayusculas que nadie te esta isultando  :-[, y segndo mete el code en la etiqueta java.

salu2




Mi blog:
http://amerikanocls.blogspot.com