12/10/2013, 10:58
|
| | Fecha de Ingreso: octubre-2013 Ubicación: Valencia
Mensajes: 5
Antigüedad: 11 años, 2 meses Puntos: 0 | |
Programa recursivo en java! Ayuda con este codigo:
A ver resulta que me han mandado un programa el cual haga tres metodos recursivos uno el de la raiz cuadrada entera otro un metodo que diga si una matriz es simetrica o no y otro que diga si la matriz asociada a la raiz cuadrada entera es simetrica o no. Pues a ver mi problema esta en el tercer metodo que pienso que no tiene sentido hacerlo recursivo pero esque en el enunciado pone que tienen que ser recursivos lo metodos entonces alguien me puede ayudar o sugerir si se puede hacer recursivo o no ?
import java.util.Scanner;
public class Main implements RaizEnteraMatrizSimetricaIF {
// Inicializo la variable r
private static int r = 0;
private int iEsSim=0;
private int jEsSim=0;
public static void main(String[] args) {
// 1. Leo el tamaño de la matriz
//2. Almaceno los valores de los elementos de la matriz
Scanner leer = new Scanner(System.in);
int fila = leer.nextInt();
int[][] matriz = new int[fila][fila];
for (int i = 0; i < fila; i++) {
for (int j = 0; j < fila; j++) {
matriz[i][j] = leer.nextInt();
}
}
leer.close();
// 3.Creo un objeto de la clase Main para llamar al metodo
Main main = new Main();
//if( main.esSimetricaSuRaizCuadradaEntera(matriz)==true ){
if (main.esSimetrica(matriz) == true) {
System.out.println("SIMETRICA");
System.out.println("");
} else {
System.out.println("NO SIMETRICA");
System.out.println("");
}
}
// Metodo que calcula la raiz cuadrada de entera de un numero
public int raizCuadradaEntera(int n) {
//Precondicion n>=0
if (n >= 0) {
if (r == 0) {
r = n;
}
}
int result;
int nCuad = n * n; //equivale a Math.pow(r,2).
int nMas1Cuad = (n + 1) * (n + 1); // equivale a Math.pow(r+1,2).
if ((nCuad <= r) && (r < nMas1Cuad)) {
result = n;
r = 0;
} else {
//Llama a la funcion otra vez
result = raizCuadradaEntera(n - 1);
}
return result;
}
//Metodo para ver si es simetrica
public boolean esSimetrica(int[][] m) {
boolean result = m[iEsSim][jEsSim] == m[jEsSim][iEsSim];
if (result) {
jEsSim++;
if (jEsSim == m[iEsSim].length) {
iEsSim++;
jEsSim = 0;
}
if (iEsSim < m.length) {
result = esSimetrica(m);
}
}
return result;
}
//Metodo esSimetricaSuRaizCuadradaEntera
public boolean esSimetricaSuRaizCuadradaEntera(int[][] m) {
// Declaracion de la variable booleana para ver si se cumple
boolean secumple = true;
//Comprobacion de precondicion
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m.length; j++) {
if (secumple) {
secumple = m[i][j] >= 0;
}
}
}
///////////////////////////////
if (secumple) {
//Creamos la matriz de cuadrados
//La recorremos
for (int l = 0; l < m.length; l++) {
for (int h = 0; h < m.length; h++) {
//A continuación hago una llamada al metodo raizcuadradaEntera que me devolvera la raiz cuadrada de cada elemento de la matriz
// y se asigna a la matriz de cuadrados o de raiz cuadrada
m[l][h] = raizCuadradaEntera(m[l][h]);
}
}
} else {
//Si no se cumple la pre, devolvemos False
return false;
}
//Llamo al metodo esSimetrica que devolvera true o false y a la vez ese true o false sera devuelto por el metodo
//actualmente implementado
return esSimetrica(m);
}
} |