Ayuda con algoritmo en java

Iniciado por marrison, 29 Marzo 2015, 18:17 PM

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

marrison

Hola buenas, estoy aprendiendo a programar en java y tengo un problemilla....  :silbar:

Tengo un fichero del estilo:

1001 1
2001 2
3001 3


El usuario introduce un numero cualquiera y el algoritmo busca en que intervalo esta, si esta entre 0 y 1001 devuelve un 1, si esta entre 1001 y 2001 devuelve un 2 y asi...

Tengo que leer los datos del fichero con la clase scanner pero no encuentro la forma...

Hay que tener en cuenta que los valores pueden cambiar, se pueden introducir mas o menos...

Alguna ayuda?

Muchas gracias de antemano, un saludo!
"Es genial trabajar con ordenadores. No discuten, lo recuerdan todo y no se beben tu cerveza" (Paul Leary)

"Controlar la complejidad es la esencia de la programación" (Brian Kernigan)

"Primero resuelve el problema. Entonces, escribe el código" (John Johnson)

"640K deberían ser suficientes para todo el mundo" (Bill Gates, 1981)

Usuario Invitado

#1
Hola,

Prueba lo siguiente:

Código (java) [Seleccionar]
public Integer getNumberByRange(String directory, String fileName, Integer number) {
Integer numberToReturn = null;
Path path = Paths.get(directory, fileName);
Charset charset = Charset.forName("UTF-8");
try {
// lee todas las lineas del fichero
List<String> lines = Files.readAllLines(path, charset);

Integer temporal = 0;
for (String line : lines) {
// divide la linea separando por espacios
String[] tokens = line.split(" ");
// asumimos solo los dos primeros lugares (rango - numero a devolver)
Integer range = Integer.parseInt(tokens[0]);
if(number > temporal && number < range)
numberToReturn = Integer.parseInt(tokens[1]);
temporal = range,
}
} catch (IOException e) {
logger.warning(e.getMessage());
} catch (NumberFormatExceptio e2) {
logger.warning(e2.getMessage());
}

return numberToReturn;
}


Donde temporal es el número anterior. Itera rango por rango, verifica que el número ingresado sea mayor a temporal (número anterior) y que sea menor al rango, si es así, guarda el número a devolver. Finalmente, lo retorna.

Llamas al método así:

Código (java) [Seleccionar]
objeto.getNumberByRange("D://prueba", "rangos.txt", 2580);


Saludos.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

marrison

Gracias, asi mas o menos me hago una idea, pero necesito que sea con un Scanner... 
"Es genial trabajar con ordenadores. No discuten, lo recuerdan todo y no se beben tu cerveza" (Paul Leary)

"Controlar la complejidad es la esencia de la programación" (Brian Kernigan)

"Primero resuelve el problema. Entonces, escribe el código" (John Johnson)

"640K deberían ser suficientes para todo el mundo" (Bill Gates, 1981)

Usuario Invitado

¿Alguna cuestión en especial para usar Scanner en lugar del API estándar para manejo de archivos?

Código (java) [Seleccionar]
File file = new File("D://prueba/rangos.txt");
try {
Scanner sc = new Scanner(file);
while (sc.hasNextLine()) {
String[] tokens = sc.nextLine().split(" ");
// el mismo proceso
}
sc.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

marrison

exigencias del profesor  ;D

Muchas gracias!1111111 ;)
"Es genial trabajar con ordenadores. No discuten, lo recuerdan todo y no se beben tu cerveza" (Paul Leary)

"Controlar la complejidad es la esencia de la programación" (Brian Kernigan)

"Primero resuelve el problema. Entonces, escribe el código" (John Johnson)

"640K deberían ser suficientes para todo el mundo" (Bill Gates, 1981)

Usuario Invitado

Jaja, si lo manda el profe, pues a hacerlo (aunque a veces se equivoquen :xD).
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

marrison

jajaja yo a obedecer calladico xD
"Es genial trabajar con ordenadores. No discuten, lo recuerdan todo y no se beben tu cerveza" (Paul Leary)

"Controlar la complejidad es la esencia de la programación" (Brian Kernigan)

"Primero resuelve el problema. Entonces, escribe el código" (John Johnson)

"640K deberían ser suficientes para todo el mundo" (Bill Gates, 1981)

yum-kax

Esta bueno igual que ademas de hacer lo que pida el profe, vos por tus medios veas diferentes formas de hacerlo y entiendas las líneas de código que te dio Gus Garsaky!

Un saludo y espero que sigas con hambre de conocimiento,y no solo cumplimiento