Mostrar Mensajes

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.


Mensajes - Kabuto

Páginas: 1 ... 42 43 44 45 46 [47] 48 49 50
921
No soy un experto ni mucho menos, así que no puedo aportar mucho.

Pero se supone que la etiqueta base solo afecta a rutas relativas, no a las absolutas.

Si el enlace del www.google.com te falla, tal vez sea porque sea necesario poner el https:// delante para que sea considerada como absoluta.

922
Esto es muy habitual en la programación.
Conforme se va aprendiendo y familiarizándose con el lenguaje, cada vez se va consiguiendo obtener los mismos resultados con menos código.

Ha veces repito viejos ejercicios que ya había hecho tiempo atrás y ahora los resuelvo con menos instrucciones y más eficiencia.

En cualquier caso, lo importante es conseguir encontrar siempre soluciones, aunque sea empleando más código del necesario.
Con el tiempo y compartiendo código con otras personas, no solo se aprenden cosas nuevas si no que se entiende mejor lo que ya conocemos y sabremos aprovecharlo mejor.

Un saludo.

923
Hola,

sobre esta parte del código:
Citar
if (letra == 'n' || letra == 'N') {
               letra = 'n';
               tecla = letra;
            } else if (letra == 's' || letra == 'S') {
               letra = 's';
               tecla = letra;
            }

Entiendo que quieres asegurarte de que la letra será minúscula para que funcione la condición del while.

Pero haces una redundancia:
Citar
letra = 'n';
tecla = letra;

Podrías simplificarlo escribiendo directamente:
Citar
tecla = 'n';

De hecho, no necesitas la variable letra pudiendo usar directamente la variable tecla:
Citar
char letra = cadena.charAt(0);
tecla = cadena.charAt(0);
if (tecla == 'n' || tecla == 'N') {
   tecla = 'n';
} else if (tecla  == 's' || tecla  == 'S') {
   tecla  = 's';
}

Aún más, estos if para forzar que la letra introducida sea minúsucla, también te los puedes ahorrar.
Hay dos posibilidades para hacerlo:

1.- Modificar la condición del while para que acepte tanto 's' como 'S'
Citar
while(tecla == 's' || tecla == 'S');

2.-La más óptima, usar el método toLowerCase() de la clase String.
Tu primero usas una variable String para leer lo introducido por teclado, y luego extraes el primer caracter:
Citar
String cadena = entrada.getEntrada();
tecla = cadena.charAt(0);

Y luego usas código para asegurarte de obtener el carácter en minúsculas.

Pero puedes pedirle al String cadena que directamente te pase a minúsculas el caracter que le pides usando este método:
Citar
String cadena = entrada.getEntrada();
tecla = cadena.toLowerCase().charAt(0);

De este modo luego no tienes que andar preocupándote de si el usuario ha escrito en mayúsculas o minúsculas haciendo IF ni nada. EL carácter que has pedido ya estará en minúsculas.

Si algún dia necesitases lo contrario, obtenerlo en mayúsculas, existe el metodo opuesto:
Citar
String cadena = entrada.getEntrada();
tecla = cadena.toUpperCase().charAt(0);

Estos métodos de la clase String son muy socorridos y puedes usarlos de muchas formas.
Si por ejemplo quisieras asegurarte de que ABSOLUTAMENTE TODO lo que introduce el usuario sea en minúsculas, puedes colocar el método directamente en tu clase 'EntradaPorTeclado':
Citar
package CU00903C;

import java.util.Scanner;
/**
 * Para obtener entradas por teclado
 *
 * @author (Arnaldo Martinez)
 * @version (01_2016)
 */
public class EntradaPorTeclado{
   
    private String entradaTcl; //Campo de la clase
    //Constructor
    public EntradaPorTeclado(){
        entradaTcl= "";
        pedirEntrada(); //Llamado a un mètodo interno
    }
    //Mètodos de la clase
    public void pedirEntrada(){
        Scanner eEsc= new Scanner(System.in);
        entradaTcl= eEsc.nextLine().toLowerCase();
    }
   
    public String getEntrada(){
        return entradaTcl;
    }
}




924
Hmmm...
Desde Eclipse, entra en la opcion Run Configurations
En el listado de la izquierda pulsa en Java Application y a la derecha, en la pestaña Main, asegurate que en el campo Main Class está seleccionada tu clase Principal.
Si no lo estuviera, puedes buscarla con el boton Search...

925
Entonces cuando creamos otra variables tipo int, en este caso int T; T = 8;, cuando asignamos un valor que es 8, ese valor ocupa la posición 8 del array numeroDeCoches[10];
y cuando lo inicializamo c, pero se imprime ya que la variable T esta en la posición 8 de array.

No, la variable T no está en ninguna posición del array. Es una variable independiente, que tiene un valor, en este caso 8.
Dicha variable, tu puedes utilizarla según tus necesidades.
La puedes usar para hacer una operación aritmética:
int resultado = 100 * T;

La puedes usar en una expresión condicional, ya sea para un IF:
if ( T == 8 )
    .......;
else
    .......;


....para un bucle:
for (int i = 0; i < T; i++)
    ........;


o utilizarla para cualquier otra cosa que se nos venga a la mente, y que entre dentro de las posibilidades de una variable de tipo int... incluido como ya hemos visto, para apuntar a las posiciones de un array:

numeroDeCoches[T] = 5;

Ahí estamos usando la variable T para apuntar a una posicion del array, pero esto no implica que la variable T esté ligada al array, o que forme parte de este.
La variable T es totalmente independiente del array, no tiene nada que ver con él, pero como tiene un valor numérico de tipo int, nos puede servir si así lo deseamos para apuntar a la posición de un elemento del array.

En esa línea le estamos diciendo que se vaya al elemento indicado por el valor de la variable T, en este ejemplo 8, y que ahí asigne un 5.
Pero tras esta instrucción, la variable T sigue teniendo valor 8 y sigue siendo ajena al array de manera que se puede seguir utilizando para otras operaciones cualquiera.

Para apuntar posiciones de elementos en un array, tenemos que usar un valor entero dentro de los corchetes [ ]
Este valor entero, de tipo int, podemos obtenerlo de donde nos de la gana, según necesitemos.

Podemos indicarlo directamente:
numeroDeCoches[8] = 5;

Podemos usar una variable:
numeroDeCoches[T] = 5;

Podemos usar el resultado de una operacion aritmética:
numeroDeCoches[4+4] = 5;

Podemos usar el valor que nos devuelva una función (puede que aún no hayas visto funciones):
numeroDeCoches[obtener_enteros_al_azar()] = 5;

Es decir, dentro de los corchetes tenemos que proporcionar un valor int.
Y para ello podemos utilizar cualquier expresión, elemento o porción de código cuyo resultado final sea eso, un valor int.

Y esto no implica que dicha expresión, elemento o porción de código esté ligado o relacionado con el array. Simplemente aprovechamos el valor int que nos proporciona para apuntar a un elemento del array.

Solo hay dos limitaciones en este aspecto:
1) El valor int ha de ser positivo, es decir 0 o mayor que 0.
Esto dará error:
numeroDeCoches[-8] = 5;

2) El valor int ha de ser inferior al tamaño del array.
En este ejemplo, el array tiene un tamaño de 10 elementos, por lo tanto sus posiciones se enumeran del 0 al 9.
Si le indico un numero cualquiera fuera de ese rango, se producirá una excepción (un error) durante la ejecución del programa y este dejará de funcionar.

Así que como hemos dicho, podemos obtener los valores int para apuntar a las posiciones de donde queramos, pero siempre que sepamos con seguridad que el valor int que vayamos a obtener, sea inferior al tamaño del array y que sea un numero positivo.

Por ejemplo, esta linea:
numeroDeCoches[obtener_enteros_al_azar()] = 5;

Es correcta y cualquier compilador C/C++ la dará por buena. Pero es peligrosa.
Se supone que la función obtener_enteros_al_azar() es una porción de código que hemos escrito por separado y que se encarga únicamente de proporcionarnos valores int al azar.

Si la hemos programado para que nos de enteros entre 0 y 9, que es el rango admitido por el array numeroDeCoches,  no habrá problema.
Pero si la hemos programado para que nos de cualquier valor int posible al azar, pues el programa fallará porque puede darnos valores fuera de ese rango.

926
Básicamente no entiendo que hace numeroDeCoches[T] = 54;, ¿ para que sirve ?

En este caso, T es una variable con un valor entero.
Entonces esa línea de código lo que hace es meter el número 54, en la posición del array que indique el valor de T.

Si T vale 8, pues estamos asignando el valor 54 en la posición 8 del array.

Supongo que la intención del ejemplo es comprobar que podemos acceder a los valores del vector, no solo usando directamente valores numéricos:
numeroDeCoches[0] = 12;
numeroDeCoches[3] = 23;

..si no también empleando variables:
int var1 = 0;
int var2 = 3;
numeroDeCoches[var1] = 12;
numeroDeCoches[var2] = 23;

Siempre han de ser variables de tipo int... si usamos un double u otro tipo el compilador lanzará error.

Usar variables es, de hecho, la forma más habitual de acceder a los elementos de un array.
Si quisieramos, por ejemplo, asignar el valor 100 a los 10 elementos de este array, se podría hacer así..
numeroDeCoches[0] = 100;
numeroDeCoches[1] = 100;
numeroDeCoches[2] = 100;
numeroDeCoches[3] = 100;
numeroDeCoches[4] = 100;
numeroDeCoches[5] = 100;
numeroDeCoches[6] = 100;
numeroDeCoches[7] = 100;
numeroDeCoches[8] = 100;
numeroDeCoches[9] = 100;

pero es un despropósito. Y ya ni te cuento si el array tuviera 1000 elementos, o 1000000...

En cambio, se puede hacer usando un bucle for haciendo que aumente una variable int de 0 a 9 y utilizamos esa variable para apuntar a los elementos del array:
for (int j = 0; j < 10; j++)
    numeroDeCoches[j] = 100;

927
De todo un poco... / Re:Código del juego el ahorcado en PSeInt
« en: 06 de Agosto 2017, 21:42 »
Me cuesta leer código para PSeInt...  :P ya que cuando hago pseudocódigo lo hago a mi manera, con lápiz y papel, y luego lo paso a Java o C++.
PSeINt, se que existe, pero nunca lo he usado.

Aún así, creo que entiendo tu código pero no veo donde puede haber error. De hecho, parece estar bastante bien para un principiante. Bucles, condicionales, el boolean encontrado... parecen estar usados de la forma correcta para conseguir lo que se necesita.

¿Te da algún tipo de error concreto o podrías decir que ocurre exactamente cuando no te funciona?

EDITO:

Ahora que me fijo...el boolean encontrando, ¿hay que declararlo previamente antes de usarlo?
Creo que en PSeINt se declara como "lógico", pero no se si se puede utilizar sin declararlo previamente.


EDITO2:
He codificado tu programa en lenguaje Java, calcándolo prácticamente paso a paso (aunque se podría optimizar aprovechando el mayor nivel de Java...) y me funciona perfectamente.
La lógica del código es correcta, así que lo único que se me ocurre que pueda fallar es lo que dije antes, la ausencia de declaración de la variable encontrando

928
Hmm.. no se si me voy a explicar bien.. Vamos a ver.

Primero, considera las clases como si fueran simples variables, aunque en realidad una clase sea algo mucho más complejo.

Dicho esto...
El problema está en que la clase miMarcoBis está declarada dentro de la clase CreandoMarcos.

La clase CreandoMarcos, no la estamos instanciando (no creamos un objeto CreandoMarcos)...lo que hacemos es ejecutar su metodo main(), que es un método estático.

Un método o una variable estática, significa que se puede ejecutar/acceder a ellos sin necesidad de instanciar la clase a la que pertenecen. Pero esto implica que dicho método (en este caso el main() ) no va a poder acceder a otros métodos o variables que no sean también estáticos igual que él, aunque pertenezcan a su misma clase

Si fuera del main() (pero dentro de la clase CreandoMarcos ), declaras una variable o método cualquiera.. verás que el main() no puede acceder a ellos si no los declaras como estáticos

Pongo un ejemplo muy sencillo:

Código: [Seleccionar]
public class MiClase {

    String saludo = "Hola compis";

    public static void main()(String[] args)
    {
        System.out.println(saludo)
    }
}

Este codigo, si lo probásemos.. daría el mismo error que te ha dado a tí.
Porque la variable saludo no es estática y el método main() si lo es.
A pesar de que la variable está ahí definida con un valor y todo, en realidad solamente podría existir si instanciasemos un objeto de la clase miClase

O si no, la solución es declararla como estática

Código: [Seleccionar]
public class MiClase {

    static String saludo = "Hola compis";

    public static void main()(String[] args)
    {
        System.out.println(saludo)
    }
}

Ahora el código si funcionaría, porque la variable saludo ahora es estática. Al igual que el método main(), pueden "existir" sin necesidad de instanciar un objeto de la clase miClase


Pues este mismo problema, es el problema que tiene tu clase miMarcoBis.
O la declaras fuera de la clase CreandoMarcos de manera que solo dependa de ella misma para "existir", o pruebas a declararla como static

No te se decir, cuál de las dos opciones es la más adecuada para este caso o cualquier otro.

No soy experto, soy un aprendiz más y la verdad nunca he usado clases estáticas.

929
Hola,

repasa especialmente el capítulo donde se explica como configurar las variables de entorno

Por otra parte, esto de las variables de entorno es útil solo en el caso de que queramos compilar nuestro código desde la línea de comandos del sistema.

Pero esto no es lo habitual, lo normal es que compilemos directamente desde nuestro IDE, ya sea BlueJ, Eclipse, NetBeans.... y a estos programas les da un poco igual el tema de las variables de entorno...

Digo esto, para que no te atasques demasiado con este asunto. No dudes en seguir adelante con el curso y pasar a lo importante, a aprender a programar.
El tema de las variables de entorno es algo que puedes solucionar más adelante, en cualquier momento del futuro, ya que no te va a impedir programar y compilar desde los entornos de desarrollo (IDE) habituales.

930
Hace años que no hago nada de JavaScript..

Y tengo una duda, cuando usas tu función liquido(), ¿donde está declarada la variable tcb?
Es que no la veo y tengo la duda de si tal vez la función liquido está modificando una variable que, aunque se llame tcb, no es la misma tcb de la funcion principal, sino una tcb local de la funcion liquido()... ya sabes, el ámbito (scope) de una variable depende de donde esté declarada.

En cualquier caso, puedes probar a modificar tu función liquido() para que en lugar de modificar directamente la variable tcb, devuelva un String con el texto que te interese.

Es decir:

Código: [Seleccionar]
function liquido(){
if (UI<=1){
return " Litro de ";}
else { return " Litros de ";}
}


Y luego en la funcion principal:

Citar
function prueba() {
var UI=document.getElementById('entradaPrueba').value;
if(isNaN(UI)){return false;}
var producto = "Producto de Prueba";
var agu = UI*91.8/100;
var texa = UI*3/100;


tcb = liquido();


if (UI<=1){
agu = agu*1000 + ml;
texa = texa*1000 + gr;
}
else{
if (agu*1000>=1000){agu=agu+li;}else{agu=agu*1000+ml;}
if (texa*1000>=1000){texa=texa+kl;}else{texa=texa*1000+gr;}
}
var resul =
tca+UI+tcb+producto+tcc+br+
a+nagu+agu+br+
b+ntexa+texa+br;


var procedimiento="<h1>PROCEDIMIENTO:</h1> PRODUCTO DE PRUEBA";


document.getElementById('salida').innerHTML=resul,
document.getElementById('procedimiento').innerHTML=procedimiento;
}


Repito que hago mucho que no toco JavaScript y puede que haya cometido/dicho alguna incorrección.

931
Hola,

tu método para buscar por nombre es este:
Código: [Seleccionar]
public void buscarPorNombre(String nombre){
       Componente encontrado = null;
       for(Componente actual : componentes){
           if(actual.getNombre().equals(nombre)){
               encontrado = actual;
               break;
           }
       }
            if(encontrado != null){
                encontrado.darDatos();
            } else {
                System.out.println("no se encontro al Componente");
            }
       
    }

Efectivamente, ese código solo te permite mostrar información de un único elemento, el primero que se encuentre.

Una posible solución para mostrar la información de todos los elementos que coincicidan con el nombre de la búsqueda, podría ser evitar detener el bucle con el break.
Y lo que hacemos dentro del bucle es mostrar directamente la información de todos los componentes que coincidan con el nombre indicado.

Podría ocurrir que ninguno coincidiese, en cuyo caso sería necesario informar por pantalla.
Para controlar si hemos encontrado coincidiencias o no, podemos servirnos de una variable booleana.

Por ejemplo:
Código: [Seleccionar]
public void buscarPorNombre(String nombre)
{
boolean encontrado = false;//Si hallamos alguna coincidencia, su valor cambiará a true

//Buscamos componentes que coincidan con el nombre indicado
for(Componente actual : componentes)
{
                    if(actual.getNombre().equals(nombre))
     {
                           actual.darDatos();
   encontrado = true;
     }
}

/*
* Busqueda finalizada.
* Si se han encontrado coincidencias, los datos de los componentes que
* coinciden habrán salido por pantalla.
* Si no se ha encontrado coincidencia ninguna, no habrá salido ninguna informacion
* en pantalla y sería conveniente informar de que no han habido coincidencias.
* Para saber si tenemos que informar o no, basta con consultar el valor de
* la variable "encontrado", si es false, debemos informar
*/

if (!encontrado)
System.out.println("No se encontraron componentes con el nombre: " + nombre);
}




932
Yo a veces he estado semanas atascado por tonterías como esta.

Que por cierto, en este caso me he dado cuenta porque me ha avisado Eclipse, el IDE que utilizo habitualmente para escribir mis programas.

Al copiar tu código, Eclipse me había puesto un "warning", un aviso indicándome que le parecía raro que un método tuviera el mismo nombre que la clase.

Es decir, al poner void, lo que pasaba es que Java ya no lo consideraba un constructor de la clase, si no que que lo estaba tratando como un método cualquiera.
Por lo tanto, en realidad tu clase carecía de constructor y el arrayList no estaba siendo inicializado.
Por eso al intentar añadir cantantes, se producía la excepción, porque el arrayList no estaba inicializado.

Al quitar lo de void, ahora ese método si es reconocido como un constructor de la clase, y entonces el ArrayList sí que se inicializa bien.

933
Ok, veo otro error.

En el constructor:

Citar
public void ListaCantantesFamosos()//inicializo el array
       {
           cantantes = new ArrayList<String>();
           cantantes.add("Pedro");
           cantantes.add("Chayanne");
           cantantes.add("Porta");
       }

Quita el void, los constructores son métodos especiales y no tienen que devolver nada, ni siquiera void.
Déjalo así:
Citar
public ListaCantantesFamosos()//inicializo el array
       {
           cantantes = new ArrayList<String>();
           cantantes.add("Pedro");
           cantantes.add("Chayanne");
           cantantes.add("Porta");
       }

Si lo quitas funcionará, al menos a mi me está funcionando

934
Seguramente el error está en este método, concretamente en la condición del bucle for

Citar
public void  mostrarLista(){//muestro la lista completa
        for (int i=0;i<=cantantes.size();i++){
            System.out.println("Cantante "+i+" "+cantantes.get(i));
        }
    }

Al recorrer vectores, arrayList y similares... el indice del bucle nunca debe ser igual al tamaño del array.

Supongamos que tienes 4 cantantes en el arrayList
Si tienes 4, estos cantantes están numerados del 0 al 3, es decir: 0,1,2,3

Entonces si al bucle le dices que el indice i aumente hasta que sea menor o igual que cantantes.size():
Citar
        for (int i=0;i<=cantantes.size();i++)

Puesto que cantantes.size() es igual a 4 (porque suponemos que tenemos 4 canantes)...le estas diciendo que empiece por la posicion 0 y vaya hasta la posicion 4.
Pero las posiciones en este caso son solo 0, 1 ,2 y 3...
Por eso, cuando intenta leer la posicion 4 del arraylist, como no existe, ocurre una excepcion de NullPointer.
Es decir, "Puntero Nulo", le has pedido que apunte a una posicion del arrayList que no existe (la posicion 4)

Para que el bucle for no se pase, tienes que decirle que la i ha de aumentar mientras sea menor que cantantes.size()
Citar
        for (int i=0;i<cantantes.size();i++)

DE este modo, recorrerá la posicion 0, 1,2,3... y cuando la i valga 4, el bucle finalizará y no intentará leer la posicion 4, la cuál no existe.

Prueba a hacer ese pequeño cambio y a ver si ahora sí te funciona

935
Aprender a programar desde cero / Re:JavaScript prueba del nueve
« en: 06 de Junio 2017, 11:28 »
Si quieres restar el valor 9 sucesivamente hasta que se quede en 9 o menos, tendrás que usar un bucle, por ejemplo un while

Código: [Seleccionar]
while (num1 > 9)
{
    num1 = num1 - 9;
}

Mientras num1 tenga un valor superior a 9, se irá restando 9 sucesivamente.
Cuando num1 deje de ser superior a 9, es decir, valga 9 o menos... el bucle finalizará.

936
Pero es que tu petición es muy genérica.
Vas a tener que dar datos más concretos, mostrar un HTML ya hecho que sirva como punto de partida, aclarar preguntas importantes como la que ha hecho DRANXZ88

¿Las notas se guardan en una base de datos?
¿Han de tener persistencia? Al cerrar el navegador, si luego cargamos la página otra vez, ¿han de aparecer las notas anteriormente creadas?
Porque en este caso hay que pensar en crear uan base de datos, como mínimo un XML sencillito

¿O no es necesario que persistan?

Yo personalmente, empezaría por crear el HTML y CSS simulando un "falso" bloc de notas, es decir, crear el "facade" (la fachada):
Titulo, texto, botón de añadir notas, y unas cuantas notas como si hubieran sido creadas.

Luego crearía el formulario para añadir notas, aunque al principio la información recogida no vaya a ninguna parte...

Teniendo ya eso funcionando, se puede usar como punto de partida para pensar el código JavaScript para recoger la información del formulario y crear nuevas "notas" en el "Bloc de Notas"

Supongo que cada nota, sera un div con texto dentro, o titulo de nota y texto...
Pues JavaScript tendrá que ir creando nuevos objetos div de este tipo con el texto recogido en el formulario.
Ejemplo genérico de como crear nuevos div
Código: [Seleccionar]
<script>
var divNota= document.createElement("div");
midiv.setAttribute("id","id para la nota");//Opcional... puede que no necesite un id
midiv.setAttribute("class","clase CSS para las notas");
midiv.innerHTML = "<p>Texto de la nota obtenida por formulario</p>";
document.body.appendChild(divNota); //Esto lo añade al body, o mejor aún...
document.getElementById('panelNotas').appendChild(divNota);//Esto lo añadiría a un supuesto div con id="panelNotas" que contendría las "Notas" que se vayan creando
</script>


Pero esto es lo último, lo primero es crear la web sin la funcionalidad JavaScript y tener ya diseñados esos div, con su CSS y tal..,

937
El atributo casado es de tipo boolean.
Un dato booleano solo admite dos valores posibles true o false

Es decir, al declarar una clase Persona:
Código: [Seleccionar]
public class Persona
{
    //Atributos de la clase
    private String nombre;
    private String apellidos;
    private int edad;
    private boolean casado;
    private String dni;

    //Constructor por defecto
    public Persona()
    {
         nombre="";
         apellidos="";
         edad=0;
         casado=false;
         dni="";
    }
}

Lo primero que hacemos es declarar los atributos, y de que tipo son.
Los declarados como String, estamos diciendo que los datos serán de "tipo texto".
Los declarados como int estamos diciendo que los datos serán valores numéricos enteros, es decir, sin decimales

Los declarados como boolean, estamos estableciendo que son valores que indicarán una respuesta directa true/false, es decir --> verdadero/falso, si/no,...

Las personas pueden tener muchos nombres distintos, muchas edades distintas... pero respecto a la información de "estar casado", solo hay dos posibilidades: o está casado (true), o no lo está (false)

No hay más opciones y para estos casos, los datos de tipo boolean son los más útiles porque representan esta doble posibilidad excluyente.

En el constructor por defecto, a este dato boolean habrá que darle un valor, ya sea true o false.
Elegir uno u otro depende del programador y en principio es irrelevante el que se escoja, ya que normalmente evitaremos trabajar con un objeto cuyos atributos no han sido correctamente establecidos, ya sea usando los setters, ya sea usando un constructor más completo.

Todo esto se entiende mejor cuando avances más en el curso. Verás que para una clase podemos definir todos los constructores que queramos, no solo el constructor por defecto.

Por ejemplo:
Código: [Seleccionar]
public class Persona
{
    //Atributos de la clase
    private String nombre;
    private String apellidos;
    private int edad;
    private boolean casado;
    private String dni;

    //Constructor por defecto
    public Persona()
    {
         nombre="";
         apellidos="";
         edad=0;
         casado=false;
         dni="";
    }

//Constructor completo con parametros
    public Persona(String nombre, String apellidos, int edad, boolean casado, String dni)
    {
         this.nombre=nombre;
         this.apellidos=apellidos;
         this.edad=edad;
         this.casado=casado;
         this.dni=dni;
    }
}

Esta clase tiene dos constructores.
Cuando en el código yo quiera construir objetos Persona, puedo elegir usar un constructor u otro.

Con el constructor por defecto, estaríamos instanciando un objeto Persona sin datos definidos, es decir, sin nombre, ni dni, la edad a valor 0 y establecida como soltera.
Código: [Seleccionar]
Persona persona1 = new Persona(); Con este objeto, no se podría trabajar bien, no contiene datos útiles... para trabajar con el antes tendrá que pasar por un proceso mediante el cual, usando los setters (persona1.setNombre("Andres"), persona1.setEdad(34), persona1.setCasado(true) ....), le demos unos datos válidos.

En cambio, si utilizo el constructor más completo con el cual le paso ya los argumentos necesarios para establecer los valores de los atributos...
Código: [Seleccionar]
Persona persona2 = new Persona("Susana", "Lopez", 25, false, "67824310-K"); ... ya obtengo directamente un objeto Persona con el que poder trabajar. Ya no necesitamos usar los setters para establecer valores.
Ya puedo, ayudandome con los getters..., hacer operaciones con este objeto:
- sacar un listado de personas solteras...
Código: [Seleccionar]
if (persona2.getCasado() == false)
     imprimirSolteros(persona2);
- contar cuantas personas son mayores de edad..
Código: [Seleccionar]
int contadorAdultos = 0;
if (persona2.getEdad() >= 18)
     contadorAdultos = contadorAdultos + 1;

-Etc...


Repito que todo esto lo irás entendiendo mejor conforme avanzas en el curso.
Al principio cuesta un poco, no tanto entender lo que se está haciendo sino el por qué ...., hasta que al haber visto más temas se tiene una visión más global de todo y entonces empezamos a "atar cabos" y comprender mejor el conjunto.

938
Aprender a programar desde cero / Re:CU00909C Ejercicios 1 y 2
« en: 18 de Mayo 2017, 12:20 »
en el segundo, sinceramente llevo varios días y a un no logro hallar la manera de como hacer que el random no genere números repetidos. Agradecería algo de apoyo.

Una forma que se me ocurre, usando los elementos básicos disponibles a este nivel (con Clases y Programacion Orientada Objetos podría ser más fácil), es la siguiente:

Sería recorrer el arreglo/vector/array (como queramos llamarlo...) y por cada una de sus posiciones, generar un numero random.
Antes de aceptarlo, volver a recorrer de nuevo el vector y comprobar si el numero random ya existe en el o no.
Si no existe, lo aceptamos y pasamos a la siguiente posicion.
Si existe, entonces lo descartamos, volvemos  a generar otro y repetimos la misma comprobacion.. así hasta que se genere un numero que no exista.

Entonces, para hacer esto, se necesitaría tres bucles anidados:

Primero, un bucle for que recorra las posiciones del vector, una a una...

Segundo, un bucle do...while donde se generarán números random mientras dichos números estén siendo descartados. Solo se detendrá cuando el número random haya sido aceptado.

Tercero, otro bucle for (uso un for each en este caso) que recorre todo el vector y comprueba si el numero random existe o no.
Si existe, indicaremos al bucle while que el número ha sido descartado para que siga repitiendose.
Si no existe, lo aceptamos  y le indicaremos al while que ya puede terminar.

Esto se lo comunicaremos con una variable booleana, que yo he llamado descartado

Te adjunto un programa donde se hace esto, para que lo veas y decidas si quieres incluirlo en tu programa.

Por curiosidad, he incluido un contador de numeros descartados. Así al final del programa se muestran los números generados al azar y también se informa de cuantos números han sido descartados durante el proceso.


Código: [Seleccionar]
import java.util.Random;

public final class SinRepetir {

public static void main(String[] args) {
Random rn = new Random();
int[] numeros = new int[10];//Aqui indicamos cuantos queremos generar, 10 en este caso
boolean descartado;
int contDescartados = 0; //Por curiosidad, contaremos cuantos numeros random serán descartados

/*
* Recorreremos las posiciones del vector una a una.
* Para cada una de ellas, generaremos un numero al azar y antes de aceptarlo
* volveremos a recorrer el vector completo para comprobar si el numero generado
* ya existe en el vector.
* Si no existe, lo aceptaremos y pasaremos a la siguiente posicion.
* Si existe, es decir, está repetido, lo descartaremos y volveremos a generar otro
* hasta que aparezca uno que no exista
*/
for (int i = 0; i < numeros.length; i++)
{
do//Este bucle se repetirá hasta que salga un numero random no repetido, es decir, mientras descartado == true
{
int numeroRandom = rn.nextInt(50) + 1;//Generamos entero entre 1 y 50
descartado = false;//De momento, el numero no está descartado

//Ahora recorremos el vector completo y comprobamos si el numero generado ya existe dentro de él
for (int numVector: numeros)
{
if (numVector == numeroRandom)//EL numero generado ya existe en el vector, hay que descartarlo
{
descartado = true;//Lo descartamos
contDescartados++;//Contamos el descarte, por curiosidad...
break;//Finalizamos bucle for, no hace falta seguir comparando
}
}

//Tras comprobar si el numero estaba repetido, ahora decidimos si aceptamos el numero random generado


if (!descartado)//No ha sido descartado, lo aceptamos. El bucle do..while terminará y pasaremos al siguiente numero del vector
numeros[i] = numeroRandom;
}while (descartado);
}

//Mostramos números generados
for (int n: numeros)
System.out.print(n + " ");

System.out.println("\nSe han descartado " + contDescartados + " numeros random");

}

}

939
Hola, no tengo muy claro que significa los paréntesis sin variables entre ellas
ejemplo:
public taxiCond(){

Los métodos/funciones pueden, o no, recibir variables.

Es decir, hay métodos que no necesitarán recibir variables para hacer sus tareas.

Por ejemplo, un método que simplemente mostrase un mensaje en pantalla, no necesitará recibir ninguna variable:
public mensajeDespedida(){...}

Si en cambio, quisieramos dar un saludo personalizado, entonces si se requiere recibir uan variable:
public mensajeSaludo(String nombreUsuario){...}

940
Esto excede por completo mis conocimientos Java.

Pero si puedo comentar que yo a veces he tenido problemas para leer determinados archivos, por ejemplo archivos de texto plano o fuentes TrueType, si las "empaquetaba" dentro del JAR.
La única forma de acceder a ellas, era colocándolos en una ruta externa, por ejemplo una carpeta que acompañase al JAR.

Esto no me pasaba con imagenes, podía incluirlas en el JAR y acceder a ellas usando por ejemplo:
Toolkit.getDefaultToolkit().getImage(MiClase.class.getResource("/gui/icono.png")



Es decir, si los archivos estaban dentro del JAR, no los encontraba, a pesar de que ejecutándolo desde el IDE si aceptaba esas ubicaciones.
Para acceder a ellos, tenía que dejarlos fuera del JAR y acceder a ellos mediante rutas relativas.

Prueba a ver si haciendo esto te funciona. Y luego a ver si alguien más sabio que nosotros puede explicar como acceder a cualquier tipor de archivo que esté inlcuido dentro del JAR

Páginas: 1 ... 42 43 44 45 46 [47] 48 49 50

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

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".