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 ... 28 29 30 31 32 [33] 34 35 36 37 38 ... 50
641
Citar
tambien podrias ayudarme con el codigo Tener control de acceso mediante administradores: solo ciertos usuarios podrán acceder al sistema mediante un identificador y una contraseña.

Sí, esta parte tampoco yo tengo claro que se espera que hagamos.
Si algo sencillo como establecer un nombre y contraseña y solicitarlos al iniciar programa, o algo más elaborado usando una clase Usuario y que solo algunos de estos usuarios sean considerados como administradores y solo a ellos se les permita acceder al programa.

Quizás esto lo podemos dejar para lo último, además ahora mismo no puedo ayudar demasiado porque, misterios de la vida, se me acaba de morir la tecla "espacio" del teclado y escribir cosas es un suplicio.
Este texto que escribo, los espacios en blanco los consigo haciendo copy/paste del espacio en blanco de otro texto, ja, ja..
Me río, pero mañana me tocará comprarme otro teclado  :P

642
Ok.

Lo único a mencionar es que de esta clase ya puedes quitar estas dos líneas:

Citar
import java.util.ArrayList;
import java.util.Scanner;

public class ListaCantantesFamosos {
    ArrayList <String> listaCantantes; //Declaración del objeto ArrayList
    private String entradaTeclado;

Un saludo.

643
La clase Doctor (mejor con la primera letra en mayúscula para respetar la convenciones) no debería tener un método main().

El método main() irá en otra clase, que será la clase principal encargada de poner el programa en marcha, mostrar menús, pedir datos al usuario, gestionar doctores, pacientes y citas, etc...

La clase Doctor simplemente ha de modelar los atributos y métodos que podamos necesitar de un Doctor para este programa.
La clase Doctor, por si sola, no debe funcionar como un programa que se pueda ejecutar, por eso no debe llevar un método main().
Le has puesto un método main() vacío, así que en realidad no afecta demasiado. Pero es que no debe tenerlo, ni lleno ni vacío.

Así que se lo puedes(debes) quitar.
Por lo demás, parece todo correcto. Así que de igual modo, puedes escribir la clase Paciente (recuerda, sin método main()  ;) )

Citar
package clinica;

import javax.swing.JOptionPane;


public class Doctor {

   public static void main(String[] args) {}
   
      private String id;
      private String nombre;
      private String apellidos;
      private String especialidad;
     
      public Doctor(String id, String nombre, String apellidos, String especialidad) {
         this.id = id;
         this.nombre = nombre;
         this.apellidos = apellidos;
         this.especialidad = especialidad;
      }

      public String getId() {
         return id;
      }

      public void setId(String id) {
         this.id = id;
      }

      public String getNombre() {
         return nombre;
      }

      public void setNombre(String nombre) {
         this.nombre = nombre;
      }

      public String getApellidos() {
         return apellidos;
      }

      public void setApellidos(String apellidos) {
         this.apellidos = apellidos;
      }

      public String getEspecialidad() {
         return especialidad;
      }

      public void setEspecialidad(String especialidad) {
         this.especialidad = especialidad;
      }
     
      /**
       * Muestra por panel todos los datos del doctor
       */
      public void mostrar() {
         String mensaje = "ID doctor: " + id + "\nNombre: " + nombre
               + "\nApellidos: " + apellidos + "\nEspecialidad: " + especialidad;
         JOptionPane.showMessageDialog(null, mensaje, "Mostrar doctor", JOptionPane.INFORMATION_MESSAGE);
      }

}

644
Aprender a programar desde cero / Re:Java - Opinión sobre código
« en: 04 de Agosto 2020, 01:32 »
Hola, un detallito.
La clase Byte también te permite parsear un String.

Así que estos parseos a Integer + casteos a byte:

Código: [Seleccionar]
opc = (byte) Integer.parseInt(Input.next());
Los puedes hacer directamente así:
Código: [Seleccionar]
opc = Byte.parseByte(Input.next());

Y otra cosa, dices que has estado aprendiendo POO..., pues este habría sido un ejercicio interesante para aplicarlo: una clase Producto, tal vez unas clases Comida, Decoracion, Herramienta que hereden de Producto..., quizás una clase Compra que reciba Productos y calcule el importe final...

Hay posibilidades para practicar POO



645
Hola.
Comienza a elaborarlo poco a poco, dando pequeños pasos.

Parece evidente que como mínimo, se van a necesitar dos clases: Doctor y Paciente
De hecho el enunciado ya te dice cuáles serían sus atributos básicos.

Comienza por escribir estas clases y cuando las tengas, vemos cómo seguir.

646
Placer es mío.
Muy interesante lo que realizas en el vídeo, por cierto.

Un saludo.

647
Hola.
No hay ninguna norma para novatos.

El staff del foro es reducido y el tiempo que podemos dedicar al foro es limitado.
Así que es "normal" que vuestras publicaciones no reciban respuesta inmediata. Es algo que tenemos que intentar mejorar dentro de nuestras posibilidades.

Espero que esto no os desanime y que sigáis practicando y aprendiendo.

Un saludo

648
Hola.
El código está bien y cumple lo que se pide el enunciado.
Pero hay algunas cosas que yo cambiaría.

Primero, yo no haría la petición de datos por teclado desde la clase ListaCantantesFamosos.
Esta clase debe recibir los datos, pero no necesariamente ser quien las pida.

Me refiero a que el objeto Scanner para pedir datos, lo pondría en la clase Main y que se encargue ella de pedir los datos y pasárselos a ListaCantantesFamosos.

Que si se quiere, se puede hacer que sea ListaCantantesFamosos quien pida los datos con un Scanner, pero al menos a mí, me parece más lógico que sea la clase Main quien se encargue de esa tarea.

Fíjate que luego en el Main, para preguntar al usuario si quiere repetir el bucle para seguir añadiendo nombres, usas un método perteneciente a  ListaCantantesFamosos para esta entrada de datos.
ListaCantantesFamosos ha de modelar y gestionar una lista de nombres, no debería tener que encargarse de pedir el dato que decide si el bucle de otra clase distinta se va a repetir o no.

Cada clase ha de encargarse de lo "suyo". Y esto me lleva a otro cambio que haría.
El bucle for extendido, tú lo haces desde la clase Main. Y para que esta clase pueda acceder al atributo ArrayList de cantantes, no puedes poner como private dicho atributo, que en principio es lo ideal.
Sería mejor que sea la propia clase ListaCantantesFamosos quien tenga un método que se encargue de recorrer y mostrar la lista con el for extendido.
Así, no tendrá necesidad de que clases ajenas puedan acceder directamente a su atributo ArrayList.

Y por último, para optimizar más el código, en el Main yo usaría un do while para pedir al usuario nuevos nombres y evaluar si quiere continuar.

Este bucle, como la condición de salida se evalúa al final, garantiza que al menos una vez se va a ejecutar el código que contiene.
Como el enunciado pide que solicitemos al menos un nombre al usuario, este bucle nos viene bien para pedir ese nombre obligatorio y luego ya el usuario decide si continuar o no.

Te pongo aquí el código que yo haría. Échale un vistazo para comparar los cambios.
Puede que antes previamente quieras intentar por tu cuenta hacer un nuevo código con los cambios que he comentado, pero si no te ha quedado claro lo que he intentado explicar, seguramente te será más revelador si ves mi código.
Pregunta lo que sea, un saludo.  ;)

Clase ListaCantantesFamosos
Código: [Seleccionar]
public class ListaCantantesFamosos {

private ArrayList<String> listaCantantes;

public ListaCantantesFamosos() {
listaCantantes = new ArrayList<String>();
listaCantantes.add("Jose Jose");
listaCantantes.add("Alejandra Guzman");
listaCantantes.add("Julio Iglesias");
}

public void mostrarLista() {
System.out.println("\nLista de Cantantes");
System.out.println("----- -- ---------\n");
int i = 1;
for (String cantante: listaCantantes) {
System.out.println(i + "# " + cantante);
i++;
}
}

public void addCantante(String cantante) {
listaCantantes.add(cantante);
}

}

Clase Main
Código: [Seleccionar]
public class Test {

public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
ListaCantantesFamosos lista = new ListaCantantesFamosos();
String nuevoCantante = "";
String continuar = "s";

lista.mostrarLista();

do {

System.out.print("\nAñada un nuevo cantante: ");
nuevoCantante = teclado.nextLine();
lista.addCantante(nuevoCantante);

lista.mostrarLista();

System.out.print("¿Desea añadir más cantantes?(s/n): ");
continuar = teclado.nextLine();
}while(continuar.equals("s"));

teclado.close();
System.out.println("\n\t\tFIN DE PROGRAMA");
}

}

649
Un comentario, al ejecutarlo me queda gigante la ventana y no le pude dimensionar el tamaño, pero me sirve igual.

Vale, nunca me acuerdo de este detalle.
Lo que pasa es que yo tengo pantalla grande de 27" a 2560x1440p.
Entonces, tal y como yo lo veo, mi programa no me cubre ni un cuarto de la pantalla.
Pero claro, luego en otras pantallas de menor resolución (que es lo habitual), pues resulta que lo cubre por completo.

He reducido el tamaño de las fuentes y de la interfaz para que quede algo más pequeño, a ver si ahora te va mejor.

He añadido el selector de tiempo y cambiado el código para que publique cada línea según el tiempo indicado.
También con su semáforo indicador, igual que el reloj.

Nuevo zip con programa y código fuente para quien quiera verlo. Aunque el código fuente me ha quedado un poco desordenado con tanto cambio, a ver si le añado comentarios y lo documento, porque si no dentro de un mes o dos, ni yo mismo sabré entender que hace cada cosa je je..

Si necesitas algún cambio coméntalo y veré que puedo hacer.
Un saludo.


650
Vale, creo que ya entiendo.
Yo al principio pensaba que querías poder escribir varias líneas en el mismo archivo, al mismo tiempo.

Pero no, tú lo que quieres es tener varías líneas disponibles para poder escribir una u otra por separado.

Vale, lo he modificado añadiendo 20 campos de texto.
Y ahora se pueden elegir dos archivos por separado, uno para el reloj y otro para las líneas.

Además he hecho que guarde en disco las rutas de esos archivos así como el texto de las líneas, para no tener que escribirlas cada vez que se inicia el programa.
Estos datos se guardan en la carpeta personal del usuario que reporta el sistema operativo, ahí no debería haber problemas de permisos para que el programa pueda escribir y guardar estos datos, pero nunca se sabe.

Adjunto nuevo zip con la última versión del programa.

Y unas capturas de como ha quedado la interfaz. Creo que es lo que necesitabas.
Si no, indícalo a ver si podemos cambiarlo.

Un saludo. :D




651
El error puede deberse a que no tienes la máquina de Java actualizada.
Baja la última versión para tu sistema operativo desde este enlace:
https://www.java.com/es/download/

He hecho cambios.
Le he añadido un campo de texto donde puedes escribir todas las líneas y caracteres que quieras.
Lo que escribas en él, se escribirá en el archivo seleccionado cuando se pulsa el botón "Publicar".

A la opción del "temporizador", al proceso de escribir la hora cada segundo en el archivo, le he añadido como unas luces de semáforo, para que sea más evidente si el proceso está activo o no.
En rojo es que está detenido, en verde es que está activado.

Adjunto nuevo zip con código fuente y JAR ejecutable.

La interfaz queda así:




A ver si actualizando Java te funciona. Si no, miraré de compilarlo para una versión más antigua.

Un saludo

652
Hola.
Supongo que te refieres a lo que hicimos aquí.


Sí se puede hacer otra versión que escriba lo que necesites.

Mira, he hecho en Java, así rapidito una versión para escribir la hora como dices en un archivo de texto.
En el programa primero hay que escoger el archivo sobre el que queremos escribir.
Una vez escogido, se activa el botón que permite "Iniciar" el proceso.

Este proceso hace que cada segundo escriba en ese archivo la hora actual en formato hh:mm:ss, hasta que pulsemos el botón "Detener".

Lo adjunto en este mensaje en un archivo zip, con el código fuente para quien quiera verlo y un archivo .jar ejecutable para iniciar el programa (requiere tener Java JRE instalado)

También mencionabas de poder escribir más líneas y caracteres.
Se puede ampliar el programa y añadir un campo de texto grande donde escribas lo que quieras y enviarlo al archivo pulsando otro botón.

A ver si mañana encuentro tiempo para agregar algo así.

Un saludo.

653
Aprender a programar desde cero / Re:Thread.sleep() en Java
« en: 22 de Julio 2020, 01:32 »
Cuando ejecutas un programa, se inicia un hilo (thread), es decir, una secuencia de tareas que se procesan en orden, desde la primera hasta la última, hasta terminar y por tanto el hilo/proceso se cierra.
Esas tareas dependen de las instrucciones del programa y la siguiente tarea solo comienza cuando ha finalizado la tarea anterior

Por ejemplo, en el código que yo puse, se ejecutan cuatro tareas, que son mostrar los cuatro mensajes en pantalla.
Como hemos visto en ese mismo ejemplo, el hilo/proceso que se inicia para llevar a cabo estas tareas podemos mandarlo "dormir" con Thread.sleep() durante un tiempo determinado.

Bueno, la mayoría de programas que hacemos suelen ser "monohilo", o sea, un único hilo/proceso para realizar las tareas.

Pero para programas más avanzados vamos a preferir, incluso necesitar, hacer un programa "multihilo", es decir, abrir varios hilos de ejecución para repartir tareas y no sobrecargar el hilo principal.

Imagina por ejemplo, no se, que haces un programa en el que el usuario pueda juntar y editar vídeos y subir su composición a un servidor de Internet, tipo youtube, para que otros lo vean.
Si nuestro programa fuese monohilo, cuando el usuario ordena subir el vídeo al servidor, el programa quedaría paralizado hasta que el vídeo terminase de transferirse por completo.
Como dije antes, en un hilo la tarea siguiente no se ejecuta hasta que finaliza la tarea anterior.
Y si esta tarea anterior consiste en subir un vídeo, lo cuál puede llevar varios minutos, significa parar la "productividad" del programa hasta que este proceso termine.

Pero, si nuestro programa fuese multihilo, podríamos hacer que el proceso de subir el vídeo se encargase un hilo distinto al del programa principal. Así el vídeo se va subiendo en segundo plano y mientras tanto el usuario puede empezar a trabajar en su siguiente vídeo.
Incluso puede poner varios vídeos a subir al mismo tiempo.

Te he puesto un ejemplo muy concreto, pero tiene multitud de usos. Siempre que necesitemos realizar una tarea que sabemos que puede demorar cierto tiempo, aunque sea unos cuantos segundos, vamos a preferir hacerlo en un hilo separado para que la aplicación principal no se quede bloqueada esperando a que termine esa otra tarea más pesada.

En Java es muy fácil crear hilos. La habitual es usar la clase Thread.
Aquí pongo un pequeño ejemplo donde escribo una clase que hereda de Thread mediante la cuál poder crear hilos.
Estos hilos van a hacer una tarea estúpida, incrementar 3 bucles for anidados entre sí.
Es una tarea estúpida, pero pesada, de hecho en ordenadores poco potentes puede tardar un poquito en completarse esos bucles for.

En el ejemplo lo que hago es crear e iniciar 5 hilos paralelos realizando esta tarea.
Lanzan un mensaje cuando empieza y otro cuando terminan.
Esto sirve para ver algo importante sobre los hilos, cada uno va a su ritmo, según el sistema operativo les va dando/quitando recursos.
Esto implica que el primer hilo en activarse, luego puede que sea el último en terminar.

A continuación pondré el código para que lo pruebes y te hagas una idea.
De todos modos, ahora mismo te diría que no inviertas tiempo ni esfuerzo en esto de crear hilos.
No es algo que vayas a necesitar ahora y mejor invertir tiempo en aprender otras cosas de Java más necesarias e importantes.
Por ahora basta con que sepas que esto existe. Eso sí, pregunta lo que quieras.
Un saludo.

Código: [Seleccionar]
public class MultiHilo {

//Clase que hereda de Thread para crear un hilo de ejecución
private static class Hilo extends Thread {

private String nombreHilo;

public Hilo(String nombre) {
nombreHilo = nombre;
}

@Override
public void run() {
System.out.println("Iniciado el hilo " + nombreHilo);
for (int i = 0; i < 100000; i++) {
for (int j = 0; j < 100000; j++)
for (int z = 0; z < 100000; z++);
}
System.out.println("Finalizado el hilo " + nombreHilo);
}
}

//Método main para probar los hilos
public static void main(String[] args) {

Hilo hilo1 = new Hilo("Hilo 1");
Hilo hilo2 = new Hilo("Hilo 2");
Hilo hilo3 = new Hilo("Hilo 3");
Hilo hilo4 = new Hilo("Hilo 4");
Hilo hilo5 = new Hilo("Hilo 5");
//Iniciamos los hilos
hilo1.start();
hilo2.start();
hilo3.start();
hilo4.start();
hilo5.start();

}

}


654
Si lo tienes tal y como lo puse yo, debería funcionar.

Mira, he escrito un HTML rapidito con un botón para lanzar el script de pedir números.
Y me funciona sin problema el bucle, pide números hasta que introduzco "no".

Código: [Seleccionar]
<html>

<head>

<title>Pedir números</title> <meta charset="utf-8">

<script type="text/javascript">

function mostrar() {

let array = [];
let numeros
let respuesta;

numeros = 1;
numerosPares = 0
array [0] = 0; //sumaPositivos
array [1] = 0; //sumaNegativos
array [2] = 0; //ceros
array [3] = 0; //numerosPares
array [4] = 0; //promedioPositivos
array [5] = 0; //promedioNegativos

respuesta = "si";

while(respuesta != "no")
   {
      numeros = parseFloat(prompt("Ingrese un número"));
      respuesta = prompt("Desea continuar? Escriba 'si' para continuar, 'no' para salir");

      if (numeros == 0)
      {
      array[2]++;
      }
      else if(numeros >=0)
      {
      array[0] = array[0] + numeros;
      array[4]++;
      }
      else
      {
      array[1] = array[1] + numeros;
      array[5]++;
      }
     
      if (numeros % 2 == 0) {
         array[3]++;
      }
   }

   document.write("<h1>Resultados:</h1>");
   document.write("<br>");
   document.write("La suma de los números negativos es :" + array[1]);
   document.write("<br>");
   document.write("La suma de los números positivos es :" + array[0]);
   document.write("<br>");
   document.write("Cantidad de números positivos :" + array[4]);
   document.write("<br>");
   document.write("Cantidad de números negativos :" + array[5]);
   document.write("<br>");
   document.write("Hay " + array [2] + " ceros.");
   document.write("<br>");
   document.write("La cantidad de números pares es: " + array [3]);
   document.write("<br>");
   document.write("El promedio entre los números positivos es: " + (array[0] / array[4]));
   document.write("<br>");
   document.write("El promedio entre los números negativos es: " + (array[1] / array[5]));
   document.write("<br>");
   document.write("La diferencia entre números positivos y negativos es: " + (array[0] - array[1]));


}

</script>

</head>

<body>

<button onclick="mostrar()">Pedir números</button>

</body>

</html>

655
Aprender a programar desde cero / Re:Thread.sleep() en Java
« en: 20 de Julio 2020, 12:55 »
Detener un hilo de ejecución con sleep() puede producir una excepción cuando se trabaja con varios hilos que interactúan entre ellos.

Este no va a ser el caso de tu programa seguramente, pero Java exige controlar esa posible excepción.

Seguramente te va a ser más que suficiente que uses try catch en la parte del código donde quieres hacer un sleep().

Por ejemplo:

Código: [Seleccionar]
public class SleepConsola {

public static void main(String[] args) {

try {
System.out.println("Siguiente mensaje en 1 segundo");
Thread.sleep(1000);
System.out.println("Siguiente mensaje en 2 segundos");
Thread.sleep(2000);
System.out.println("Siguiente mensaje en 3 segundos");
Thread.sleep(3000);
System.out.println("Mensaje Final");
} catch (InterruptedException e) {
e.printStackTrace();
}

}

}

656
Hola de nuevo.
No necesitas incrementar la variable numeros cada vez que se repite el while.

