Отражение изменений в переменной в вызывающей программе на Java - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть функция, которая должна возвращать объект place, но мне также нужно проверить, оценивает ли что-то значение false, и, кроме того, вызывающая сторона должна знать обе эти части информации.У меня есть тип возвращаемого значения как Place, но в Java нет ссылочных параметров, поэтому, если следующее условие if истинно, я бы хотел как-то отразить это в вызывающей программе, чтобы я мог проверить это, но не могуболее одного типа возврата, поэтому я застрял в том, что делать.Мой лучший выстрел возвращал ноль, но у меня просто ощущение, что это плохое программирование.

if (directions.get (i) .isLocked ())

Ниже приведена полная функция:

Place followDirection(String dir, boolean isLocked) { 
        dir = dir.toLowerCase(); // make sure the string is lowercase for comparisons

        int i = 0;

        for ( i = 0; i < directions.size(); i++ ) { // loop until we find a match, remember that if it's locked then we cnanot go in there
            if ( directions.get(i).getDirection().equals(dir) ) {
                if ( directions.get(i).isLocked() ) {
                    System.out.println("This room is locked, sorry");
                }
                else {
                    return directions.get(i).getToPlace(); // this means we found a match, return the destination

                }
            }
        }

        Place p = null;
        return p;
    }

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Java - это язык вызовов по значению, но он немного сложен.этот язык передает указатели как значения, и если вы не измените указатель, вы можете изменить объект, который передается вашей функции.например, если вы передаете сложный объект в функцию и в этой функции вы изменяете значение параметра этого объекта, вызывающий может увидеть его, в вашем коде вы можете передать объект, который содержит dir и isLocked, так что вы можете изменитьэти параметры.

Place followDirection(MyObject obj) { 
        obj.dir = obj.dir.toLowerCase(); // make sure the string is lowercase for comparisons

        int i = 0;

        for ( i = 0; i < directions.size(); i++ ) { // loop until we find a match, remember that if it's locked then we cnanot go in there
            if ( directions.get(i).getDirection().equals(obj.dir) ) {
                if ( directions.get(i).isLocked() ) {
                    System.out.println("This room is locked, sorry");
                }
                else {
                    return directions.get(i).getToPlace(); // this means we found a match, return the destination

                }
            }
        }

        Place p = null;
        return p;
    }

MyObject содержит:

String dir, boolean isLocked
0 голосов
/ 12 сентября 2018

Технически, есть два варианта, если вы не хотите возвращать ноль (что, кстати, не кажется плохим):

  1. возвращает объект, который содержит оба возвращаемых значения
  2. Передать изменяемый объект в качестве параметра.

Второй вариант также выглядит несколько грязным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...