Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: maxplanck en 24 de Diciembre 2016, 13:15
-
Hola a todos. Ya sé que son fechas señaladas para muchos pero yo sigo totalmente enganchado a ésto y no puedo parar. Éste es el código que he realizado para este ejercicio. Estoy contento de como me ha quedado con su bucle for-each en el método main de la clase Test y todo ;D...pero con muchas dudas. Quería probar a usar un método para cada cosa pero con eso del static del main me he visto obligado a poner static en todas la variables y métodos, ¿Es eso correcto o dará algún problema ?.
Cuando compilo la clase Test me sale un warnig que no entiendo (lo entiendo pero no lo comprendo ???) , aún así todo funciona.
C:\....\TestListaCantantesFamosos.java uses unchecked or unsafe operations. Recompile with -Xllntunchecked ror(sic) detalls (sic).
Aquí la clase ListaCantantesFamosos.
import java.util.*;
public class ListaCantantesFamosos {
private ArrayList<String> lista1;
public ListaCantantesFamosos () {
lista1 = new ArrayList<String> ();
lista1.add("Pepe");
lista1.add("Juan");
lista1.add("Jaime");
}
public String getNombre (int pos) {return lista1.get(pos);}
public void addCant (String name) {lista1.add(name);}
public int sizeList () {return lista1.size();}
}
Y aquí la reina de mis ojos ;), la clase TestListaCantantesFamosos.
import java.util.*;
public class TestListaCantantesFamosos {
static String entrada = "";
static ListaCantantesFamosos lista2 = new ListaCantantesFamosos();//este static me parecía raro
static String tec = "";
static boolean si = true;
public static void scan1 () {
System.out.println ("Por favor introduzca nombre de famoso");
Scanner scanner1 = new Scanner (System.in);
entrada = scanner1.nextLine ();
lista2.addCant(entrada);
}
public static void pedirNombre() {
System.out.println ("¿Desea introducir otro nombre?: Sí, No");
Scanner ent = new Scanner (System.in);
tec = ent.nextLine();
TestListaCantantesFamosos.eval();
}
public static void eval () {
if (tec.equalsIgnoreCase("sí") || tec.equalsIgnoreCase("si") ){
TestListaCantantesFamosos.scan1();
}
else if (tec.equalsIgnoreCase("no")){si = false;}
else {
System.out.println ("Entrada no válida");
TestListaCantantesFamosos.pedirNombre();
}
}
public static void main(String [] args) {
TestListaCantantesFamosos.scan1();
TestListaCantantesFamosos.scan1();
do {
TestListaCantantesFamosos.pedirNombre();
} while (si == true);
System.out.println ("La lista contiene los nombres siguientes:");
ArrayList<String> lista3 = new ArrayList();
int i = 0;
for (i = 0; i < lista2.sizeList();i++) {
lista3.add(lista2.getNombre(i));
}
for (String a:lista3){
System.out.println (a);
}
System.out.println ("Fin del programa.Gracias por su participación");
}
}
Gracias de nuevo por vuestro apoyo y paciencia... y Bon Nadal desde Valencia. (despedida con rima :P)
-
Buenos días y feliz Navidad.
Habría una forma más sencilla de realizar este ejercicio:
import java.util.ArrayList;
public class ListaCantantesFamosos1{
private ArrayList<String> listaCantantesF;
public ListaCantantesFamosos1(){
listaCantantesF = new ArrayList<String>();
listaCantantesF.add("Jose Feliciano");
listaCantantesF.add("Silvio Rodriguez");
listaCantantesF.add("Manuel Garcia");
}
public ArrayList<String> getListaCantantesF(){
return listaCantantesF;}
public void setNuevoCantante(String nuevoCantante){
listaCantantesF.add(nuevoCantante);
}
public void mostrarLista (){
int i=1;
for ( String cantante:listaCantantesF){
System.out.println ( (i)+ "- " + cantante );
i++;
}
}
}
import java.util.Scanner;
public class TextListaCantantesFamosos1{
public static void main (String [] args){
ListaCantantesFamosos1 listaCantantes=new ListaCantantesFamosos1();
Scanner entradaEscaner = new Scanner (System.in);
int resp=0;
System.out.println ("Empezamos el programa");
listaCantantes.mostrarLista();
while (resp==0) {
System.out.println ("Por favor escriba el nombre de un cantante famoso");
listaCantantes.setNuevoCantante(entradaEscaner.nextLine ());
listaCantantes.mostrarLista();
System.out.println (" Si deseas introducir otro cantante escribe Si.\nSi quieres salir pulsa intro.");
if (!entradaEscaner.nextLine ().equalsIgnoreCase("Si")){resp=1;}
}
System.out.println (" Adios");
}
}
Si el método mostrar lista lo quieres poner en el main podría ser:
import java.util.ArrayList;
public class ListaCantantesFamosos1{
private ArrayList<String> listaCantantesF;
public ListaCantantesFamosos1(){
listaCantantesF = new ArrayList<String>();
listaCantantesF.add("Jose Feliciano");
listaCantantesF.add("Silvio Rodriguez");
listaCantantesF.add("Manuel Garcia");
}
public ArrayList<String> getListaCantantesF(){
return listaCantantesF;}
}
import java.util.Scanner;
import java.util.ArrayList;
public class TextListaCantantesFamosos2{
public static void main (String [] args){
Scanner entradaEscaner = new Scanner (System.in);
ArrayList<String> lista=new ListaCantantesFamosos1().getListaCantantesF();
System.out.println ("Empezamos el programa");
TextListaCantantesFamosos2.mostrarLista(lista);
int resp=0;
while (resp==0) {
System.out.println ("Por favor escriba el nombre de un cantante famoso");
lista.add(entradaEscaner.nextLine ());
TextListaCantantesFamosos2.mostrarLista(lista);
System.out.println (" Si deseas introducir otro cantante escribe Si.\nSi quieres salir pulsa intro.");
if (!entradaEscaner.nextLine ().equalsIgnoreCase("Si")){resp=1;}
}
System.out.println ("Adios");
}
public static void mostrarLista (ArrayList<String> listaCantantesF){
int i=1;
for ( String cantante:listaCantantesF){
System.out.println ( (i)+ "- " + cantante );
i++;
}
}
}
Un saludo
-
Hola de nuevo ESOJ y muchas gracias otra vez por tu ayuda, ya te dije en:
https://www.aprenderaprogramar.com/foros/index.php?topic=5726.0
que lo del tipo ArrayList en la signatura de métodos me iba a cambiar la vida ;D.
La verdad es que compliqué la clase Test adrede por que quería jugar a llamar métodos, aunque reconozco que de no ser así, por lo menos con mis conocimientos actuales, quizá no me hubiera quedado tan elegante como el tuyo en un solo bucle while.
Lo de empeñarme en poner el método mostrarLista en el main de la clase Test es porque así lo especificaba el enunciado del ejercicio, o eso entendí yo:
Crea una clase test con el método main que inicialice un objeto ListaCantantesFamosos y usando un for extendido muestre los cantantes en la lista por pantalla. Se debe pedir al usuario un nombre más de cantante famoso, y una vez introducido mostrar la lista actualizada usando un for extendido.
.
Hoy me has enseñado, además, que puedo usar los métodos directamente sin usar variables intermedias como parametros de otros métodos, con lo que ahorras varias líneas y se simplifica mucho el código, que aunque no os lo creáis por el de este ejercicio sigue siendo mi objetivo ::). Hasta pronto a todos.
P.D. ¿Alguien sabe porqué me sale el warning?.
-
Buenos días.
El warning te dice :
C: \ .... \ TestListaCantantesFamosos.java utiliza operaciones no comprobadas o inseguras. Recompile con -Xllntunchecked ror (sic) detalls (sic).
-
Buenas maxplanck.
Creo que el warning te sale por esta línea:
ArrayList<String> lista3 = new ArrayList();
Me ha pasado algunas veces y siempre es porque en un Iterador, en un List o en un ArrayList me he dejado la parte de <E>. Escribe en tu código new ArrayList<String>();.
¡Saludos y Feliz Navidad!
-
Muchísimas gracias Erik_Escriche. Otra vez por no fijarme y dar las cosas por suponidas ;).
Error corregido y ya no sale el warning.
Gracias también ESOJ pero lo que quiero saber es que *os significa compilar con lo que sea que signifique el modificador ese Xllntunchecked y como se hace.
-
Buenos días y feliz año.
En estos dos enlaces se da una buena explicación del tema:
http://programacion.net/foros/java-basico/warning_al_compilar_unchecked_or_unsafe_operations__293588
http://www.forosdelweb.com/f45/que-hacer-cuando-aparece-recompile-xlint-499531/
Un saludo
-
Gracias ESOJ mensaje recibido. Imagino que es compilando con javac - Xlint:unchecked en la consola de Windows.