На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Совсем плохой стал.
    Братцы, помогите. Окончательно мозга за мозгу зашли. Передаю в метод другого класса несколько переменных типа byte, он их там изменяет, но в вызывающей процедуре они не меняются. Почему -- не понимаю. :( Ведь в яве все переменные динамические должны быть. Как это исправить уже тоже сообразить не могу... В общем -- полное затмение... Никто не поможет несчастному перестать биться головой об стену?
      А дебаггером смотрел - действительно ли они меняются? Может кусочек кода покажешь, а то что то я не совсем сообразил что происходит.
        Разумеется смотрел. Все меняется. Нормально считывает туда из файла. А дальше -- хана... :-(
        Но кусок кода все равно привести могу.

        ExpandedWrap disabled
          <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>
          Уппс - все ясно! Ты только посмотри на свой метод read() - тами же в аргументах его стоят переменные с теми же именами что ты раньше определял! Соответственно создается новая переменная с тем же именем но более ограниченной областью видимости!
          Допустим проще понять будет так
          ExpandedWrap disabled
            <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>

          Сообщение отредактировано: d_k -
            Короче ИМХО чтобы все заработало this надо использовать.
              Это-то ясно. Но как его заставить не заводить дубликаты? Вот в чем вопрос....
              Не понимаю. :( Куда, какой this. Куда мне его засунуть? Все равно ведь, раз переменные все динамические, я передаю в функцию их адреса. Или нет? ??? Что-то я глобально торможу. Если нет, то значит мне нужно как-то передать адреса. Как же мне тут this поможет? (Кстати, а куда его совать-то? ;) )
              Ладно. В программе-то можно просто схитрить -- завести микро-массив для тех данных, что надо передавать. Но вопрос теперь становится принципиальным.

                Зделай вот так:
                ExpandedWrap disabled
                  <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 - Это ссылка на объект вызывающий данный метод
                  Иншалла, то есть ты хочешь сказать, что я обязательно должен те переменные забивать как поля класса, вызывающего данный метод? :( Неужелди нет универсального механизма, как передавать сами переменные, а не их значения, для любых перменных? Верится с трудом. :(
                    Цитата Iskander, 03.09.02, 08:14:09
                    Иншалла, то есть ты хочешь сказать, что я обязательно должен те переменные забивать как поля класса, вызывающего данный метод? :(

                    А разве не этого ты хотел?? Именно свойства объекта, то есть поля класса и будут меняться с помощью this.
                    Цитата

                    Неужелди нет универсального механизма, как передавать сами переменные, а не их значения, для любых перменных? Верится с трудом. :(

                    В жаве нельзя передавать переменные по ссылке - поэтому и приходится вот так вот выкобениваться. ;)
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0444 ]   [ 15 queries used ]   [ Generated: 27.04.24, 06:30 GMT ]