Skip to content

Instantly share code, notes, and snippets.

@dinigo
Created December 7, 2014 17:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dinigo/414ce65a33fcfdc1f700 to your computer and use it in GitHub Desktop.
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.
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