41
C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más / Re: Clase ArrayList - Ejercicio (CU00665B)
« en: 19 de Junio 2023, 18:33 »
Todo parece correcto
![Sonrisa :)](https://aprenderaprogramar.com/foros/Smileys/default/smiley.gif)
Aprende Java con el libro "Aprender a programar en Java desde cero. Curso paso a paso." Editorial aprenderaprogramar. com. 200 pgs. Disponible en papel y ebook.
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
public class Carta implements Comparable {
@Override
public int compareTo(Object o) {
// Código para comparar cartas
return 0;
}
}
public class Carta implements Comparable<Carta> {
@Override
public int compareTo(Carta otraCarta) {
// Código para comparar cartas
return 0;
}
@Override
public int compareTo(Carta otraCarta) {
if (otraCarta.equals(this)) {
return 0; //Cartas son iguales
}
else {
if (this.palo.equals(otraCarta.palo)) {
//Mismo palo, el orden depende del valor de las cartas
/*
* El atributo "numero" de las Cartas es un String, no es un Integer.
* Esto significa que no podemos comparar directamente esos atributos, porque en realidad
* no son números, y necesitamos lograr un orden aritmético.
*
* Por suerte, la clase Baraja tiene un array público con los nombres de estos "números"
* en el orden correcto.
* Así que podemos usar la posición que ocupa cada "nombre de número" en el array para obtener
* unos valores enteros con los que poder comparar de forma aritmética
*/
int posiC1 = 0, posiC2 = 0;
for (int i = 0; i < Baraja.numeros.length; i++) {
if (this.numero.equals(Baraja.numeros[i]))
posiC1 = i;
if (otraCarta.numero.equals(Baraja.numeros[i]))
posiC2 = i;
}
//Tenemos sus posiciones numéricas, podemos compararlas para decidir el orden.
if (posiC1 == posiC2)
return 0; //Número es igual
else if (posiC1 < posiC2)
return -1; //c1 es menor que c2
else
return 1; //c2 es menor que c1
}
else //Los palos son distintos, aquí no importa el número de carta, el orden depende los palos
return this.palo.compareTo(otraCarta.palo);//Retornamos la comparación por defecto de Strings
}
}
public class Mazo {Podemos quitarle ese atributo y también el método que lo seteaba
List cartas;
private AlgoritmoOrdenacion algoritmo;
public void setAlgoritmo(AlgoritmoOrdenacion algoritmo) {
this.algoritmo = algoritmo;
}
public class Mazo {
List cartas;
public void ordena() {
cartas.sort(null);
}
public class Main {
public static void main(String[] args) {
Baraja baraja = new Baraja();
Mazo mazo = baraja.getMazo();
System.out.println("Baraja original: ");
System.out.println(mazo.toString());
mazo.ordena();
System.out.println("\nOrdenado NATURAL(por palo y numero incrementando): ");
System.out.println(mazo.toString());
}
}
public class Mazo {
List cartas;
public void ordena() {
cartas.sort(null);
}
public void ordena(Comparator comparador) {
cartas.sort(comparador);
}
import java.util.Comparator;
public class ComparadoresDeCartas {
//Primer algortimo alternativo de ordenacion
public static class PorPaloYNumeroDecreciente implements Comparator<Carta> {
@Override
public int compare(Carta carta1, Carta carta2) {
if (carta1.equals(carta2)) {
return 0; //Cartas son iguales
}
else {
if (carta1.getPalo().equals(carta2.getPalo())) {
//Mismo palo, el orden depende del valor de las cartas
int posiC1 = 0, posiC2 = 0;
for (int i = 0; i < Baraja.numeros.length; i++) {
if (carta1.getNumero().equals(Baraja.numeros[i]))
posiC1 = i;
if (carta2.getNumero().equals(Baraja.numeros[i]))
posiC2 = i;
}
//Tenemos sus posiciones numéricas, podemos compararlas para decidir el orden.
if (posiC1 == posiC2)
return 0; //Número es igual
else if (posiC1 < posiC2)
return 1; //c1 es menor que c2, devolvemos positivo para tener orden decreciente
else
return -1; //c2 es menor que c1, devolvemos negativoo para tener orden decreciente
}
else //Los palos son distintos, aquí no importa el número de carta, el orden depende los palos
return carta1.getPalo().compareTo(carta2.getPalo());//Retornamos la comparación por defecto de Strings
}
}
}
}
public class Main {
public static void main(String[] args) {
Baraja baraja = new Baraja();
Mazo mazo = baraja.getMazo();
System.out.println("Baraja original: ");
System.out.println(mazo.toString());
mazo.ordena();
System.out.println("\nOrdenado NATURAL(por palo y numero incrementando): ");
System.out.println(mazo.toString());
mazo.ordena(new ComparadoresDeCartas.PorPaloYNumeroDecreciente());
System.out.println("\nOrdenado por palo y numero decrementando: ");
System.out.println(mazo.toString());
}
}
public class ComparadoresDeCartas {
//Primer algortimo alternativo de ordenacion
public static class PorPaloYNumeroDecreciente implements Comparator<Carta> {
@Override
public int compare(Carta carta1, Carta carta2) {
if (carta1.equals(carta2)) {
return 0; //Cartas son iguales
}
else {
if (carta1.getPalo().equals(carta2.getPalo())) {
//Mismo palo, el orden depende del valor de las cartas
int posiC1 = 0, posiC2 = 0;
for (int i = 0; i < Baraja.numeros.length; i++) {
if (carta1.getNumero().equals(Baraja.numeros[i]))
posiC1 = i;
if (carta2.getNumero().equals(Baraja.numeros[i]))
posiC2 = i;
}
//Tenemos sus posiciones numéricas, podemos compararlas para decidir el orden.
if (posiC1 == posiC2)
return 0; //Número es igual
else if (posiC1 < posiC2)
return 1; //c1 es menor que c2, devolvemos positivo para tener orden decreciente
else
return -1; //c2 es menor que c1, devolvemos negativoo para tener orden decreciente
}
else //Los palos son distintos, aquí no importa el número de carta, el orden depende los palos
return carta1.getPalo().compareTo(carta2.getPalo());//Retornamos la comparación por defecto de Strings
}
}
}
//Segundo algoritmo de ordenacion
public static class PorNumeroIncrementalYPalo implements Comparator<Carta> {
@Override
public int compare(Carta carta1, Carta carta2) {
if (carta1.equals(carta2)) //Cartas son iguales
return 0;
else {
if (carta1.getNumero() == carta2.getNumero()) //Mismo número, se ordenará por palo
return carta1.getPalo().compareTo(carta2.getPalo());
else {//Distinto número de carta
//Averiguamos el valor de estas cartas según posición en el array
int posiC1 = 0, posiC2 = 0;
for (int i = 0; i < Baraja.numeros.length; i++) {
if (carta1.getNumero().equals(Baraja.numeros[i]))
posiC1 = i;
if (carta2.getNumero().equals(Baraja.numeros[i]))
posiC2 = i;
}
//Tenemos sus posiciones numéricas, podemos compararlas para decidir el orden.
if (posiC1 == posiC2)
return 0; //Número es igual
else if (posiC1 < posiC2)
return -1; //c1 es menor que c2
else
return 1; //c2 es menor que c1
}
}
}
}
}
public class Main {
public static void main(String[] args) {
Baraja baraja = new Baraja();
Mazo mazo = baraja.getMazo();
System.out.println("Baraja original: ");
System.out.println(mazo.toString());
mazo.ordena();
System.out.println("\nOrdenado NATURAL(por palo y numero incrementando): ");
System.out.println(mazo.toString());
mazo.ordena(new ComparadoresDeCartas.PorPaloYNumeroDecreciente());
System.out.println("\nOrdenado por palo y numero decrementando: ");
System.out.println(mazo.toString());
mazo.ordena(new ComparadoresDeCartas.PorNumeroIncrementalYPalo());
System.out.println("\nOrdenado por numero y palo incrementando: ");
System.out.println(mazo.toString());
}
}
public void ordena() {
cartas.sort(null);
}
public void ordena(Comparator comparador) {
cartas.sort(comparador);
}
if (entradaTeclado.toLowerCase().startsWith("a")) {
System.out.println ("SÍ comienza por la letra \"a\"");
} else {
System.out.println ("NO comienza por la letra \"a\"");
}
public class BackwardsStringSequenceTokio implements CharSequenceTokio {
private String cadena;
public BackwardsStringSequenceTokio(String cadena) {
//Construimos una cadena invertida a partir del argumento recibido
StringBuilder invertida = new StringBuilder();
for (int i = cadena.length()-1; i >= 0; i--)
invertida.append(cadena.charAt(i));
//La asignamos al atributo
this.cadena = invertida.toString();
}
@Override
public int length() {
return cadena.length();
}
@Override
public char charAt(int index) {
if (index < 0 || index >= length())
return '0';
else
return cadena.charAt(index);
}
@Override
public CharSequenceTokio subSequence(int start, int end) {
//Start no valido
if (start < 0 || start >= length())
return null;
//End no valido
if (end < 0 || end >= length())
return null;
//Start mayor que end
if (start > end)
return null;
//Start es igual que end
if (start == end) {
return new BackwardsStringSequenceTokio("");//String vacío
}
//Indices válidos
/*
* Ahora construiremos una sub cadena y a partir de ella retornaremos
* un objeto BackwardsStringSequenceTokio.
* Sin embargo, estos objetos al crearse automáticamente invierten
* la cadena recibida, así que estaremos retornando una sub cadena
* con un orden distinto del deseado.
* Para evitarlo, vamos a crear la sub cadena usando un bucle invertido
* así al construir el objeto BackwardsStringSequenceTokio
* la subcadena será retornada con el orden deseado.
*/
String subCadena = "";
for (int i = end -1; i >= start; i--)
subCadena += cadena.charAt(i);
return new BackwardsStringSequenceTokio(subCadena);
}
@Override
public String toString() {
return cadena;
}
}
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
BackwardsStringSequenceTokio secuencia = new BackwardsStringSequenceTokio("invertida");
System.out.println("Secuencia original: " + secuencia);
System.out.print("\nElija una posicion de la secuencia entre 0 y " + (secuencia.length()-1) + ": ");
int c1 = teclado.nextInt();
System.out.println("Caracter obtenido: " + secuencia.charAt(c1));
System.out.println("\nElija ahora posiciones de inicio y fin para hacer una subcadena.");
System.out.print("Inicio: ");
int start = teclado.nextInt();
System.out.print("Fin: ");
int end = teclado.nextInt();
BackwardsStringSequenceTokio subCadena = (BackwardsStringSequenceTokio) secuencia.subSequence(start, end);
if (subCadena == null)
System.out.println("Indices no validos");
else {
System.out.println("Subcadena obtenida: " + subCadena);
System.out.println("Longitud de subcadena: " + subCadena.length());
}
System.out.println("\n\t\tFIN DE PROGRAMA");
teclado.close();
}
Secuencia original: aditrevni
Elija una posicion de la secuencia entre 0 y 8: 4
Caracter obtenido: r
Elija ahora posiciones de inicio y fin para hacer una subcadena.
Inicio: 4
Fin: 8
Subcadena obtenida: revn
Longitud de subcadena: 4
FIN DE PROGRAMA
TD <- 0 // INICIALIZAR ACUMULADOR DE TOTAL DE DIAS
Para MM <- 1 Hasta M-1 Con Paso 1 Hacer
Segun MM Hacer
1,3,5,7,8,10,12: DD <- 31
4,6,9,11: DD <- 30
De Otro Modo:
DD <- 28
Fin Segun
TD <- TD + DD // ACTUALIZAR ACUMULADOR DE TOTAL DE DIAS
Fin Para
Segun MM Hacer
1,3,5,7,8,10,12: DD <- 31
4,6,9,11: DD <- 30
De Otro Modo: (Febrero)
DD <- 28
Fin Segun
diasAcumulados = 0
Para MM <- 1 Hasta M-1 Con Paso 1 Hacer
Es decir, nos han dado el mes 4, pues el bucle va a recorrer los meses 1,2 y 3Segun MM Hacer
1,3,5,7,8,10,12: DD <- 31
4,6,9,11: DD <- 30
De Otro Modo: (Febrero)
DD <- 28
Fin Segun
diasAcumulados = 0 + 31 = 31
diasAcumulados = 31 + 28 = 59
diasAcumulados = 59 + 31 = 90
diasAcumulados = 90 + 5 = 95
Para MM <- Mi Hasta Mf-1 Con Paso 1 Hacer
Segun MM Hacer
1,3,5,7,8,10,12: DD <- 31
4,6,9,11: DD <- 30
De Otro Modo:
DD <- 28
Fin Segun
TD <- TD + DD // ACTUALIZAR ACUMULADOR DE TOTAL DE DIAS
Fin Para
Rueda miRueda = new Rueda();
miRueda.setTipo("Mojado");
miRueda.setMarca("Dunlop");
miRueda.setDiametro(0.9);
miRueda.setGrosor(0.6);
miRueda.comprobarDimensiones(0.9, 0.6);
miRueda.comprobarDimensiones();
Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.
Abraham Lincoln (1808-1865) Presidente estadounidense.
aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación