Java - Ayuda para resolver este problema

 
Vista:

Ayuda para resolver este problema

Publicado por Jose (1 intervención) el 11/11/2021 16:52:50
Desarrolle un programa en Java el cual genere un código alfa numérico de
12 letras mayusculas y 12 números enteros, estos deben ser aleatorios, el código debe ser
intercalado empezando por letras.

Su programa debe ejecutarse siempre y esperar la tecla enter para crear un código nuevo, el
programa solo debe detenerse cuando el usuario ingrese la palabra exit en mayusculas o minúsculas
o combinado.

Ademas de esto su programa debe separar todos los códigos que se generen en validos o no validos,
un código se considera valido si la suma de los números que lo conforman es mayor a 110 y no es
valido en caso contrario.
Si un código es valido, este debe almacenarse en un diccionario el cual contenga la suma de los
números enteros como llave y el código como valor, note que en una ejecución se pueden crear
varios códigos.

Por otro lado si el código no es valido, este deberá almacenarse en una lista, donde cada elemento
tiene la siguiente forma (Suma Numérica, Código).

Al momento de que el usuario ingrese exit, el programa deberá desplegar el contenido del
diccionario de códigos validos y la lista de códigos no válidos y almacenar cada resultado en un
archivo por separado es decir un archivo para códigos validos y otro para codigos no validos, el
archivo debe contener la decha y hora de creación del código y el código separado por comas. El
archovo no debe ser borrado cada vez que se corra el programa si no agregar cada elemento según
sea el caso.
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 Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda para resolver este problema

Publicado por Billy Joel (875 intervenciones) el 12/11/2021 16:15:22
ufff está largo este,,,
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 Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda para resolver este problema

Publicado por Billy Joel (875 intervenciones) el 12/11/2021 16:27:54
Generar esos códigos válidos está complicado considerando que la suma de 12 veces 9 da 108 entonces nunca se va a llegar a 110.
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 Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda para resolver este problema

Publicado por Billy Joel (875 intervenciones) el 12/11/2021 16:37:00
Acá va el código...
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
 
public class AlfanumericosRandom {
 
    /**
     * Devuelve un número aleatorio entre los límites
     *
     * @param min
     * @param max
     * @return
     *
     */
    public static Integer getRandomNumber(int min, int max) {
        return new Random().nextInt(max - min + 1) + min;
    }
 
    private static final String[] letras = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"};
 
    /**
     * Genera un códgio aleatorio
     *
     * @return
     */
    public static Codigo generateCode() {
        String s = "";
        int suma = 0;
        for (int i = 0; i < letras.length * 2; i++) {
            if (i % 2 == 0) {
                //Letras
                s += letras[getRandomNumber(0, letras.length - 1)];
            } else {
                //Números
                Integer numero = getRandomNumber(0, 9);
                s += numero.toString();
                suma += numero;
            }
        }
        return new Codigo(s, suma);
    }
 
    /**
     * Guarda los coodigos en su respectivo archivo
     *
     * @param isValido
     * @param codigos
     */
    public static void guardar(boolean isValido, Map<Integer, Codigo> codigos) {
        FileWriter fichero = null;
        PrintWriter pw;
        try {
            fichero = new FileWriter("c:/bjo/codigos_" + (isValido ? "validos" : "invalidos") + ".txt", true);
            pw = new PrintWriter(fichero);
            codigos.entrySet().forEach(e -> {
                pw.println(e.getValue().getFecha() + "," + e.getValue().getCode());
            });
        } catch (IOException e) {
            e.printStackTrace(System.out);
        } finally {
            try {
                if (fichero != null) {
                    fichero.close();
                }
            } catch (IOException e2) {
                e2.printStackTrace(System.out);
            }
        }
    }
 
    public static void main(String[] args) {
        System.out.println("Generando códigos");
        Scanner sc = new Scanner(System.in);
        Map<Integer, Codigo> validos = new HashMap();
        Map<Integer, Codigo> noValidos = new HashMap();
        while (true) {
            System.out.print("Ingrese exit para salir, de otro modo presione enter: ");
            String texto = sc.nextLine();
            if (texto.equalsIgnoreCase("exit")) {
                break;
            } else {
                Codigo c = generateCode();
                if (c.isValido()) {
                    validos.put(c.getSuma(), c);
                } else {
                    noValidos.put(c.getSuma(), c);
                }
            }
        }
 
        System.out.println("Validos: ");
        validos.forEach((k, v) -> {
            System.out.println(k + ": " + v.getCode());
        });
 
        System.out.println("No validos: ");
        noValidos.forEach((k, v) -> {
            System.out.println(k + ": " + v.getCode());
        });
 
        guardar(true, validos);
        guardar(false, noValidos);
    }
}
 
class Codigo {
 
    private String code;
    private final String fecha;
    private int suma;
    private boolean valido;
 
    public Codigo(String code, int suma) {
        this.code = code;
        this.suma = suma;
        valido = suma > 110;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        fecha = sdf.format(new Date()).replace(" ", "T");
    }
 
    public String getFecha() {
        return fecha;
    }
 
    /**
     * @return the code
     */
    public String getCode() {
        return code;
    }
 
    /**
     * @param code the code to set
     */
    public void setCode(String code) {
        this.code = code;
    }
 
    /**
     * @return the suma
     */
    public int getSuma() {
        return suma;
    }
 
    /**
     * @param suma the suma to set
     */
    public void setSuma(int suma) {
        this.suma = suma;
        valido = suma > 110;
    }
 
    public boolean isValido() {
        return valido;
    }
 
}

Saludos,
Billy Joel
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