Как передать переменные в методы - Java

Мне нужно использовать переменную из одного метода в другом. Вот код:

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);    
                       
            }

Вот где его нужно использовать:

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("-------------------");
              }
         }
        
    } 

моя текущая ошибка находится в цикле for, где я проверяю условия на массив. "комнаты не могут быть решены".

Вы забыли задать вопрос.

Turing85 14.12.2020 18:10

Вы определяете rooms в secondMain, а затем ожидаете, что сможете использовать его в reserveRoom, никогда не передавая его.

Aplet123 14.12.2020 18:10

где вы вызываете функцию reserveRoom()?

M. Abdel-Ghani 14.12.2020 18:13

@M.Abdel-Ghani М.Абдель-Гани, функция backupRoom() вызывается в моем основном методе.

axmckz 14.12.2020 18:15

Вы можете вернуть List<Room> из secondMain() и сохранить его в List<Room> в методе backupRoom(), это было бы проще и читабельнее.

B Sangappa 14.12.2020 18:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
78
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вместо public static void secondMain можно сделать public static ArrayList<Room> secondMain

В конце второго Главного: return rooms.

В методе reserveRoom: при вызове метода secondMain: ArrayList<Room> rooms = secondMain();

Теперь вы сможете использовать метод rooms внутри reserveRoom.

Ответ принят как подходящий

Если вы хотите получить доступ к rooms из метода secondMain() в reserveRoom(), вы должны вернуть его из secondMain() при выполнении вызова. Это можно сделать, изменив тип возвращаемого значения метода public static void secondMain() стать public static ArrayList<Room> secondMain()

Затем после цикла for в secondMain(), когда вы закончили добавлять все комнаты в список массивов, вы должны вернуть rooms вызывающей стороне. Это можно добавить как один оператор после вашего блока try catch.

return rooms;

Таким образом, вы можете получить доступ к этому свойству из reserveRoom(). Линия, по которой осуществляется вызов

do {
secondMain();

должно стать:

do{
var rooms = secondMain();

Это должно позволить вам получить доступ к комнатам в reserveRoom()

Другие вопросы по теме