Libro de Java en Español espero que les sirva

Pamela
09 de Junio del 2005
para que se divierta
Bueno, el libro ya esta arriba y pueden bajarlo completo.

link directo:
http://www.web-a-file.com/main.cgi?username=chafas&password=8103054&action=login&section=2

y aprovecho para pedir un favor urgente,
quien me puede ayudar a modificar el siguiente codigo para hacer lo que esta escrito mas abajo


import java.io.*;
import java.lang.*;
import java.util.*;
public class Permuta {

private void perm (String frase1, String frase) throws IOException{
String[] palabras = null;
String palabra = null;
String resto = null;
int l = 0;
for(int z = 0; z == 0; z++)
{

palabras = frase.split(" ");
if (palabras.length > 1) {
for (int i = 0; i < palabras.length; i++) {
palabra = palabras[i];
resto = "";

for (int j = 0; j < palabras.length; j++) {
if ( i != j)
resto = resto + palabras[j] + " ";
}
perm (frase1 + " " + palabra, resto.trim());
}
}
else {
for(int p=1; p<1; p++){
File archivoSalida = new File ("C:\DatosSalida.txt");

FileOutputStream flujoSalidaArchivo = new FileOutputStream(archivoSalida);

PrintWriter flujoSalida = new PrintWriter(flujoSalidaArchivo);
flujoSalida.println(frase1 + " " + frase);
System.out.println (frase1 + " " + frase);
flujoSalida.close();
}
}
l++;
}
}

public static void main(String[] args) throws IOException{
String frase = null;
char[] vector = new char[90];
String Estanlasletras;
String[] Segundovector=new String[90];
String separada="";
String text = null;
BufferedReader br = new BufferedReader(new FileReader("C:\Datos2.txt"));

while ((text = br.readLine()) != null)
{
Estanlasletras=text;

vector=Estanlasletras.toCharArray();// llena el vector de letras
for (int i=0;i<vector.length;i++){
Segundovector[i]=String.valueOf(vector[i]); //las convierte a String los Char
}
separada="";
for (int i=0;i<19;i++){
separada=separada+" "+Segundovector[i]; // estan las letras separada
}
frase = separada;

for (int i = 0; i < args.length; i++) {
frase = frase + args[i] + " ";
}
Permuta p = new Permuta();
p.perm("", frase);
}
}
}

Necesito modificarlo para hacer lo siguiente
El Club de la Comida

El Club de la Comida Gourmet de la Ciudad de .... tiene 16 miembros. Ellos contactaron al propietario de un restaurante francés ubicado en el hotel Valle de Santiago para arreglar unas cenas por 5 noches consecutivas. Los miembros del Club pidieron ser sentados alrededor de 4 mesas, 4 personas por mesa. Los miembros también le exigieron al propietario del restaurante que durante las 5 noches cada miembro del club compartiría una mesa exactamente una vez con cada otro miembro.

El Sr. Mendez (que el nombre del propietario), asigno al Jefe del comedor la tarea de programar los asientos para las 5 noches. Durante la primera noche, el Jefe del comedor asentó a los miembros tal cual iban llegando al restaurante. En las tardes siguientes, él programó con cuidado los asientos para cumplir con la exigencia de que ningún miembro cene dos veces con algún otro miembro.

Lamentablemente, el Jefe del Comedor desapareció durante la mañana de la cuarta noche. El Sr. Mendez fue abandonado sólo con los apuntes que incluyeron las disposiciones de asientos registradas durante las 3 noches anteriores. Él se dio cuenta que programar las 2 noches que restaban no era tarea sencilla. Entonces, el Sr. Mendez solicita su ayuda para intentar cuadrar las dos noches que faltan. Lo siguiente es una muestra de lo que dejó el Jefe del Comedor de las 3 noches anteriores:

ABCD EFGH IJKL MNOP

AEIM BFJN CGKO DHLP

AFKP BGLM CHIN DEJO

Los miembros del club de Comida fueron identificados con letras. Cada línea representa una noche de asientos. Así para la primera noche (en este ejemplo), A se sentó con B, con C y con D, y así sucesivamente para cada mesa. Escriba un programa que lea de un archivo llamado club.in, el arreglo de asientos de la tres primeras tardes y determine cómo pueden combinarse los puestos para arreglar las tardes siguientes.

La entrada será un archivo de texto. Cada juego de datos será de 3 líneas. Cada línea consistirá en cuatro bloques, de 4 letras. Todas las letras estarán en mayúsculas. Los bloques serán separados por " uno o varios espacio en blanco".

Los juegos de datos serán separados por una línea en blanco. La salida debe colocarse en un archivo llamado club.out. Si se puede hacer las combinaciones para completar las 5 noches cumpliendo con las exigencias del club, coloque en el archivo de salida las 5 líneas correspondientes al juego de datos suministrado. Si no se puede realizar la combinación para cumplir con las exigencias, coloque en el archivo de salida los datos de las 3 noches y seguidamente un mensaje que diga "No se puede completar". Cada juego de datos deberá estar separado por una línea en blanco.

Por ejemplo:

Entrada

ABCD EFGH IJKL MNOP

AEIM BFJN CGKO DHLP

AFKP BGLM CHIN DEJO

MFKP BELO CHIN DGJA

MEIA CGKO BFJN DHLP

MBCD EFGH IJLK ANOP

Salida

ABCD EFGH IJKL MNOP

AEIM BFJN CGKO DHLP

AFKP BGLM CHIN DEJO

"No se puede completar"

MFKP BELO CHIN DGJA

MEIA CGKO BFJN DHLP

MBCD EFGH IJLK ANOP

…

…

Importante: "…" representa que ahí van las 2 combinaciones que si se pudieron obtener. El archivo de entrada puede tener varios juegos de 3 noches y deben buscar las combinaciones de las 2 noches restantes para todas

gracias