Java - Ayuda por favor, tema: arreglos unidimensionales

 
Vista:
sin imagen de perfil
Val: 12
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda por favor, tema: arreglos unidimensionales

Publicado por Marthy (11 intervenciones) el 23/01/2021 23:16:46
Enunciado:
Diseñar un programa que ingrese un arreglo lineal de N numeros enteros de tres cifras
Se pide calcular e imprimir :

El promedio de los numeros cuya cantidad de cifras primo sea mayor igual a 2 (es decir si se ingresa: 243, 578, 863; se sacará el promedio de 243 y 578; por tener digitos primos mayores o iguales al número 2, ya que 863 solo tiene un número primo que es el 3)

HE AVANZADO UN POCO PERO DESPÚES NO SÉ COMO IDENTIFICAR LOS DÍGITOS PRIMOS DE CADA NÚMERO Y ADEMÁS SACAR SU PROMEDIO, O COMO SERÍA EL CODIGO?. GRACIAS.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import javax.swing.JOptionPane;
 
public class Aplicacion0301Pa1b {
 
static int n=Integer.parseInt(JOptionPane.showInputDialog("Ingrese la cantidad de elementos del arreglo"));
 
static int num [] = new int[n];
public static void main(String[] args) {
 
datos();
mostrar();
promprimo();
 
}
 
 static void datos() {
    for(int i=0;i<n;i++)
    {
        do
        {
       num[i] = Integer.parseInt(JOptionPane.showInputDialog("Ingrese un numero entero de tres cifras"));
       if(num[i]<100 || num[i]>999)
       JOptionPane.showMessageDialog(null,"No ingreso un numero de tres cifras. Pruebe otra vez");
       }
        while(num[i]<99 || num[i]>1000);
   }
  }
 
static void mostrar(){
    for(int i=0;i<n;i++){
 
        System.out.print(num[i]+"  ");
   }
        System.out.println("");
   }
 
static void promprimo(){
    double prom;
    int mayor,ultimacifra,cont=0;
    boolean primo = false;
    for(int i=0;i<n;i++){
     if(num[i]>0){
     ultimacifra=num[i]%10;
        for(int j=ultimacifra;j>0;j--){
            if(ultimacifra%j==0){
            cont++;
            }
       }
        if(cont==2){
        primo=true;
        }
 
 
        num[i]=num[i]/10;
     }
 
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda por favor, tema: arreglos unidimensionales

Publicado por Kabuto (1381 intervenciones) el 24/01/2021 00:31:51
Hola.

Puedes valerte de un segundo método que reciba el dígito que queremos saber si es primo, y devuelva true o false.
Puesto que solo vamos a analizar cifras entre 0 y 9, ni siquiera es necesario hacer cálculos complejos para saber si es primo o no.
Ya sabemos que los primos entre 0 y 9 son 2, 3, 5 y 7.
Así que son un simple switch determinamos de forma sencilla si un digito es primo o no:

1
2
3
4
5
6
7
8
9
10
11
static boolean esPrimo(int digito) {
    switch(digito) {
    case 2:
    case 3:
    case 5:
    case 7: //Estos son los primos existentes entre 0 y 9
        return true;
    default:
        return false;
    }
}

Y aunque parezca tontería hacer un método para "tan poca cosa", lo cierto es que luego facilita mucho el código necesario para sumar los números con dos o más cifras que sean dígitos primos y calcular su promedio.
Ese método podría resolverse así. Incluye comentarios explicando la lógica que se sigue.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
static void promprimo(){
    double suma = 0d;
    int contador = 0;
    //Analizamos cada número contenido en el array
    for (int i = 0; i < num.length; i++) {
        //Trabajaremos con una copia de este número para no modificar el original
        int numero = num[i];
        int primosEncontrados = 0;
        //Dividiremos entre 10 el número en cada iteración para analizar dígito a dígito.
        while (numero > 0) { //Cuando el número tenga valor 0, es que ya hemos analizado todos sus dígitos y el bucle terminará.
            //Cogemos última cifra
            int ultimaCifra = numero % 10;
            //Comprobamos si es primo
            if (esPrimo(ultimaCifra))
                primosEncontrados++;
            //Eliminamos última cifra y repetimos bucle para evaluar siguiente cifra
            numero = numero / 10;
        }
        //Comprobamos cuantos primos hemos encontrado en este numero
        if (primosEncontrados >= 2) {
            //Dos o más primos, sumamos y contamos para después calcular promedio
            suma += num[i];
            contador++;
        }
    }
    //Finalizado el bucle for, calculamos promedio
    double promedio = suma / contador;
    JOptionPane.showMessageDialog(null, "Promedio de números con dos o más dígitos primos: " + promedio);
}


Pruébalo.
Cualquier cosa que no entiendas, por favor, no dudes en preguntar.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

Muchas gracias

Publicado por Marthy (11 intervenciones) el 24/01/2021 02:39:08
Gracias por ayudar, entendí todo tu proceso. Si te comento por aquí para más ayuda estaría bien? o en el foro general? o algún correo tuyo quizás? :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Muchas gracias

Publicado por Kabuto (1381 intervenciones) el 24/01/2021 13:07:41
Las dudas y consultas SIEMPRE en el foro general, por favor. Nunca contesto por privado.

Es lo mejor, así todo el mundo puede verlo y todos pueden aprender y aportar distintas soluciones.

Mi tiempo libre disponible es bastante limitado, pero suelo pasar por aquí casi a diario. Así que cualquier consulta que plantees por aquí la veré, y si puedo aportar algo de ayuda, sin duda lo haré.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar