Foro de elhacker.net

Programación => Java => Mensaje iniciado por: novalida en 21 Agosto 2009, 19:23 pm



Título: Problema con secuencia de escape Ctrl + z
Publicado por: novalida en 21 Agosto 2009, 19:23 pm
Buenas....

tengo el siguiente código:

Código:
import java.io.*;
public class CMediana {

public static void main(String[]args)
{

int temp = 0;
int i = 0;
int nElementos = 0;

final char eof = (char)-1;


do{
System.out.print("Cuántos elementos tendrá la serie? ");
nElementos = Leer.datoInt();
}while(nElementos < 1);


int []m = new int [nElementos];

System.out.println("Introduzca una serie de números");
System.out.println("Para salir pulse [Ctrl][z]");

do{
System.out.print("Número " + (i+1) + ": ");
m[i] = Leer.datoInt();
i++;
}while(i < m.length && m[i] != eof);
}
}

La clase Leer es una clase creada para leer los datos de tipo "int".

El problema es que cuando puslo Ctrl + z el resultado es el siguiente (por ejemplo):

Cuántos elementos tendrá la serie? 6
Introduzca una serie de números
Para salir pulse [Ctrl][z]
Número 1: 23
Número 2: 54
Número 3: 2
Número 4: Número 5: Número 6:

El resultado que me gustaría que fuese al pular la secuencia de salida del programa es el siguiente:

Cuántos elementos tendrá la serie? 6
Introduzca una serie de números
Para salir pulse [Ctrl][z]
Número 1: 23
Número 2: 54
Número 3: 2
Número 4:

¿Alguien me puede ayudar por favor??? :)


Título: Re: Problema con secuencia de escape Ctrl + z
Publicado por: 1mpuls0 en 22 Agosto 2009, 01:47 am
Citar
Número 4: Número 5: Número 6:

Por eso que te imprime, pienso que te hace falta "\n" (nueva línea) solo que no sé bien en donde.
Cómo has logrado que el programa termine?? (ctrl+z)?? como haces eso??
(Creo que eso requiere programacion orientada por eventos, en este caso seria al pulsar las teclas Control+z).

De todos modos hice esto espero que sirva de algo. Modifiqué un poco tu clase  ;D

Código:
import java.io.*;

public class CMediana {

public static void main(String[]args)throws IOException
{
BufferedReader B = new BufferedReader(new InputStreamReader(System.in));
   
int temp = 0;
int i = 0;
int nElementos = 0;

final char z = (char)122;

do{
System.out.print("Cuántos elementos tendrá la serie? ");
String e = B.readLine();
if(esEntero(e))
nElementos = Integer.parseInt(e);
}while(nElementos < 1);


int []m = new int [nElementos];

System.out.println("Introduzca una serie de números");
System.out.println("Para salir pulse [Ctrl][z]");

do{
System.out.print("Número " + (i+1) + ": ");
String c = B.readLine();
if(esEntero(c))
{
m[i] = Integer.parseInt(c);
}
else if(c.charAt(0)==z || !esEntero(c) ){
for(int j=i+1; j<m.length; j++)
System.out.println("Número " + (j+1) + ": ");
i = m.length;
}
i++;
}while(i < m.length && m[i] != z);
}

public static boolean esEntero(String c)
{
try
{
Integer.parseInt(c);
return true;
}catch(Exception e)
{
return false;
}
}
}

Bueno en este caso reconoce la z o cualquier caracter(si asi lo deseas). Y al hacer esto te queda así.

Código:
Cuántos elementos tendrá la serie? 6
Introduzca una serie de números
Para salir pulse [Ctrl][z]
Número 1: 1
Número 2: 2
Número 3: z
Número 4:
Número 5:
Número 6:

Process completed.

Saludos