Citar
while(respuesta != "no")
   {
      numeros++;
      numeros = parseFloat(prompt("Ingrese un número"));

Ni lo necesitas, ni sirve de nada, porque justo después de incrementarlo, eliminas su valor al usar esa misma variable para pedir al usuario que introduzca un número.
Si realmente necesitaras hacer esos incrementos, los estarías perdiendo. En todo caso tendrías que hacerlos con una variable distinta de la que usas para pedir dato al usuario, pero vamos, que en realidad no lo necesitas.

Otra cosa, cuando el número es positivo, en array[0] quieres ACUMULAR(sumar) este número y en array[4] lo que que queremos es CONTAR.
Tenemos que CONTAR cuántos positivos recibimos, para después, cuando el while() haya terminado porque el usuario ya no quiere seguir, será entonces cuando podamos calcular el promedio.

Pero si te fijas, en ambos casos estás ACUMULANDO, en array[4] no estás CONTANDO

Citar
      if(numeros >=0)
      {
      array[0] = array[ 0] + numeros;
      array [4] = array [4] + numeros;
      }

Si lo que queremos es CONTAR, lo que hay que hacer es incrementar en 1 y no sumar el número que nos han dado.

Podemos hacerlo así:
Citar
      if(numeros >=0)
      {
      array[0] = array[ 0] + numeros;
      array[4] = array[4] + 1;
      }

O así, viene a ser lo mismo
Citar
      if(numeros >=0)
      {
      array[0] = array[ 0] + numeros;
      array[4]++;
      }

Para los negativos, te pasa lo mismo, en array[5] hay que CONTAR, no ACUMULAR.

Sobre contar los 0.
Yo creo que el enunciado se refiere a que hay que contar solo cuando el usuario introduce el valor 0, ya que no es ni positivo ni negativo, pues se cuenta por separado en su propia variable.
Creo que no se refiere a que también cuentes los 0 si el usuario teclea por ejemplo: 200, 1000,...
Se podrían contar, pero el código se complica bastante más y repito que creo que no es lo que se pide.

En cualquier caso, te propongo que de momento solo cuentes cuando el usuario introduzca el valor 0.
Y luego, cuando el código ya esté terminado y funcionando bien, se puede intentar hacer lo de contar los 0 de cualquier número introducido.

De momento, cuenta solo el valor 0, y para ello hay que ampliar el if

Citar
while(respuesta != "no")
   {
      numeros = parseFloat(prompt("Ingrese un número"));
      respuesta = prompt("Desea continuar? Escriba 'si' para continuar, 'no' para salir");

      if (numeros == 0)
      {
      array[2]++;
      }
      else
if(numeros >=0)
      {
      array[0] = array[ 0] + numeros;
      array[4]++;
      }
      else
      {
      array[1] = array[1] + numeros;
      array[5]++;
      }
      /*
      if (numbers % 2 == 0) {
         return array [3];
      }
      else
      {}
      */
   }

Siguiente, contar los números pares.
Esta parte del código casi la tenías hecha, no se por qué luego no lo has visto claro e incluso has puesto una sentencia return.
La lógica del programa a seguir sería:

- Pedir número al usuario.
- Compruebo si es 0, y lo cuento en caso afirmativo
- Compruebo si es positivo, y en caso afirmativo, lo acumulo y lo cuento
- Compruebo si es negativo, y en caso afirmativo, lo acumulo y lo cuento
- Compruebo si es par, y en caso afirmativo, lo cuento


Este es el "guión" que estamos siguiendo. Así que tras comprobar si es 0, positivo o negativo. Lo siguiente es comprobar si es par:

Citar
while(respuesta != "no")
   {
      numeros = parseFloat(prompt("Ingrese un número"));
      respuesta = prompt("Desea continuar? Escriba 'si' para continuar, 'no' para salir");

      if (numeros == 0)
      {
      array[2]++;
      }
      else if(numeros >=0)
      {
      array[0] = array[ 0] + numeros;
      array[4]++;
      }
      else
      {
      array[1] = array[1] + numeros;
      array[5]++;
      }
      
      if (numeros % 2 == 0) {
         array[3]++;
      }

   }

Bien, el guión que hemos seguido hasta ahora, es el que hay que realizar MIENTRAS el while() esté funcionando.
Algunos de los computos que nos piden, no se pueden hacer hasta que el usuario haya terminado de introducir números, es decir, hay que hacerlos FUERA del bucle while()

Vamos a especificar mejor el guión a seguir:


MIENTRAS el usuario introduce números:
    - Pedir número al usuario.
    - Compruebo si es 0, y lo cuento en caso afirmativo
    - Compruebo si es positivo, y en caso afirmativo, lo acumulo y lo cuento
    - Compruebo si es negativo, y en caso afirmativo, lo acumulo y lo cuento
    - Compruebo si es par, y en caso afirmativo, lo cuento

DESPUÉS de que el usuario haya introducido números:
    - Calcular promedio de positivos (positivos acumulados / positivos contados)
    - Calcular promedio de negativos(negativos acumulados / negativos contados)
    - Calcular diferencia entre positivos y negativos (positivos acumulados - negativos acumulados)

MOSTRAR los resultados al usuario


En programación es muy útil escribir previamente un guión de los pasos que necesitamos seguir.

Bien, los cómputos que nos piden DESPUÉS de la inserción de números, tenemos dos opciones:
- Calcular primero y mostrar después.
- Calcular al mismo tiempo que los vamos a mostrar.

Como son cálculos sencillos, podemos hacerlos al mismo tiempo que mostramos resultados, tal y como lo estabas haciendo tú.
Para estos cálculos NO debemos usar la variable "numeros" en ningún momento.
Esa variable solo sirve para pedir un dato al usuario y computarlo.
No sirve para nada más, no nos sirve para calcular promedios, ya que esta variable "numeros" solo conserva el último dato que introdujo el usuario. No tiene nada más.

Citar
   document.write("<h1>Resultados:</h1>");
   document.write("<br>");
   document.write("La suma de los números negativos es :" + array[1]);
   document.write("<br>");
   document.write("La suma de los números positivos es :" + array[0]);
   document.write("<br>");
   document.write("Cantidad de números positivos :" + array[4]);
   document.write("<br>");
   document.write("Cantidad de números negativos :" + array[5]);
   document.write("<br>");
   document.write("Hay " + array [2] + " ceros.");
   document.write("<br>");
   document.write("La cantidad de números pares es: " + array [3]);
   document.write("<br>");
   document.write("El promedio entre los números positivos es: " + (array[0] / array[4]));
   document.write("<br>");
   document.write("El promedio entre los números negativos es: " + (array[1] / array[5]));
   document.write("<br>");
   document.write("La diferencia entre números positivos y negativos es: " + (array[0] - array[1]));

657
Hace años que no hago nada con JavaScript, pero la lógica de la programación es común a todos los lenguajes.

Y la lógica que aplicas, pues no es muy lógica la verdad  ;)

Primero incrementas la variable contador, sin motivo aparente, ya que no se te pide contar nada
Citar
contador++;
Ese incremento de contador, no importa de todos modos, porque ahora modificas su valor asignando lo que va a introducir el usuario. Cualquier cosa que hubieras contado, se pierde:
Citar
contador = parseFloat(prompt("Ingrese un numero positivo o negativo"));
Preguntas al usuario si quiere continuar. Quizás sería más lógico preguntarlo después de hacer los cálculos y no antes, pero bueno, la verdad es que no afecta al funcionamiento así que no pasa nada malo.
Citar
respuesta = prompt("Desea continuar? Escriba 'si' para continuar, 'no' para salir");

A continuación, la lógica pierde todo sentido.
En respuesta, donde el usuario te ha dicho si quiere continuar o no, cambias su valor juntando la respuesta más el número introducido.

Pero tampoco importa, porque en la siguiente líneas vuelves a modificar el valor de respuesta asignándole el valor de la variable multiplicacionNegativos, que lo único que tiene es el valor 1 que ha recibido al inicializarse.

Y luego a multiplicacionNegativos, le asignas su valor actual (que es 1) multiplicado por su valor actual (1).
Como 1 * 1 es igual a 1, pues multiplicacionNegativos sigue conservando su valor inicial.
Citar
if(contador<0)
{
   respuesta = respuesta + contador
   respuesta = multiplicacionNegativos;
   multiplicacionNegativos = multiplicacionNegativos * multiplicacionNegativos;
         break;
      }

No necesitas una variable contador, ni necesitas juntar el contador con la respuesta, ni nada de eso.

Prueba con el código como lo escribo a continuación. Yo no lo he probado pero diría que es correcto.
Pregunta si algo no te queda claro, pero creo que a simple vista verás lo que hace, y que es más sencillo de lo que parece.
Un saludo.

Código: [Seleccionar]
function mostrar()
{
let respuesta;
let numero;
        let sumaPositivos;
let multiplicacionNegativos;
numero = 0;
sumaPositivos=0;
multiplicacionNegativos=1;
respuesta = "si";


while(respuesta != "no")
{
numero = parseFloat(prompt("Ingrese un numero positivo o negativo"));

if(numero<0)
{
multiplicacionNegativos = multiplicacionNegativos * numero;
break;
}
else if(contador>=0)
{
sumaPositivos = sumaPositivos + numero;
break;
}
else
{
alert("Ingrese un número válido");
break;
}

respuesta = prompt("Desea continuar? Escriba 'si' para continuar, 'no' para salir");
}


document.getElementById("txtIdSuma").value = sumaPositivos;
document.getElementById("txtIdProducto").value = multiplicacionNegativos;

658
Solo comentar que no necesitas crear un nuevo objeto Scanner para cada dato que quieras pedir.
Te basta con uno solo:
Código: [Seleccionar]
System.out.println("Vamos a resolver una ecuación de segundo grado donde ax^2+bx+c=0");

Scanner a1=new Scanner(System.in);
System.out.println("Introduce un valor para a");
double a2=a1.nextDouble();

System.out.println("Introduce un valor para b");
double b2=a1.nextDouble();

System.out.println("Introduce un valor para c");
double c2=a1.nextDouble();

659
Hola.
El problema está en la variable "continuar".
Esta variable "continuar":

Citar
main(){
   char continuar;
   do{
   juegaDados();
   
 }while(continuar =='S');
 
}

No tiene absolutamente nada que ver, con esta otra "continuar":

Citar
int seguirJugando(){ //Continuar o cerrar el juego
   char continuar;

   
      puts("¿Continuar jugando? (S/N)\n");
      scanf("%c",&continuar);
      continuar = toupper(continuar); // Convierte a mayúsculas el contenido previo de continuar
      getchar();
      switch(continuar){
         case 'S': puts("Volver a jugar\n");
         break;
         case 'N': puts("Esta bien, pero se que volveras, hasta pronto!...\n");
           break;
           
         default: puts("No entendi tu respuesta asi que seguiremos jugando!.\n");
         continuar = 'S'; // Asigna arbitrariamente el valor de seguir jugando
         break;
      }
}

Porque están declaradas en distintas funciones, por lo tanto pertenecen a distintos ámbitos.
Así que la variable "continuar" que usas para preguntar al usuario, no afecta para nada al bucle donde decides si continuar o no.

Puedes hacerlo de otro modo.
Pedir directamente a la función seguirJugando() que retorne el char que ha leído del usuario y entonces usarlo para la condición del bucle.

Dejo aquí el código con ese cambio, además de otros cambios menores, como eliminar variables que no se usaban.

Código: [Seleccionar]
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<unistd.h>
#include<ctype.h> //Necesaria para usar la función de cambio de tipos: toupper();

void hacerTirada();
char seguirJugando();
void juegaDados();


int main(){
   do{
   juegaDados();
 }while(seguirJugando() =='S');
return 0;
}

void hacerTirada(){ //Tirar dados
   char tirar;

   do{
      puts("¿Realizar tirada? (S/N)");
      scanf("%c",&tirar);
      getchar();
      tirar = toupper(tirar); // Convierte a mayúsculas el contenido previo de tirar
      switch(tirar){
         case 'S': puts("Iniciando un nuevo juego...\n");
         break;
         case 'N': puts("Esta bien, tomate un tiempo para retomar un nuevo juego...\n");
         break;
         default: puts("No entendi tu respuesta! Intenta de nuevo.\n");
         break;
         sleep(2);
      }
   }while(tirar !='S'); // Mientras la respuesta no sea "S"
}
char seguirJugando(){ //Continuar o cerrar el juego
   char continuar;


      puts("¿Continuar jugando? (S/N)\n");
      scanf("%c",&continuar);
      continuar = toupper(continuar); // Convierte a mayúsculas el contenido previo de continuar
      getchar();
      switch(continuar){
         case 'S': puts("Volver a jugar\n");
         break;
         case 'N': puts("Esta bien, pero se que volveras, hasta pronto!...\n");
           break;

         default: puts("No entendi tu respuesta asi que seguiremos jugando!.\n");
         continuar = 'S'; // Asigna arbitrariamente el valor de seguir jugando
         break;
      }
      return continuar;
}
void juegaDados(){ //Cuerpo del juego
   int jugador, maquina;

   srand(time(0));
   hacerTirada();////////////////////////
   jugador = rand() % 6 + 1;
   maquina = rand() % 6 + 1;

   puts("Turno del usuario: tirando dados..."); //turno del usuario
   sleep(3); //Tiempo de espera
   printf("Valor de la tirada del jugador: %i\n",jugador);
   puts("Turno de la maquina: tirando dados..."); //turno de la maquina
   sleep(5);
   printf("Valor de la tirada de la maquina: %i\n",maquina);
   if(jugador > maquina){
      printf("\nG a n a s t e !\n");
   }
   else if (jugador == maquina){
      printf("\nE m p a t e !\n");
   }else{
      printf("\nP e r d i s t e !\n");
   }
}

660
Comunidad / Re:Presentación
« en: 11 de Julio 2020, 10:54 »
Bienvenido.

Para Acces poco podré ayudarte, yo me muevo más por la programación de carácter general: Java, C++...

Pero bueno, tu ve aportando y consultando lo que necesites, quizás así aprendamos los dos sobre la marcha je je.

Un saludo.

Páginas: 1 ... 28 29 30 31 32 [33] 34 35 36 37 38 ... 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".