Java - Los datos del ArrayList desaparecen

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

Los datos del ArrayList desaparecen

Publicado por Fran (13 intervenciones) el 28/04/2021 01:10:47
Buenas amig@s,

Estoy construyendo un programa. Desde el main class se accede a lo que yo he llamado un "Main Menu". Desde alli accedo a una clase "College" donde añado datos a un ArrayList. Mientras está en esa clase todo bien. El problema viene cuando vuelvo al "Main Menu" (donde en el futuro espero hacer otras cosas) y voy de nuevo a la clase "College" y los datos de la ArraList han desaparecido.

Alguien me podría decir que ocurre y como se podría arreglar?

Dejo aquí mi codigo:

Clase Main:

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
package worldskillscompetitionapp6;
 
import java.util.Scanner;
 
public class WorldSkillsCompetitionApp6
{
    public static void mainMenu()
    {
        Scanner sc = new Scanner(System.in);
        String userChoice;
 
        do
        {
            System.out.println("Menu:\n"
                    + "1. College.\n"
                    + "2. Exit.");
            userChoice = sc.nextLine();
 
            switch(userChoice)
            {
                case "1":
                   College college = new College();
                   college.collegeMenu();
                   break;
 
                case "2":
                    System.out.println("See you in the next\n"
                            + "WORLD SKILLS COMPETITION\n");
                    System.exit(0);
 
                default:
                    System.out.println("Please, enter a number between 1 and 2\n");
            }
        }while(userChoice != "2");
    }
    public static void main(String[] args)
    {
 
        mainMenu();
    }
 
}

Clase College:

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
package worldskillscompetitionapp6;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
 
public class College
{
    Scanner sc =  new Scanner (System.in);
 
    private String collegeName;
    private String collegeID;
 
    List <College> listOfColleges =  new ArrayList<College>();
    String userChoice;
 
    public College()
    {
 
    }
 
    public String getCollegeName() {
        return collegeName;
    }
 
    public void setCollegeName(String collegeName) {
        this.collegeName = collegeName;
    }
 
    public String getCollegeID() {
        return collegeID;
    }
 
    public void setCollegeID(String collegeID) {
        this.collegeID = collegeID;
    }
 
    public void collegeMenu()
    {
        do
        {
            System.out.println("\nCollege Menu:\n"
            + "1. List of Colleges\n"
            + "2. Add College\n"
            + "3. Delete College\n"
            + "4. Back to Main Menu");
            userChoice = sc.nextLine();
 
            switch(userChoice)
            {
                case "1":
                    Listing();
                    break;
 
                case "2":
                    AddCollege();
                    break;
 
                case "3":
                    DeleteCollege();
                    break;
 
                case "4":
                    WorldSkillsCompetitionApp6.mainMenu();
            }
        }while(userChoice != "4");
 
    }
 
    public void Listing()
    {
        String listing = "";
 
        Iterator<College> it = listOfColleges.iterator();
        College checker;
 
        while(it.hasNext())
        {
            checker = it.next();
            listing =  listing + checker.getCollegeInfo();
            listing = listing + "\n";
        }
 
        if(listOfColleges.isEmpty())
        {
            System.out.println("No item has been added yet\n");
        }
 
        System.out.print("\nList Of Colleges:\n" +listing);
    }
 
    public void AddCollege()
    {
        Scanner sc =  new Scanner (System.in);
        College tmpCollege = new College();
 
        System.out.print("\nCollege name: ");
        tmpCollege.setCollegeName(sc.nextLine());
        String[] nameSplitted = tmpCollege.getCollegeName().split(" ");
        String tmpCollege1 = nameSplitted[0];
        String tmpCollege2 = nameSplitted[1];
        String collegeID = (tmpCollege1.substring(0, 2)
                +tmpCollege2.substring(0, 2)).toUpperCase();
        tmpCollege.setCollegeID(collegeID);
 
        listOfColleges.add(tmpCollege);
    }
 
    public String getCollegeInfo()
    {
        //System.out.println("\nList Of Colleges:");
        String msg = "College name: " +this.getCollegeName() +"\n";
        msg = msg + "College ID: " +this.getCollegeID();
        msg = msg + "\n";
 
        return msg;
    }
 
    public void DeleteCollege()
    {
        Scanner sc =  new Scanner (System.in);
        boolean collegeFound = false;
 
        System.out.print("\nPlease, enter the ID of the College which will be deleted: ");
 
        String searchCollegeID = sc.nextLine();
 
        Iterator<College> it = listOfColleges.iterator();
        College checker;
 
        while(it.hasNext() && collegeFound ==  false)
        {
            checker = it.next();
 
            if(checker.getCollegeID().equals(searchCollegeID))
            {
                collegeFound = true;
                String msg ="\n" +checker.getCollegeInfo() +"\n";
                msg += "This college will be deleted\n";
 
                System.out.println(msg);
 
                listOfColleges.remove(checker);
            }
            else
            {
            }
        }
 
        if(collegeFound ==  false)
        {
            System.out.println("The college with that ID was not found");
        }
    }
}

Gracias de antemano por cualquier posible pista.
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 Camilo
Val: 110
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Los datos del ArrayList desaparecen

Publicado por Camilo (25 intervenciones) el 28/04/2021 01:57:05
Hola Fran

Basta con agregar estas líneas a la clase College (Un singleton)
1
2
3
4
5
private static final College INSTANCE = new College();
private College() {}
public static College getInstance() {
    return INSTANCE;
}

Y cambiar la línea 22 de la clase principal por:
1
College college = College.getInstance();
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: 40
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Los datos del ArrayList desaparecen

Publicado por Fran (13 intervenciones) el 28/04/2021 10:27:54
Funciona perfectamente!! Muchas gracias!!

Tan solo por aclararme un poco como funciona el Singleton. Es como si cogiera una fotografía de la clase, no?
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 Camilo
Val: 110
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Los datos del ArrayList desaparecen

Publicado por Camilo (25 intervenciones) el 28/04/2021 02:20:21
Lo que pasa es que se crean clases constantemente cada vez que se accede a la línea 22, por eso no se guarda el arraylist.
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