Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Error al volver a empezar el programa

public static void main(String[] args) throws IOException {
demanarParametres();
System.out.println("################################");
while (!arxCorrecte) {
comprovarArxius();
}
imprimirParametres();

esCorrecte();

switch (correcte) {
case 1:
cridarBat(param1, param2, param3);
break;
case 2:
main(args);
break;

default:
System.out.println("No es una opción.");
esCorrecte();
break;
}
}


private static void esCorrecte() {
System.out.println("Es correcto? Y/N");
String ifCorrecte = scanner.next();
ifCorrecte = ifCorrecte.toUpperCase(); //convertir a mayusculas
correcte = 0;

if ("Y".equals(ifCorrecte)) {
correcte = 1;
} else {
if ("N".equals(ifCorrecte)) {
correcte = 2;
}
}
}

private static void demanarParametres() {

System.out.print("Escribe parametro 1:");
param1 = scanner.nextLine();
System.out.print("Escribe parametro 2:");
param2 = scanner.nextLine();
System.out.print("Escribe parametro 3:");
param3 = scanner.nextLine() ;
System.out.println("Escribe parametro 4:");
param4 = scanner.nextLine();

validarParametres();

}


El problema es que si pongo “n” en esCorrecte() empieza todo el proceso otra vez, pero en el momento de ir pidiendo los escaners en demanarParametres() no me deja poner el primero, ya me salta automaticamente al segundo:

Escribe parametro 1: Escribe parametro 2: Y AQUI ME PIDE EL PARAM2

junio 18, 2012 | Unregistered Commenterjosep

Si no pones el código completo, es imposible comprobarlo.

junio 19, 2012 | Registered Commenterchoces

import java.io.IOException;
import java.util.Scanner;

public class main {
static Scanner scanner = new Scanner(System.in);
static String param1 = "";
static String param2 = "";
static String param3 = "";
static String param4 = "";

static int correcte = 0;
static String dirActual;
static boolean arxCorrecte = false;

public static void main(String[] args) throws IOException {
demanarParametres();
System.out.println("################################");

esCorrecte();

switch (correcte) {
case 1:
System.out.println("funciona");
break;
case 2:
main(args);
break;

default:
System.out.println("No es una opción.");
esCorrecte();
break;
}
}

private static void esCorrecte() {
System.out.println("Es correcto? Y/N");
String ifCorrecte = scanner.next();
ifCorrecte = ifCorrecte.toUpperCase(); // convertir a mayusculas
correcte = 0;

if ("Y".equals(ifCorrecte)) {
correcte = 1;
} else {
if ("N".equals(ifCorrecte)) {
correcte = 2;
}
}
}

private static void demanarParametres() {

System.out.print("Escribe parametro 1:");
param1 = scanner.nextLine();
System.out.print("Escribe parametro 2:");
param2 = scanner.nextLine();
System.out.print("Escribe parametro 3:");
param3 = scanner.nextLine();
System.out.println("Escribe parametro 4:");
param4 = scanner.nextLine();
}
}


Este es el codigo simplificado, aunque también tengo el problema. En el anterior solo habia puesto lo que no funcionaba.

junio 19, 2012 | Registered Commenterjosepalos

En el caso "N" debes reinicializar el scanner, no reutilizar la instancia existente.
Aparte de eso, llamar a la clase "main" con el mismo nombre del método, y sin comenzar con una mayúscula, si bien no es un error en términos de compilación, si lo es en el hecho de que no respeta las convenciones de Java sobre clases.
Tampoco me parece una buena idea llamar al método main de manera recursiva como haces.

junio 19, 2012 | Registered Commenterchoces

Lo he solucionado pidiendo los parametros con JFileChooser i acceptando con JOptionPane. Lo de la clase main en minuscula ha sido un fallo, y sobre llamar a la clase main de manera reclusiva que alternativa me recomiendas?

junio 19, 2012 | Registered Commenterjosepalos

Lo mejor para un método main es usarlo únicamente para inicializar otras clases necesarias para que la aplicación "haga algo". Cuanto más breve, mejor.

La lógica de la aplicación debería desarrollarse en esas otras clases.
Es muy habitual, incluso en complejas aplicaciones gráficas, que el main solamente inicialice el frame principal de la aplicación.

En tu caso, crearía una o varias clases adicionales, en archivos separados, donde incluiría todas las decisiones lógicas sobre lo que quieres conseguir, y en la clase donde está main, solamente la inicialización de la clase que realmente es el origen de toda la aplicación, y de la que dependen todas las demás clases.

junio 19, 2012 | Registered Commenterchoces