Ayuda con un bucle para guardar en una lista java

Hola, haber si me podeis echar una manita con esto que llevo ya mucho tiempo intentando resolverla y nada.
Eh mirado en GOOGLE, me eh comprado un libro sobre java, y en el libro solo te indica como guarda un nombre pero no poder crear un bucle y guardar varios nombres.
Tambien puse la duda en el oficial de java pero llevo como un mes esperando la respuesta y bueno haber si poniendo el tema me la podeis resolver. [+risas]
Haber voy a intentar explicarlo de forma sencilla.
Solo me queda poner ese bucle o modificar el codigo para poder terminar este trabajito.
Haber, necesito que por ejemplo si yo creo una lista como en la aplicación puesta abajo cuando yo le diga al final quiere crear otro nombre el bucle vuelva al principio y pueda guardar otro nombre, con que pudiera guardar 2 nombres seria suficiente.
Pido disculpas por no haberlo puesto en su hilo correspondiente. [tomaaa]




//Importo las utilidades de java a utilizar
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.StringReader;

public class Principal {
   //Nombre del archivo de la tienda
   private static final String nombretienda="tienda.txt";
   //Pongo las Variables que voy a utilizar para leer y escribir los archivos
   private static Scanner teclado;
   public static void main(String[] args) {
      teclado = new Scanner(System.in);
      //creo los string de respuestas
            //El string no puede estar vacio o dará error
             String veredicto="cliente";
            String formato = "cd";
            String Respuesta;
              
               String repetir="no";
            //Pido a el dependiente que introduczca una opción
               //creo un bucle por si se equivoca la respuesta
              
            do{
               
            System.out.println("Esperando orden:");
            System.out.println("Crear cliente =crear");
            System.out.println("Listar cliente =Listar");
            System.out.println("Eliminar cliente =Eliminar");
            System.out.println("Salir");
            
            Respuesta=teclado.nextLine();
            
            
            
            
         if(Respuesta.equalsIgnoreCase("eliminar")){
               //pido el nombre del cliente que se va a eliminar
               System.out.println("introduzca el nombre del cliente a eliminar:");
               
               Cliente.setNombre(teclado.nextLine());
               System.out.println("El cliente: "+Cliente.getNombre()+" ha sido eliminado con exito");
            
            }else if(Respuesta.equalsIgnoreCase("Salir")){
               System.out.println("Gracias por utilizar la aplicación");
               //Con esto la aplicación se terminará
               System.exit(0);
            
            }else if(Respuesta.equalsIgnoreCase("crear")){
                  //PREGUNTO QUE SE QUIERE CREAR
                  //Si se equivoca se crea un bucle y se repite la respuesta
                  do{
                  System.out.println("Que quiere Crear");
                  System.out.println("Cliente");
                  System.out.println("Musica");
                  System.out.println("Venta");
                  System.out.println("Salir");
                  veredicto=teclado.nextLine();
               }while(!veredicto.equalsIgnoreCase("cliente")&&!veredicto.equalsIgnoreCase("Musica")&&!veredicto.equalsIgnoreCase("Venta")&&!veredicto.equals("salir"));
               
                  if (veredicto.equalsIgnoreCase("Cliente")){
                     //Capturo el nombre del cliente para luego guardarlo
                     System.out.println("Introduzca el nombre del cliente:");
                     Cliente.setNombre(teclado.nextLine());
                     System.out.println("El cliente "+Cliente.getNombre()+" Ha sido creado y agregado a la lista");
                     do{
                     //Pido que tipo de formato va a vender
                     System.out.println("Introduzca el formato de musica");
                     System.out.println("Formatos disponibles:");
                     System.out.println("Vinilo");
                     System.out.println("CD");
                     System.out.println("Cassete");
                     System.out.println("salir");
                     formato=teclado.nextLine();
                     }while(!formato.equalsIgnoreCase("vinilo")&&!formato.equalsIgnoreCase("cd")&&!formato.equalsIgnoreCase("cassete")&&!formato.equals("salir"));
                  }else if(veredicto.equalsIgnoreCase("musica")){
                     
                     
                     //pido que tipo de formato va a vender
                     do{
                     System.out.println("introduzca el formato de musica");
                     System.out.println("Formatos disponibles:");
                     System.out.println("Vinilo");
                     System.out.println("CD");
                     System.out.println("Cassete");
                     System.out.println("salir");
                     formato=teclado.nextLine();
                     }while(!formato.equalsIgnoreCase("vinilo")&&!formato.equalsIgnoreCase("cd")&&!formato.equalsIgnoreCase("cassete")&&!formato.equals("salir"));
                  
                  }else if(veredicto.equalsIgnoreCase("venta")){
                     //pido el nombre del cliente que se va a eliminar
                     System.out.println("introduzca el nombre del cliente al que se va a vender:");
                     Cliente.setNombre(teclado.nextLine());
                     
                     
                  }else if(veredicto.equalsIgnoreCase("Salir")){
                     System.out.println("Gracias por utilizar la aplicación");
                     //Con esto la aplicación se terminará
                     System.exit(0);
                     do{
                     System.out.println("Que articulo se va ha llevar:");
                     formato=teclado.nextLine();
                     }while(!formato.equalsIgnoreCase("vinilo")&&!formato.equalsIgnoreCase("cd")&&!formato.equalsIgnoreCase("cassete")&&!formato.equals("salir"));
                     
                     System.out.println("El cliente: "+Cliente.getNombre()+" es ha llevado"+formato);
                  }
                  if (formato.equalsIgnoreCase("vinilo")){
                     System.out.println("Vinilo");
                      System.out.println("Introduzca el titulo de la obra:");
                     Vinilo.setTitulo(teclado.nextLine());
                     System.out.println("Introduzca el autor de la obra:");
                     Vinilo.setautor(teclado.nextLine());
                     System.out.println("Y a comprado un vinilo con el titulo "+Vinilo.getTitulo());
                     System.out.println("Quiere hacer algo más");
                     repetir=teclado.nextLine();
                     
                  
                  
                  }else if(formato.equalsIgnoreCase("CD")){
                     
                     System.out.println("Cd");
                      System.out.println("Introduzca el titulo de la obra:");
                     CD.setTitulo(teclado.nextLine());
                     System.out.println("Introduzca el autor de la obra:");
                     CD.setautor(teclado.nextLine());
                     System.out.println("Y a comprado un CD con el titulo "+CD.getTitulo());
                     
                  }else if(formato.equalsIgnoreCase("CASSETE")){
                     System.out.println("cassete");
                      System.out.println("Introduzca el titulo de la obra:");
                     cassete.setTitulo(teclado.nextLine());
                     System.out.println("Introduzca el autor de la obra:");
                     cassete.setautor(teclado.nextLine());
                     System.out.println("Y a comprado un Cassete con el titulo "+cassete.getTitulo());
                  
                  }else if(formato.equalsIgnoreCase("Salir")){
                     System.out.println("Gracias por utilizar la aplicación");
                     //Con esto la aplicación se terminará
                     System.exit(0);
                  }
                  
            }else if(Respuesta.equalsIgnoreCase("listar")){
                  //pregunto que se va a listar y sus posibles respuestas
                  do{
                  System.out.println("Que se listará:");
                  System.out.println("Cliente");
                  System.out.println("Musica");
                  System.out.println("Venta");
                  System.out.println("Salir");
                  veredicto=teclado.nextLine();
                  
                  
                  
                  
                  
               }while(!veredicto.equalsIgnoreCase("cliente")&&!veredicto.equalsIgnoreCase("Musica")&&!veredicto.equalsIgnoreCase("Venta")&&!veredicto.equals("salir"));
               
                  
                  
                  

                  if (veredicto.equalsIgnoreCase("Cliente")){
                     //Capturo el nombre del cliente para luego guardarlo
                     System.out.println("Introduzca el nombre del cliente:");
                     Cliente.setNombre(teclado.nextLine());
                     System.out.println("El cliente "+Cliente.getNombre()+" Ha sido creado y agregado a la lista");
                     //Pido que tipo de formato va a vender
                     System.out.println("Introduzca el formato de musica");
                     System.out.println("Formatos disponibles:");
                     System.out.println("Vinilo");
                     System.out.println("CD");
                     System.out.println("Cassete");
                     System.out.println("salir");
                     formato=teclado.nextLine();
                  }else if(veredicto.equalsIgnoreCase("musica")){
                     
                     
                     //pido que tipo de formato va a vender
                     do{
                     System.out.println("introduzca el formato de musica");
                     System.out.println("Formatos disponibles:");
                     System.out.println("Vinilo");
                     System.out.println("CD");
                     System.out.println("Cassete");
                     System.out.println("salir");
                     formato=teclado.nextLine();
                     }while(!formato.equalsIgnoreCase("vinilo")&&!formato.equalsIgnoreCase("cd")&&!formato.equalsIgnoreCase("cassete")&&!formato.equals("salir"));
                  
                  }else if(veredicto.equalsIgnoreCase("venta")){
                     //pido el nombre del cliente que se va a eliminar
                     System.out.println("introduzca el nombre del cliente al que se va a vender:");
                     Cliente.setNombre(teclado.nextLine());
                     
                  }else if(veredicto.equalsIgnoreCase("Salir")){
                     System.out.println("Gracias por utilizar la aplicación");
                     //Con esto la aplicación se terminará
                     System.exit(0);
                     
                     do{
                     System.out.println("Que articulo se va ha llevar:");
                     formato=teclado.nextLine();
                     }while(!formato.equalsIgnoreCase("vinilo")&&!formato.equalsIgnoreCase("cd")&&!formato.equalsIgnoreCase("cassete"));
                     
                     System.out.println("El cliente: "+Cliente.getNombre()+" es ha llevado"+formato);
                  }
                  if (formato.equalsIgnoreCase("vinilo")){
                     System.out.println("Vinilo");
                      System.out.println("Introduzca el titulo de la obra:");
                     Vinilo.setTitulo(teclado.nextLine());
                     System.out.println("Introduzca el autor de la obra:");
                     Vinilo.setautor(teclado.nextLine());
                     System.out.println("Y a comprado un vinilo con el titulo "+Vinilo.getTitulo());
                     
                     
                  
                  
                  }else if(formato.equalsIgnoreCase("CD")){
                     
                     System.out.println("Cd");
                      System.out.println("Introduzca el titulo de la obra:");
                     CD.setTitulo(teclado.nextLine());
                     System.out.println("Introduzca el autor de la obra:");
                     CD.setautor(teclado.nextLine());
                     System.out.println("Y a comprado un CD con el titulo "+CD.getTitulo());
                     
                  }else if(formato.equalsIgnoreCase("CASSETE")){
                     System.out.println("cassete");
                      System.out.println("Introduzca el titulo de la obra:");
                     cassete.setTitulo(teclado.nextLine());
                     System.out.println("Introduzca el autor de la obra:");
                     cassete.setautor(teclado.nextLine());
                     System.out.println("Y a comprado un Cassete con el titulo "+cassete.getTitulo());
                  }else if(formato.equalsIgnoreCase("Salir")){
                     System.out.println("Gracias por utilizar la aplicación");
                     //Con esto la aplicación se terminará
                     System.exit(0);
                  
                  }
               
               }
               
               //pregunto que se va a CREAR y sus posibles respuestas
            
            }while(!Respuesta.equalsIgnoreCase("Listar")&&!Respuesta.equalsIgnoreCase("crear")&&!Respuesta.equalsIgnoreCase("Eliminar")&&!Respuesta.equalsIgnoreCase("Salir")&&repetir.equalsIgnoreCase("si")&&!repetir.equalsIgnoreCase("No"));
            
   
            
   
   
   
   //Vamos a guardar el nombre del cliente y su compra
   try{ String lineaArchivo;
    String fuenteArchivo=Cliente.getNombre();
    BufferedReader fuenteSalida;
    String fuentevinilo=Vinilo.getTitulo();
    String fuenteCD=CD.getTitulo();
    String fuentecassete=cassete.getTitulo();
    fuenteSalida = new BufferedReader(

    new StringReader(fuenteArchivo));



    // Se define un stream de salida (PrintWriter)

    // que tomara los datos de memoria (BufferedWriter)

    // y los escribira en un archivo (FileWriter)

    PrintWriter archivoSalida;

    archivoSalida = new PrintWriter(

    new BufferedWriter(
//desde este fichero se podrá ver el nombre y articulo ademas de poderse borrar facilmente
    new FileWriter("C:Tienda.txt")));


    while ((lineaArchivo = fuenteSalida.readLine()) != null)
//Datos que se guardaran en el fichero de texto
    archivoSalida.println(1 + " cliente : " + lineaArchivo );
    archivoSalida.println(2+ " vinilo titulo :"+fuentevinilo);
    archivoSalida.println(3+ " Cd titulo :" +fuenteCD);
    archivoSalida.println(4+ " cassete titulo :" +fuentecassete);
    // Se cierra el stream de salida

    archivoSalida.close(); }
    catch (IOException e) {

    System.out.println("Excepcion Entrada/Salida");
   
}
   

   

   }
}
   
