Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Муравей
1 / 1 / 0
Регистрация: 22.03.2015
Сообщений: 55
1

Аналог передачи параметров по ссылке

19.04.2016, 13:50. Просмотров 200. Ответов 5
Метки нет (Все метки)

Здравствуйте.
Мне нужно переписать метод, написанный на Delphi, на Java.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure faindUpak(Var res:TUpak;MasD:TMClass;l:Integer;var fl:Boolean);
Var i,j:Integer;
    buf,b:TUpak;  //Record
    f:Boolean;
Begin
  If length(MasD)>l then    //Какое-то условие
  Begin
    fl:=false;
    for i:=0 to length(MasD[l])-1 do  //Какой-то цикл
    Begin
      f:=false;
      if ((buf.Mas+MasD[l,i].Vec)<=buf.MaxMas) then   //Какое-то условие
      Begin
        FaindUpak(buf,MasD,l+1,f);//Рекурсивный вызов метода
        if f = true  then
        Begin
          fl:=true;
        End;
      End;
    End;
  End else fl:=true;
End;
Здесь в списке параметров функции если перед параметром стоит var - значит передача по ссылке.
Как видите, здесь имеет место рекурсия, по этому я не могу придумать как реализовать этот же метод на Java, где нет передачи по ссылке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2016, 13:50
Ответы с готовыми решениями:

Альтернатива передачи параметров по ссылке, или как переписать код
Здравствуйте. Есть метод на языке C#, в котором используются передача...

функции в языке с: (использовать механизм передачи параметров по ссылке)
реализовать функцию, осущ. поиск в целочисленном массиве 4-го максимума и 3-го...

Реализовать программу одним из способом передачи параметров в функцию(по адресу,по значению,по ссылке)
Даны координаты вершин двух треугольников. Определить, какой из них имеет...

Отличие передачи по ссылке от передачи указателя ?
Чем отличаюся следующие коды? class MyClass{ int val; public: int...

Принятие параметров в ссылке и их отправка далее по ссылке без action
Доброго времени суток. У меня есть данный кусок кода &lt;?php if...

5
Igor100
26 / 26 / 24
Регистрация: 23.04.2011
Сообщений: 64
19.04.2016, 14:18 2
Объекты в Java, можно сказать, передаются по ссылке, а примитивные типы по значению.
Поэтому если, вы передадите методу в качестве аргумента объект, и измените его внутри метода, то изменения затронут существующий объект.
0
Муравей
1 / 1 / 0
Регистрация: 22.03.2015
Сообщений: 55
19.04.2016, 20:08  [ТС] 3
Спасибо. А почему не правильно работает данный код? Использую Integer, то есть объектный тип.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Main {
 
    public void Change(Integer a) {
        a = Integer.valueOf(a + 1);
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        Integer a = Integer.valueOf(0);
        
        
        Main main = new Main();
        
        main.Change(a);
        
        System.out.println("a = " + a);
        
    }
 
}
В результате получаю a = 0, хотя надо a = 1
0
kozak95
34 / 34 / 21
Регистрация: 01.11.2013
Сообщений: 319
19.04.2016, 20:59 4
Цитата Сообщение от Igor100 Посмотреть сообщение
Объекты в Java, можно сказать, передаются по ссылке, а примитивные типы по значению.
Igor100,
В java все параметры в методы передаются по значению. Если это объект, то ссылка на объект передается тоже по значению. То есть будет две ссылки на один объект)

Добавлено через 47 минут
Муравей, Дело в том, что Integer объектный тип, но он immutable. Поэтому, в методе копии ссылки передается новая ссылка на обьект которая не влияет на объект, на который она изначально ссылалась. Попробуйте заменить int, например, на Stringbuilder.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Main {
        public void Change(StringBuilder a) {           
        a.append("eee");
    }
    public static void main(String[] args) {      
        StringBuilder a = new StringBuilder("qwerty");
 
        Main main = new Main();
        
        main.Change(a);
        
        System.out.println("a = " + a);
    }
}
0
korvin_
2165 / 1658 / 320
Регистрация: 28.04.2012
Сообщений: 5,921
19.04.2016, 23:37 5
Цитата Сообщение от Муравей Посмотреть сообщение
Мне нужно переписать метод, написанный на Delphi, на Java.
Для начала этот метод стоит отрефакторить, он написан через жопу. Лучше опиши словами, какие входные днные и что нужно из них получить, станет легче.
0
MLPMan
Кандёхаем веселее!
287 / 297 / 75
Регистрация: 02.10.2012
Сообщений: 2,051
20.04.2016, 07:12 6
Тоже накидал пример:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class IntWrapper {
  int val;
  @Override public String toString() {return String.valueOf(val);}
  IntWrapper(int v) {val = v;}
}
 
class Main {
 
  static change(IntWrapper w) {
    w.val = 764437;
  }  
 
  public static void main(String[] args) {
    IntWrapper ten = new IntWrapper(10);
    System.out.println(ten);
    change(ten);
    System.out.println(ten);
  }
  
}
0
20.04.2016, 07:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2016, 07:12

Аналог передачи аргумента функции в С++
Если функция имее вид на дельфи procedure name(a,b:integer; var c: integer) ...

Механизмы передачи параметров
Составить алгоритм и программу, реализующую разные механизмы передачи...

Программа передачи параметров
НАПИСАНИЕ ПРОГРАММЫ ПЕРЕДАЧИ ПАРАМЕТРОВ С ПОМОЩЬЮ параметров командной строки


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru