Created
December 7, 2014 17:59
-
-
Save dinigo/414ce65a33fcfdc1f700 to your computer and use it in GitHub Desktop.
Small program to asign partners for "Invisible Friend" events. From a list of names it creates a text file for each containing another one of the list. It ensures no one gets himself asigned.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.BufferedReader; | |
import java.io.BufferedWriter; | |
import java.io.File; | |
import java.io.FileReader; | |
import java.io.FileWriter; | |
import java.io.IOException; | |
import java.io.InputStreamReader; | |
import java.util.ArrayList; | |
import java.util.Random; | |
/* --------------------------------Descripcion------------------------------------------------------ | |
* Dado un archivo de texto como parametro o ya dentro del programa, que contiene una lista de nombres | |
* crea una carpeta con un archivo de texto para cada nombre al que va asignado otro de los nombres. | |
* al ir dentro de un archivo de texto no se puede ver lo que hay dentro a simple vista | |
* | |
* --------------------------------Modo de empleo---------------------------------------------------- | |
* NOTA: Se necesita un archivo de texto que contenga en cada linea el nombre de una persona | |
* | |
* Compilar con: "javac AmigoInvisible.java" | |
* Ejecutar con: "java AmigoInvisible" | |
* o con | |
* "java AmigoInvisible lista.txt" | |
* | |
* | |
* @author Daniel Inigo Banos | |
* @email demil133@gmail.com | |
* | |
* file AmigoInvisible.java | |
*/ | |
public class AmigoInvisible | |
{ | |
static String nombreFichero; | |
AmigoInvisible(String nombreFichero){ | |
this.nombreFichero=nombreFichero; | |
} | |
public static void deb(String str){ | |
System.out.println(str); | |
} | |
public static String[] nombresEnFichero(String nombreFichero) | |
{ | |
// inicializa bicho para leer | |
ArrayList <String> listaNombres = new ArrayList<String>(); | |
String linea; | |
BufferedReader lector = null; | |
try | |
{ | |
lector = new BufferedReader (new FileReader(nombreFichero)); | |
while ( (linea=lector.readLine()) !=null) | |
{ | |
listaNombres.add(linea); | |
} // fin de while | |
} // fin de try | |
catch (Exception e) | |
{ | |
System.out.println("Error al leer el archivo con los nombres"); | |
} | |
try | |
{ | |
if (lector != null) lector.close(); | |
} | |
catch (IOException e) | |
{ | |
System.out.println("Error al leer el archivo con los nombres"); | |
} | |
String[] nombres = new String[listaNombres.size()]; | |
for(int i =0; i<nombres.length; i++){ | |
nombres[i]=listaNombres.get(i); | |
} | |
if(nombres == null) System.out.println("Error al leer el archivo con los nombres"); | |
return nombres; | |
} | |
public static String teclado(){ | |
try{ | |
BufferedReader entradateclado=new BufferedReader(new InputStreamReader(System.in)); | |
return entradateclado.readLine(); | |
} | |
catch(IOException e){ | |
System.out.println("ERROR: hubo un fallo con el teclado"); | |
return null; | |
} | |
} | |
public static String[] randomizarNombres(String[] nombres) | |
{ | |
int numNombres = nombres.length; | |
String[] nuevosNombres = new String[numNombres]; | |
boolean marcado[] = new boolean[numNombres]; | |
for (int i = 0; i < numNombres; i++) | |
marcado[i] = false; | |
Random r = new Random(); | |
int aleatorio; | |
int actual = 0; | |
while (quedanElementos(marcado)) { | |
aleatorio = r.nextInt(numNombres); | |
if (!marcado[aleatorio] && actual != aleatorio) { | |
nuevosNombres[actual]=nombres[aleatorio]; | |
marcado[aleatorio] = true; | |
actual++; | |
} | |
} | |
return nuevosNombres; | |
} | |
private static boolean quedanElementos(boolean[] m) { | |
for (int i = 0; i < m.length; i++) { | |
if (m[i] == false){ | |
return true; | |
} | |
} | |
return false; | |
} | |
public static void escribeNombres(String[] nombres, String[] asignados) throws IOException{ | |
String userdir = System.getProperty("user.dir"); // no usar porque no funciona... sin razon aparente | |
//String userdir = ""; | |
String directorio = "//Amigos//"; | |
File directorioNombres = new File(userdir + directorio); | |
if(directorioNombres.exists()) System.out.println("El directorio "+ directorio + " ya existe"); | |
directorioNombres.mkdir(); //System.out.println("Directorio creado: ok"); | |
// Para cada persona crea un archivo que contiene a quién hacer el regalo | |
for(int i = 0; i<nombres.length; i++){ | |
String path = userdir + directorio + nombres[i]+ ".txt"; | |
File fichero = new File(path); | |
fichero.createNewFile(); | |
BufferedWriter bw = new BufferedWriter(new FileWriter(fichero)); | |
String asignado = asignados[i]; | |
bw.write(asignado); | |
bw.flush(); | |
bw.close(); | |
} | |
} | |
public static void main(String args[]) | |
{ | |
// si se le pasan argumentos al programa los usa como nombre del archivo con la lista | |
// si no se le pasa nada te lo pide cuando se inicia | |
AmigoInvisible amigo; | |
if (args.length > 0){ | |
amigo = new AmigoInvisible(args[0]); | |
} | |
else{ | |
System.out.println(" Pon el nombre del archivo con la lista de gente (ejemplo: lista.txt"); | |
System.out.print(" >>"); | |
amigo = new AmigoInvisible(teclado()); | |
System.out.println(); | |
} | |
String[] nombres = nombresEnFichero(nombreFichero); | |
System.out.println("Lector de amigos: [OK]"); | |
String[] asignados = randomizarNombres(nombres); | |
System.out.println("Asignacion aleatoria: [OK]"); | |
boolean escritos = true; | |
try { | |
escribeNombres(nombres, asignados); | |
} | |
catch (IOException e) { | |
System.out.println("No se pudieron crear los archivos con los nombres"); | |
escritos = false; | |
e.printStackTrace(); | |
} | |
if(escritos) System.out.println("Creacion de archivos: [OK]"); | |
// Descomentar la siguiente linea para testear | |
// for(int i=0; i<asignados.length;i++) System.out.println( "["+ nombres[i] + "] ---> ["+ asignados[i] + "] "); | |
return; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment