Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[98.84.18.52] |
|
Сообщ.
#1
,
|
|
|
Братцы, помогите. Окончательно мозга за мозгу зашли. Передаю в метод другого класса несколько переменных типа byte, он их там изменяет, но в вызывающей процедуре они не меняются. Почему -- не понимаю. Ведь в яве все переменные динамические должны быть. Как это исправить уже тоже сообразить не могу... В общем -- полное затмение... Никто не поможет несчастному перестать биться головой об стену?
|
Сообщ.
#2
,
|
|
|
А дебаггером смотрел - действительно ли они меняются? Может кусочек кода покажешь, а то что то я не совсем сообразил что происходит.
|
Сообщ.
#3
,
|
|
|
Разумеется смотрел. Все меняется. Нормально считывает туда из файла. А дальше -- хана... :-(
Но кусок кода все равно привести могу. <br>// откуда вызываем:<br> File F;<br> byte colel,cvolsv,col, etc...<br><br> workfile wf=new workfile();<br> <br> if (F!=null)<br> {<br> try<br> {<br> int rk=wf.read(F,col,colel,colsv,set,prop);<br> if (rk==-1)<br> {<br> JOptionPane.showMessageDialog(jPanel1,<br> "Ламеры! Кто трогал файлы с данными?!\r\n Умираю!.. Воды!.. Действие отменяется...");<br> return;<br> }<br> }<br> catch(Exception e1)<br> {<br> e1.printStackTrace();<br> }<br> }<br><br><br>// Теперь сам метод<br>public byte /*пока byte (код ошибки)*/read(File f1, byte col, byte colel, byte colsv,<br> byte[][]set, byte[][]prop) throws Exception<br>{// чтение из файла<br> InputStream fr= new FileInputStream(f1);<br> double ln=fr.available(); // кладем в ln максимальное кол-во байтов<br> col=0;<br> colel=0;<br> colsv=0;<br> double i=0;<br> set= new byte[col][colel];<br> prop= new byte[col][colsv];<br><br> ... // чтаем и запоминаем<br><br> fr.close();<br> return 1; // сообщаем, что операция прошла успешно<br>}<br> |
Сообщ.
#4
,
|
|
|
Уппс - все ясно! Ты только посмотри на свой метод read() - тами же в аргументах его стоят переменные с теми же именами что ты раньше определял! Соответственно создается новая переменная с тем же именем но более ограниченной областью видимости!
Допустим проще понять будет так <br>package mypackage1;<br><br>public class Class1 <br>{<br>static byte sss=1;<br><br>public byte ret(byte sss)<br> {<br> sss=12;<br> return sss;<br> }<br><br> public static void main(String[] args)<br> {<br> Class1 w=new Class1();<br> System.out.println(w.ret(sss));<br> System.out.println(w.sss);<br> }<br>}<br> |
Сообщ.
#5
,
|
|
|
Короче ИМХО чтобы все заработало this надо использовать.
|
Сообщ.
#6
,
|
|
|
Это-то ясно. Но как его заставить не заводить дубликаты? Вот в чем вопрос....
Не понимаю. Куда, какой this. Куда мне его засунуть? Все равно ведь, раз переменные все динамические, я передаю в функцию их адреса. Или нет? ??? Что-то я глобально торможу. Если нет, то значит мне нужно как-то передать адреса. Как же мне тут this поможет? (Кстати, а куда его совать-то? ) Ладно. В программе-то можно просто схитрить -- завести микро-массив для тех данных, что надо передавать. Но вопрос теперь становится принципиальным. |
Сообщ.
#7
,
|
|
|
Зделай вот так:
<br>public byte /*пока byte (код ошибки)*/read(File f1, byte col, byte colel, byte colsv, <br> byte[][]set, byte[][]prop) throws Exception <br>{// чтение из файла <br> InputStream fr= new FileInputStream(f1); <br> double ln=fr.available(); // кладем в ln максимальное кол-во байтов <br> this.col=0; <br> this.colel=0; <br> this.colsv=0; <br> double i=0; <br> set= new byte[col][colel]; <br> prop= new byte[col][colsv]; <br> <br> ... // читаем и запоминаем те же this.col, this.colel, this.colsv<br><br> <br> fr.close(); <br> return 1; // сообщаем, что операция прошла успешно <br>} <br> this - Это ссылка на объект вызывающий данный метод |
Сообщ.
#8
,
|
|
|
Иншалла, то есть ты хочешь сказать, что я обязательно должен те переменные забивать как поля класса, вызывающего данный метод? Неужелди нет универсального механизма, как передавать сами переменные, а не их значения, для любых перменных? Верится с трудом.
|
Сообщ.
#9
,
|
|
|
Цитата Iskander, 03.09.02, 08:14:09 Иншалла, то есть ты хочешь сказать, что я обязательно должен те переменные забивать как поля класса, вызывающего данный метод? А разве не этого ты хотел?? Именно свойства объекта, то есть поля класса и будут меняться с помощью this. Цитата Неужелди нет универсального механизма, как передавать сами переменные, а не их значения, для любых перменных? Верится с трудом. В жаве нельзя передавать переменные по ссылке - поэтому и приходится вот так вот выкобениваться. |