Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: обнуление массива Добавлено: 26.06.12 18:20  

Автор вопроса:  merr
Люди Добрые!
Вновь нужда заставляет писать эти строки :)
Как обнулить массив в такой ситуации: процедура "Начальные условия": клик юзера - старт процедуры (установка нач. условий). Далее процедура "Начать":клик юзера - старт процедуры (заполнение массива). Далее он используется еще в нескольких процедурах. Вывод результатов. Все ОК, но если заново нажать на "Нач. условия" а потом "Начать", то результат будет уже некорректен - программа "помнит" предыдущее значение массива. Все обнуляется только с перезапуском программы...
Важно: массив объявлен глобально; массив статический, одномерный. Erase не помогает - "эффект памяти" остается. Это как-то решается?

Ответить

  Ответы Всего ответов: 37  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 26.06.12 20:14
Использование глобальных переменных - плохая практика. От них надо отказываться ПОЛНОСТЬЮ!

Ответить

Номер ответа: 2
Автор ответа:
 merr



Вопросов: 11
Ответов: 31
 Профиль | | #2 Добавлено: 26.06.12 20:31
Что-то мне подсказывает что EROS прав :)
Однако это трудно считать ответом на вопрос...

Ответить

Номер ответа: 3
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #3 Добавлено: 26.06.12 23:34
Да чего тут отвечать.. переинициализируй переменную и всего делов..
к примеру:
  1.  
  2.     class Program
  3.     {
  4.         private static int[] m_localArray = new[] { 5, 9, 1, 7 };
  5.  
  6.         static void Main(string[] args)
  7.         {
  8.             PrintArray(m_localArray);
  9.             m_localArray = new[] { 7, 3, 6, 2 };
  10.             PrintArray(m_localArray);
  11.         }
  12.  
  13.         static void PrintArray(IEnumerable<int> args)
  14.         {
  15.             Console.Out.WriteLine("=== ARRAY ===");
  16.             Console.Out.WriteLine(string.Join(";", args));
  17.         }
  18.     }



=== ARRAY ===
5;9;1;7
=== ARRAY ===
7;3;6;2

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 26.06.12 23:36
Но, повторю еще раз, хорошей практикой считается давать переменным наименьшую зону видимости..

Ответить

Номер ответа: 5
Автор ответа:
 merr



Вопросов: 11
Ответов: 31
 Профиль | | #5 Добавлено: 26.06.12 23:58
Ага...
Вообще я про VB... Но идею понял, спасибо!

Ответить

Номер ответа: 6
Автор ответа:
 Александр



Вопросов: 1
Ответов: 15
 Профиль | | #6 Добавлено: 28.06.12 07:09
Далее он используется еще в нескольких процедурах

Использование глобальных переменных - плохая практика. От них надо отказываться ПОЛНОСТЬЮ!

С какого перепугу?
Мотивируй и предложи выход.

Ответить

Номер ответа: 7
Автор ответа:
 Александр



Вопросов: 1
Ответов: 15
 Профиль | | #7 Добавлено: 28.06.12 07:14
Erase не помогает - "эффект памяти" остается

Нет такого эффекта - есть кривой код.
По крайней мере у меня Erase всегда работает.
Воложил бы код

Ответить

Номер ответа: 8
Автор ответа:
 merr



Вопросов: 11
Ответов: 31
 Профиль | | #8 Добавлено: 28.06.12 17:56

Да, код, безусловно, кривой, зато свой, родной :)
Там большой кусок, не хочу засорять эфир...
1. Справедливо ли утверждение что статические массивы можно объявить только глобально, а динамические - только локально?
2. Хорошо, а в принципе если не глобальные динамические массивы объявлены в процедурах, тогда как в VB6 сделать чтоб значения одного в Процедуре 1 присваивались другому в Процедуре 2 (тип данных, количество и объемы размерностей совпадают)?

Ответить

Номер ответа: 9
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #9
Добавлено: 29.06.12 01:29
1. Нет. Можно всё и везде.
2.
  1. Private Sub Form_Load()
  2.     Dim x(4) As Long
  3.     x(2) = 777
  4.     blahblah x
  5. End Sub
  6.  
  7. Private Function blahblah(ByRef arr() As Long) As Long
  8.     Debug.Print arr(2)
  9. End Function

Ответить

Номер ответа: 10
Автор ответа:
 merr



Вопросов: 11
Ответов: 31
 Профиль | | #10 Добавлено: 29.06.12 15:35
Winand, Спасибо!

Ответить

Номер ответа: 11
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #11 Добавлено: 29.06.12 22:30
Александр пишет:
С какого перепугу?
Мотивируй и предложи выход.

Эммм.. я даже как-то растерялся. В абсолютно любой книге по программированию для чайников есть фраза типа : Глобальные переменные - зло! И приводится мотивация и предлагаются возможные варианты решения (начиная от шаблонов типа Singleton до других архитектурных изысковв зависимости от уровня материала)
Надеюсь, ты не заставишь меня гуглить по фразе: Глобальные переменные - зло и копипастить сюда цитаты, а сделаешь это самостоятельно.

Ответить

Номер ответа: 12
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #12
Добавлено: 30.06.12 00:12
принимать вещи на веру без объяснений - зло. вот, взять хотя бы слоган "goto - зло": в ядре линукс и JavaVM используется часто для быстродействия!

Ответить

Номер ответа: 13
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #13
Добавлено: 30.06.12 00:41
хммм


From: Linus Torvalds
Subject: Re: any chance of 2.6.0-test*?
Date: Sun, 12 Jan 2003 12:22:26 -0800 (PST)

On Sun, 12 Jan 2003, Rob Wilkens wrote:
>
> However, I have always been taught, and have always believed that
> "goto"s are inherently evil. They are the creators of spaghetti code

No, you've been brainwashed by CS people who thought that Niklaus Wirth
actually knew what he was talking about. He didn't. He doesn't have a
frigging clue.

Ответить

Номер ответа: 14
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #14 Добавлено: 30.06.12 12:45
Morpheus пишет:
слоган "goto - зло": в ядре линукс и JavaVM используется часто для быстродействия!


тут необходимо разделить понятия: Осмысленное применение для какой-то конкретной цели и повсеместное и бездумное.
Вот второе применение (пусть и в силу незнания предметной области) и является злом.

Ответить

Номер ответа: 15
Автор ответа:
 merr



Вопросов: 11
Ответов: 31
 Профиль | | #15 Добавлено: 30.06.12 16:24
тут необходимо разделить понятия: Осмысленное применение для какой-то конкретной цели и повсеместное и бездумное.
Вот второе применение (пусть и в силу незнания предметной области) и является злом.


Согласен. Так ведь и с глобальными переменными та же история.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам