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 - CoduJ

Páginas: 1 [2]
21
Buenas, espero que se encuentren bien.

Necesito ayuda para la comprensión de un código, realmente "entiendo" (nótese comillas) lo que está pasando... Pero no del todo:

Código: [Seleccionar]
     
//HorasTotrales es un objeto Scanner
Semanas = HorasTotales / 168;
Dias = HorasTotales%168 / 24;
Horas = HorasTotales%24;

¿Qué está pasando?, ¿por qué se usa el "%"? (¿se usa el resto para reducir valores para lo que son los días y horas? No entiendo), agradecería mucho si es que también me lo podrían explicar con detalle.

22
Sí.

Siempre que leas un dato numérico con nextInt(), nextDouble(), nextFloat(), nextByte()....  puedes estar seguro que la siguiente lectura con nextLine() fallará.

Por eso mejor hacer las lecturas como propuse, para evitar el problema.
¡Muchas gracias por la ayuda y el consejo!
Lamento seguir molestando con este tema, pero, ¿los Scanner influencian de alguna manera a que un programa tenga un mal rendimiento?

23
Ah vale, ya entiendo. Con lo de "preferencia" me refería a que el programa tiene ya de manera "predeterminada" la entrada de un tipo de dato

Entonces, un objeto Scanner al querer usarlo de manera "universal", es probable que no tome en cuenta algunos valores, en este caso, con mi programa, se saltea la entrada del dato String, ya que la última entrada de datos fue con un valor int, ocasionando que al volver ocupar el Scanner se genere ese "retorno de carro".

24
Mmm... Vale, creo que lo he captado.

Entonces, lo que está pasando ahí es que al tener de "denominador" las entradas numéricas estas se le suelen tener más preferencia que las de datos String, omitiendo el paso a que la entrada del valor String ya se haya considerado "ocupada". (Aún estoy tratando de entender esto... Lamento las molestias.)

Y bueno, el código:

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

public class Practica_1{
   public static void main(String args[]){
      int OPC_CrearCuenta = 0;
      boolean IntentoLogin = false;
      String Usuario, PassW, UsuarioL, PassWL;
      Scanner Input = new Scanner(System.in);
      Scanner InputUsuario = new Scanner(System.in);
      Scanner InputPassW = new Scanner(System.in);
     
      do{
         //registro
         System.out.println("--- INICIO DE SESION ---\n\tRegistro");
         System.out.print("Nombre de ususario: ");
         Usuario = InputUsuario.nextLine();
         System.out.print("Contraseña: ");
         PassW = InputPassW.nextLine();
     
         //inicio
         System.out.println("--- INICIO DE SESION ---\n\tIniciar");
         System.out.print("Nombre de ususario: ");
         UsuarioL = InputUsuario.nextLine();
         System.out.print("Contraseña: ");
         PassWL = InputPassW.nextLine();
     
     
         //ver si los datos coinciden
         if (UsuarioL.equals(Usuario) && PassWL.equals(PassW)){
            System.out.println("Has ingresado correctamente\n\tBienvenido " + Usuario);
            IntentoLogin = false;
         }else{
            System.out.println("Has ingresado el usuario de manera incorrecta");
            System.out.println("¿Deseas crear una nueva cuenta?\n1: SÍ | 2: NO");
            OPC_CrearCuenta = Input.nextInt();
         
            while(OPC_CrearCuenta > 2 || OPC_CrearCuenta < 1){ //mientras que el ususario no de la respuesta correcta
               System.out.println("No has ingresado de la manera correcta. . .");
               System.out.println("¿Deseas crear una nueva cuenta?\n1: SÍ | 2: NO");
               OPC_CrearCuenta = Input.nextInt();
            }
            //en el caso de crear cuenta
            if (OPC_CrearCuenta == 1){
               System.out.println("Has decidido crear una nueva cuenta. . .");
               IntentoLogin = true;
            }else if (OPC_CrearCuenta == 2){
               System.out.println("Has decidido no crear la cuenta. . .");
               IntentoLogin = false;
            }
         }
      }while(IntentoLogin == true);
   }
}

25
Buenas, espero que se encuentren bien.
(Detalles sobre el programa, por si necesitan esa información)
En mi último proyecto, intenté programar un registro de usuario, el trabajo de este es simple, después del registro, el usuario tiene que volver a colocar sus datos (Nombre y contraseña), para que después el programa los compare, en el caso de que los datos coincidan, se imprimirá un mensaje en la pantalla diciendo que el "registro" de la cuenta se haya creado de manera satisfactoria, acompañado con un mensaje con el nombre del usuario, de lo contrario, el programa preguntará si quieres crear una nueva cuenta, en el caso de que no, pues cierra el programa, en el caso de que sí, se activará un bolean.
(Aquí mi duda)
Bien, y para esto utilizaba obviamente una clase Scanner, para poder introducir datos por teclado, y todas las variables eran dependientes de solo un objeto Scanner (llamado "Input").
Todas estas acciones, dependían de una booleana, ya que con esta inicializaba un bucle do-while, y he aquí mi duda, al momento de que el programa iniciará todo iba normal, pero al momento de repetir el proceso mediante el do-while, por alguna razón, en la parte en donde se tenía que colocar un nombre, se saltaba, quedando un espacio en vacío, no tenía ni idea del porqué pasaba (incluso creí que era bug del IDE), pero resultaba que al momento de introducir el nombre del usuario, la variable String estaba ocupada, incluso si en algún momento del código especificaba  sobre dejarla vacía (Usuario = "") no funcionaba, pero en cuanto cambie de objeto Scanner se soluciono, ¿por qué pasa esto?, ¿qué me recomiendan para utilizar mejor la clase Scanner?

26
Aprender a programar desde cero / Re:Sistema de "regreso"
« en: 15 de Abril 2020, 23:40 »
¡Vale, muchas gracias por la ayuda!

27
Aprender a programar desde cero / Re:Sistema de "regreso"
« en: 15 de Abril 2020, 20:30 »
¿Entonces la estructura del código está bien? Pues, muchas gracias.
También tengo otra duda, ¿es también optimo hacerlo con un bucle do-while? Si no me equivoco, este bucle al menos garantiza que se realice un bloque del código una vez, y no entrará en el bucle si cierta condición no se cumple, creo que quedaría más profesional.

28
Buenas, espero que se encuentren bien.

Soy relativamente nuevo en programación, y el lenguaje que estoy aprendiendo es Java, y este es el primero que me lo estoy tomando enserio en el estudio.

Usualmente, me suelo poner en práctica teorías, simplemente repasar o mejorar un proyecto, y en este caso, intenté de hacer un sistema de banco, con las opciones: Ver dinero; Sacar dinero; Depositar; Salir.

Para no tener que volver a compilar el proyecto (y además para simular que estoy programando un banco...) hice un bucle para mantener el usuario una vez termine alguna acción, vuelva desde el principio (claro, una vez no elija la opción de "Salir"), pero me quede con la duda si es que realmente debería ser así, por ejemplo:

Código: [Seleccionar]
while(Variable == true){
    //hacer X acción
    if (X == true){
        Variable = false;
    }
}
De antemano, muchas gracias.
(Si quieren, puedo mostrar el código de mi "banco" también.)

Páginas: 1 [2]

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".