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

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

19.04.2016, 13:50. Просмотров 193. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Аналог передачи параметров по ссылке (Java SE):

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

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

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

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

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

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

5
Igor100
26 / 26 / 24
Регистрация: 23.04.2011
Сообщений: 64
19.04.2016, 14:18 #2
Объекты в Java, можно сказать, передаются по ссылке, а примитивные типы по значению.
Поэтому если, вы передадите методу в качестве аргумента объект, и измените его внутри метода, то изменения затронут существующий объект.
0
Муравей
1 / 1 / 5
Регистрация: 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_
2097 / 1588 / 308
Регистрация: 28.04.2012
Сообщений: 5,723
19.04.2016, 23:37 #5
Цитата Сообщение от Муравей Посмотреть сообщение
Мне нужно переписать метод, написанный на Delphi, на Java.
Для начала этот метод стоит отрефакторить, он написан через жопу. Лучше опиши словами, какие входные днные и что нужно из них получить, станет легче.
0
MLPMan
Кандёхаем веселее!
287 / 291 / 75
Регистрация: 02.10.2012
Сообщений: 2,034
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
Привет! Вот еще темы с решениями:

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

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

Судьба объекта после передачи его по ссылке по каналу WCF
Доброго времени суток. Вопрос такой: есть WCF сервер, есть клиент. Клиент...

Способы передачи параметров в функцию
#include&lt;iostream&gt; using namespace std; void swap1(int x, int y) { int z;...


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

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

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