How do i pass variables into methods – java [closed]

Tags: , , ,



I need to use a variable from one method in another. Here is the code:

public static void secondMain() {
        BufferedReader reader;
        var lines = new ArrayList<String>();
        var rooms = new ArrayList<Room>();

    try {
        reader = new BufferedReader(new FileReader("rooms.txt"));
        String line = reader.readLine();
        lines.add(line);
        while (line != null) {
            line = reader.readLine();
            lines.add(line);

        }
        
        reader.close();
        
        
        
        for (int i = 0; i < lines.size() - 1; i++){

            String[] words = lines.get(i).split(" ");
            var room = new Room();
            room.roomNum = Integer.parseInt(words[0]);
            room.roomType = (words[1]);
            room.roomPrice = Double.parseDouble(words[2]);
            room.hasBalcony = Boolean.parseBoolean(words[3]);
            room.hasLounge = Boolean.parseBoolean(words[4]);
            room.eMail = (words[5]);
            rooms.add(room);    
                       
            }

Here is where it needs to be used:

public static void reserveRoom() {
        // TODO Auto-generated method stub
    
    String choice = "";
    
    do {
secondMain();
        System.out.println("n-- ROOM RESERVATION --");
        System.out.println("Please enter the room number you wish to reserve");
        System.out.println("Q - Quit");
        Room selectedRoom = null;
         var searchRoomNum = input.nextInt();
        for(int i = 0; i < rooms.size(); i++){                 
              if(rooms.get(i).roomNum == searchRoomNum){
                  selectedRoom = rooms.get(i);            
                    System.out.println("Room Number: " + selectedRoom.roomNum);
                    System.out.println("Room Type: " + selectedRoom.roomType);
                    System.out.println("Room Price: " + selectedRoom.roomPrice);
                    System.out.println("Balcony: " + selectedRoom.hasBalcony);
                    System.out.println("Lounge: " + selectedRoom.hasLounge);
                    System.out.println("Email: " + selectedRoom.eMail);
                    System.out.println("-------------------");
              }
         }
        
    } 

my current error is on the for loop where im testing the conditions against the array. “rooms cannot be resolved”.

Answer

If you want to access rooms from the secondMain() method in the reserveRoom(), you should return it from secondMain() when you make the call. This can be done by changing the return type of the method public static void secondMain() to become public static ArrayList<Room> secondMain()

Then after the for loop in secondMain() when you have finished adding all the rooms to the array list, you should return rooms to the caller. This can be added as one statement after your try catch block.

return rooms;

This way you can access this property from reserveRoom(). The line where the call is made

do {
secondMain();

should become:

do{
var rooms = secondMain();

This should allow you to access rooms in reserveRoom()



Source: stackoverflow