3
« en: 01 de Diciembre 2014, 23:02 »
Hola.
Estaba practicando con un ejercicio del curso de Java. Era pedir agregar por teclado elementos a un arrayList.
Lo que quise hacer era tomar la primer letra del valor que se ingresa con el método substring, recorrer el array con el bucle foreach y comparándolo con la primer letra de cada elemento.
Elegí substring porque comparar 1 letra parece mas fácil, o mas simple. Bueno, en el momento en que la letra del valor fuera mayor que la de algún elemento, uso el método get, le paso como parámetro el elemento comparado en el momento y le sumo +1 para ponerlo después de ese.
Sería algo así:
lista.add(elemento+1,valorTeclado);
break;
Break para terminar el bucle porque ya se agregó a la lista. Pero si no es mayor que ninguno, entonces es el menor de todos.
if(valorTeclado>elemento){lista.add(elemento+1,valorTeclado);
break;}
else {lista.add(0,valorTeclado)}
Para comparar encontré el método compareTo, pero hace hooooras estoy probando y probando y no me sale. Hasta se me fue de las manos esto. Me pide escribir incluso sin haber importado la clase Scanner.
Copié la clase a un nuevo paquete, por las dudas, tal vez había algo que no veía o que toqué, pero igual, me sigue pidiendo escribir!
import java.util.ArrayList;
//import java.util.Scanner;
public class ListaCantantesFamosos
{ private ArrayList<String>listaCantantes;
public ListaCantantesFamosos(){
listaCantantes=new ArrayList<String>(){{add("Bara");add("Maria");add("Tario");}};
}
public void ordenado(){
//Scanner teclado=new Scanner(System.in);
System.out.println("Escriba:");
String cantante="Tola";//teclado.nextLine();
for(int i=0;i<listaCantantes.size();i++){
if (cantante.compareTo(listaCantantes.get(i))>0){
listaCantantes.add(i+1,cantante);
break;
}else{listaCantantes.add(0,cantante);}
}
System.out.println(listaCantantes);
}
}
Dejé comentado lo referente a Scanner porque la idea es escribir y encontrarle una posición en el array. También saqué el substring por las dudas, cuando ya no se te ocurre nada hacés cualquier cosa xd
Probé en otra clase el compareTo, y funciona bien.
public class Casd
{
public static void main(String[]args){
String a="abc";
String b="bca";
String c="cba";
if (a.compareTo(b)>0){
System.out.println("a Es mayor que b");
}else{System.out.println("a Es menor que b");}
if (b.compareTo(c)>0){
System.out.println("b Es mayor que c");
}else{System.out.println("b Es menor que c");}
if (c.compareTo(a)>0){
System.out.println("c Es mayor que a");
}else{System.out.println("c Es menor que a");}
}
}
Probé con el for común y el iterator, por si estaba mal el usar foreach para lo que quería. No compilabra primero, luego compilaba, ejecutaba y me tiraba error. Luego terminaba agregando el valor, pero no ordenado. Y ahora me pide que le de y le de... entradas... por teclado xd
Bueno, en esta clase hice 3 métodos: for, foreach e iterator.
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Iterator;
public class ListaCantantesFamosos3{
private ArrayList<String>listaCantantes;
private ArrayList<String>listaCantantes2;
public ListaCantantesFamosos3(){
listaCantantes=new ArrayList<String>(){{add("Bara");add("Maria");add("Tario");}};
}
public void ordenado(){
Scanner teclado=new Scanner(System.in);
System.out.println("Escriba:");
String cantante=teclado.nextLine();
for(int i=0;i<listaCantantes.size();i++){
if (cantante.substring(0,1).compareTo(listaCantantes.get(i).substring(0,1))<0){
listaCantantes.add(i+1,cantante);
break;
}else{listaCantantes.add(0,cantante);}
}
System.out.println(listaCantantes);
}
/*
public void ordenado(){
Scanner teclado=new Scanner(System.in);
System.out.println("Escriba:");
String cantante=teclado.nextLine();
for (String elemento:listaCantantes){
if (cantante.compareTo(elemento)>0){
listaCantantes.add(listaCantantes.indexOf(elemento)+1,cantante);
break;
}else{listaCantantes.add(0,cantante);
break;}
}
}
*/
/*public void ordernadoITR(){
Iterator<String> listaITR=listaCantantes.iterator();
Scanner teclado=new Scanner(System.in);
System.out.println("Escriba:");
String cantante=teclado.nextLine();
while(listaITR.hasNext()){
String elemento=listaITR.next();
if (cantante.compareTo(elemento)>0){
listaCantantes.add(listaCantantes.indexOf(elemento)+1,cantante);
}else{listaCantantes.add(0,cantante);}
}
}
*/
}
No se exactamente si pide que escriba, pero me deja escribir en la ventana "terminal" de blueJ, como si así fuera.
Miré la clase en la api, pero... me costó entender. No pude sacar algo en concreto. Solo que compara y devuelve un int según si es menor, igual o mayor.
Encontré el método sort, pero probé el compareTo con algo sencillo. Y debería funcionar con lo que quiero, o no? Qué hago mal? No entiendo
Una última cosa... al principio tenía la clase ListaCantantes, que la declaraba en otra clase, ponele TestLista, de modo que alguien escriba para usar el programa. El problema es que en la clase TestLista no podía trabajar con el array directamente. Tenía que declarar métodos en la clase ListaCantantes e invocarlos en TestLista.
Por ejemplo, un método que me diga cuántos elementos hay en la lista usando como retorno el método size. Si lo creo en TestLista dice que no encuentra el método. No se si alguien me puede explicar esto, dejo archivado las 2 clases, por si hace falta.
Bueno, espero que no haya quedado algo suelto, y que se entienda. Cualquier respuesta es bienvenida =)