for (i; i< ó > 10; i++)

while (contador<10)
{contador++}

EDITO: Ostras, tu lo que quieres es guardar no sacar datos, pero es más o menos lo mismo.

Más o menos es eso. No sé como van las listas, se que difieren de los arrays pero podría ser algo así e PHP:

$i=0;
$array que tiene el contenido de una tabla sql, por ejemplo.
Cargas el array y haces un count y te devuelve 20 líneas: $a=20; No te pongo el código exacto porque no me acuerdo, pero ya lo entiendes, supongo.

for ($i; $i<$a; $i++)
{ print $array[$i] ; }

No me acuerdo del código exacto, pero es así en todos los lenguajes, creo :-)

for o while o while do creo que también. Hasta que se cumpla la condición haz lo que sea que tenga que hacer. En tu caso si quieres imprimir todas las listas, for es tu opción.

si buscas un dato específico puedes hacer un break cuando lo encuentres y salir del bucle.

Te contesto porque nadie te dice nada, pero yo de java null. Algo de php. Pero los bucles son así.

Te he puesto un array de php, busca la sintáxis correcta para las listas de java.

Suerte!
Muchas gracias por tu respuesta.
Haber yo tengo los bucles echos y puedo guardar un nombre pero, digamos que yo creo los datos nombre, y lo guarda, y si quiero que termine la aplicación termina, pero el problema es que si yo pregunto quiere hacer algo más, y digo si el bucle falla y no vuelve al principio :-?
Ese es mi problema principal. en el spoiler tengo el codigo por si alguien ve el fallo a mi lo que me gustaria es que si escribo si no falle si no que vuelva al principio [+risas]
boo....

Sin tener ni idea de java.... No puedes meter el bucle en una función? Así luego la llamas cuando te de la gana pasándole los parámetros que necesites. Digo yo! [+risas] [+risas] [+risas]

O meter todo dentro de un if con una comparación booleana: has terminado? si, no....

Cómo se hace eso en java ya no sé. jeje
Gracias de nuevo por responder.
Haber quizas no me hayas entendido por que te falta algun dato te lo resumo:
Lo tengo en un bloque con su if, else...
Tengo el do y el while para tener anidado el codigo.

Aqui lo que digo
Seria más o menos asín

Do{

opcion a

opcion b

opcionc

respuesta=teclado.nextLine;

If(opcion A);

do{

sentencias

}while(sentencias);

else if (opcion b);

do{

sentencias

}while(sentencias);

else if (opcion c);

do{

sentencias

}while(sentencias);

}while(!respuesta.equalIgnoreCase(opcion a)&&!respuesta.equalIgnoreCase(opcion b)&&!respuesta.equalIgnoreCase(opcion c);

Eso es mi estructura basicamente.

La informacion cuando la recibo la paso a un fichero que lo eh llamado tienda.txt eso esta en la parte final de mi codigo.

Pero mi gran problema esta en que cuando termino en la parte que digo yo es desea hacer otra cosa, cuando digo que SI la aplicación falla.

Gracias de nuevo por contestar
Bueno, te contesto porque me gusta meterme donde no sé jajaja.

Lo que haces es: agregar clientes, eliminar clientes, realizar una venta a clientes. Si no se cumplen todas las condiciones repetir la entrada de datos... no?

Llegas al final y almacenas en un txt.

Pero no entiendo esto: catch (IOException e) {

System.out.println("Excepcion Entrada/Salida");

Este código te pregunta por que quieres hacer?

Ya te digo que no sé java, pero me da a pensar que falta algo que te devuelva al principio del programa, no sé si con un go to o qué.

Además, a la hora de escribir en tienda.txt solo está prevista la venta. Y en caso de borrar un cliente como haces?

Ya lo siento, igual te pongo en más dudas de las que tienes jajajaja, pero está interesante. Haber cómo acaba!!
Muchas gracias por tu respuesta.
Haber lo de borrar cliente, me dijo el profesor que lo pusiera no hace falta que borre nada, ja,ja.
Y la parate de abajo esa que pones pues según los libros sirve para generar el fichero txt, y las variables de arriba, guardarlas.
Y si pregunte al profesor es un cursillo online, y siempre me contesta buscate la vida :(
Hola, antes de nada te digo que debes aprender a debuguear tu código, intenta aislar el trozo donde falla en otra clase java para que te sea mas sencillo encontrar el fallo.

El fallo está en el while principal que devuelve un false y por eso sale del programa.

Deberías hacer algo así:

do{


System.out.println("Esperando orden:");
System.out.println("Crear cliente =crear");
System.out.println("Listar cliente =Listar");
System.out.println("Eliminar cliente =Eliminar");
System.out.println("Salir");

Respuesta=teclado.nextLine();

//RESTO DEL PROGRAMA
....

}while( ( !Respuesta.equalsIgnoreCase("Listar")
&& !Respuesta.equalsIgnoreCase("crear")
&& !Respuesta.equalsIgnoreCase("Eliminar")
&& !Respuesta.equalsIgnoreCase("Salir")
)
|| repetir.equalsIgnoreCase("si")
);


Te he marcado en rojo lo que he cambiado para que funcione.
El problema es que cuando vuelves a pasar por el while la variable Respuesta tiene el valor de "crear", "listar" o "eliminar" de la vez anterior, entonces esa comprobación es falsa y sale del bucle.

Otra posibilidad es que restaures la variable Respuesta a cadena vacia.
Hola
Haber gracias por todas las respuestas.
voy ha poner el fallo haber si ese es realmente el problema ya lo eh cambiado pero me sale esto.

Esperando orden:
Crear cliente =crear
Listar cliente =Listar
Eliminar cliente =Eliminar
Salir
crear
Que quiere Crear
Cliente
Musica
Venta
Salir
musica
introduzca el formato de musica
Formatos disponibles:
Vinilo
CD
Cassete
salir
vinilo
Vinilo
Introduzca el titulo de la obra:
a
Introduzca el autor de la obra:
s
Y a comprado un vinilo con el titulo a
Quiere hacer algo más
si
Exception in thread "main" java.lang.NullPointerException
   at java.io.StringReader.<init>(Unknown Source)
   at Principal.main(Principal.java:263)

Es como esta estructurado el programa y el fallo que sale. :-?
Yo lo probé y no petaba. Seguro que solo has cambiado lo del while que te dije?

Igualmente te digo que ese fallo del nullpointer sucede cuando intentas acceder a una propiedad o método de un objeto que tiene valor null. Por ejemplo:

Cuando haces Respuesta.equalsIgnoreCase("listar") si Respuesta vale null te saltara error de nullpointer, por eso se recomienda ponerlo al revés para que nunca te falle ("listar".equalsIgnoreCase(Respuesta)).

Además el error te dice la linea que falla. Revisa la linea 263 a ver si estas accediendo a un objeto que vale null.
Carlcox escribió:Yo lo probé y no petaba. Seguro que solo has cambiado lo del while que te dije?

Igualmente te digo que ese fallo del nullpointer sucede cuando intentas acceder a una propiedad o método de un objeto que tiene valor null. Por ejemplo:

Cuando haces Respuesta.equalsIgnoreCase("listar") si Respuesta vale null te saltara error de nullpointer, por eso se recomienda ponerlo al revés para que nunca te falle ("listar".equalsIgnoreCase(Respuesta)).

Además el error te dice la linea que falla. Revisa la linea 263 a ver si estas accediendo a un objeto que vale null.


Muchisimas gracias por volver a responder, de verdad.
Eh mirado esa linea que me has dicho y es esto

try{ String lineaArchivo;
    String fuenteArchivo=Cliente.getNombre();
    BufferedReader fuenteSalida;
    String fuentevinilo=Vinilo.getTitulo();
    String fuenteCD=CD.getTitulo();
    String fuentecassete=cassete.getTitulo();
    fuenteSalida = new BufferedReader(
//esta es la linea 263
    new StringReader(fuenteArchivo));

POr lo que se ve el objeto es null y por eso falla quizas si esos string los pongo arriba del todo se solucione el problema de una vez.
Y si el programa no falla en los bucles gracias ha esa corrección, muchas gracias por la ayuda en eso.
Ahora solo me queda que pueda volver al principio sin ese null y ya esta.
:)
(mensaje borrado)
11 respuestas