/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

cómo devolver un arreglo desde un método

 
      Índice del Foro elrincondelc.com -> Java
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
gjbr



Registrado: 10 Nov 2009
Mensajes: 1

MensajePublicado: 10/11/2009 1:31 am
Título: cómo devolver un arreglo desde un método

hola a todos, estoy confrontando un problema que no he podido solventar. Estoy intentado crear un método que devuelva un arreglo bidimensional para utilizarlo dentro del cuerpo de main. El ensayo que he estado intentando es el siguiente:

import java.util.Scanner; //carga la clase Scanner

public class ensayoI {
static Scanner entrada = new Scanner(System.in);
static int n;

public static void main(String args[]) {
MATRIZIDENTIDAD MI = new MATRIZIDENTIDAD();
double I[][] = MI.matriz();

System.out.print("Orden de la matriz: ");
n = entrada.nextInt(); // Lee un entero.

for(int fila = 1; fila <= n; ++fila) {
for(int col = 1; col <= n; ++col) {
System.out.printf("\t %.2f ", I[fila][col]);
System.out.println("");
}
} // cierre del primer ciclo for.

} // main

static class MATRIZIDENTIDAD {
public double[][] matriz() {
double[][] I = new double[10][10];

for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
if(i == j) {
I[i][j] = 1.0;
}
else {
I[i][j] = 0.0;
}
}
}
return I;
}
} //MATRIZIDENTIDAD
} // CLASE ENSAYO1

Lo que intento hacer es retornar a main una matriz unitaria bidimensional, para luego realizar otras operaciones. He seguido las instrucciones del libro JAVA2 de Steven Holzner, sin resultados favorables. El ciclo anidado dentro de "main" es para poder visualizar si el resultado esperado es el correcto. Me gustaría que me ayudaran a superar esta dificultad.

Saludos
Gustavo
Volver arriba
grandzam



Registrado: 10 Feb 2005
Mensajes: 182
Ubicación: Guadalupe, Zacatecas, México

MensajePublicado: 05/12/2009 12:00 am
Título:

Hola tu codigo funciona bien, es solo que como estas usando una clase interna: static class MATRIZIDENTIDAD y pues n esta declarada en la clase publica ensayoI pero aun no tenía valor ya que lo toma hasta:
Código:

n = entrada.nextInt(); // Lee un entero.


Y bueno hice otro cambio para que te imprima la matriz de manera correcta, también era cueston de solo moverla, jeje:

Código:
System.out.println("");


Bueno enseguida te dejo aquí el programa completo, tiene comentarios de donde le movi así que revisalo bien:

Código:
import java.util.Scanner; //carga la clase Scanner

public class ensayoI {
    static Scanner entrada = new Scanner(System.in);
    static int n;

    public static void main(String args[]) {
   MATRIZIDENTIDAD MI = new MATRIZIDENTIDAD();   

   System.out.print("Orden de la matriz: ");
   n = entrada.nextInt(); // Lee un entero.

   double I[][] = MI.matriz();  //Cambie de orden, estaba abajo de la declaración MATRIZENTIDAD MI

   for(int fila = 1; fila <= n; ++fila) {
       for(int col = 1; col <= n; ++col) {
      System.out.printf("\t %.2f ", I[fila][col]);   
       }
       System.out.println(""); //Movi esta línea porque en el for anterior hacía que se imprimieran todos los números hacia abajo y no en forma de matriz
   } // cierre del primer ciclo for.

    } // main

    static class MATRIZIDENTIDAD {
   public double[][] matriz() {
       double[][] I = new double[10][10];

       for(int i = 1; i <= n; i++) {
      for(int j = 1; j <= n; j++) {
          if(i == j) {
         I[i][j] = 1.0;
          }
          else {
         I[i][j] = 0.0;
          }
      }
       }
       return I;
   }
    } //MATRIZIDENTIDAD
} // CLASE ENSAYO1


e-proyect.com
Volver arriba
scanfernan



Registrado: 15 Ago 2005
Mensajes: 149
Ubicación: PUEBLA,PUE

MensajePublicado: 08/12/2009 7:20 pm
Título:

pues de entrada, el problema que tienes es que los arreglos no comienzan en 1, comienzan en 0.
entonces se te salen de memoria los indices con esta forma
Código:

for(int i = 1; i <= n; i++) {
      for(int j = 1; j <= n; j++) {
          if(i == j) {
         I[i][j] = 1.0;
          }
          else {
         I[i][j] = 0.0;
          }
      }
       }
 

lo correcto seria
Código:
for(int i = 0; i < n; i++) {
      for(int j = 0; j < n; j++) {
          if(i == j) {
         I[i][j] = 1.0;
          }
          else {
         I[i][j] = 0.0;
          }
      }
       }

_________________
- Si el Debuggear es el proceso de remover Bugs, entonces el programar debe ser el proceso de ponerlos.
Volver arriba
      Índice del Foro elrincondelc.com -> Java
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com