Форум программистов, компьютерный форум, киберфорум
Наши страницы
ActionScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
dendead
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 99
1

Вывод таблицы через вложенные циклы

27.05.2014, 19:41. Просмотров 689. Ответов 17
Метки нет (Все метки)

Доброго времени суток. Подскажите пожалуйста правильно вывести таблицу в 5 колонок и 3 строки. Никак не могу разобраться с вложенными циклами.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2014, 19:41
Ответы с готовыми решениями:

Вывести числа в виде таблицы. Вложенные циклы
Задание: вывести на экран числа в виде следующей таблицы: 3 0 2 3 9 0 2 2...

Вложенные циклы. Вывод чисел
Помогите) вывести матрицу : 1) 66666 7777 888 99 10 2)

Вложенные циклы. Напечатать числа в виде следующей таблицы
Напечатать числа в виде следующей таблицы 5 5 5 5 5 6 6 6 6 7 7 ...

Вычислить через вложенные циклы do
Здравствуйте. Задача звучит так: вычислить \sum_{i=0}^{N}\sum_{j=0}^{M}i+j с...

Вложенные циклы: вывод треугольников из символов
С помощью вложенных циклов вывести в консоль: + ++ +++ + ++ +++ ++++ +...

17
TanaTiX
Модератор
2796 / 1650 / 168
Регистрация: 19.02.2011
Сообщений: 6,005
Завершенные тесты: 2
27.05.2014, 21:26 2
dendead, каким образом вы формируете таблицу? Родная таблица в общепринятом понимании во флеше отсутствует.
0
dendead
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 99
27.05.2014, 21:35  [ТС] 3
Принцип в том, чтобы вывести картинки в столбцы и строки. Получаю с сервера массив с ссылками на картинки и во флэше через loader добавляю их в список отображения. Нужно перебрать массив и вывести его элементы в соответствии с условием (5 колонок и 3 столбца).
0
TanaTiX
Модератор
2796 / 1650 / 168
Регистрация: 19.02.2011
Сообщений: 6,005
Завершенные тесты: 2
27.05.2014, 21:45 4
dendead, если нет необходимости определять размер ячеек для автоматического подгона их размера соответственно размеру изображений, то в этом нет ничего сложного. Покажите, как реализовать пытаетесь?
0
dendead
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 99
27.05.2014, 22:24  [ТС] 5
Вот так загружаю создаю объект для отображения по ссылке из массива:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
for (var i:int = 0; i < linksArray.length; i++) {
    var slot:Object = getChildByName("clip" + i);
                
    var loader:Loader = new Loader( );      
    loader.x = i + 1 * 3;
    loader.y = 5;
    inventoryClipsArray[i] = loader; 
    slot.addChild(loader);      
                        
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
    loader.load(new URLRequest(linksArray[i])); 
}
Единственное решение, которое пришло в голову это менять координаты лоадеров в зависимости от значения i через условие if. Но это что-то из ряда вон... Читал про вложенные циклы, но так и не понял как их использовать в моём случае.
0
TanaTiX
Модератор
2796 / 1650 / 168
Регистрация: 19.02.2011
Сообщений: 6,005
Завершенные тесты: 2
27.05.2014, 22:39 6
Лучший ответ Сообщение было отмечено dendead как решение

Решение

dendead, ваш код должен вызывать ошибку, т.к. по нему у объекта slot не должно быть метода addChild. Что это за объект такой?
Вот пример:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
var loader:Loader;
            for (var i:int = 0; i < 5; i++) 
            {
                for (var j:int = 0; j < 4; j++) 
                {
                    loader = new Loader();
                    loader.load(new URLRequest("link.png"));
                    loader.x = i * 50;
                    loader.y = j * 40;
                    _container.addChild(loader);
                }
            }
1
dendead
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 99
27.05.2014, 22:57  [ТС] 7
В объект slot добавляю ранее созданный мувклип:
ActionScript 3
1
2
3
4
5
6
7
for (var i:int = 0; i < 5; i++) {
    var clip:INV = new INV( );
    clip.x = i * 60 + 470;
    clip.y = 500;
    clip.name = "clip" + i;     
    addChild(clip);
}
Добавлено через 13 минут
Цитата Сообщение от TanaTiX Посмотреть сообщение
Вот пример:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
var loader:Loader;
for (var i:int = 0; i < 5; i++) 
 {
 for (var j:int = 0; j < 4; j++) 
 {
loader = new Loader();
 loader.load(new URLRequest("link.png"));
 loader.x = i * 50;
 loader.y = j * 40;
 _container.addChild(loader);
 }
 }
В этом случае, если выбирать из массива ссылок значение так: shopImages[i], перебор доходит до 5-ой ссылки, а затем по-новой на следующей строке. Если в массиве больше, чем 5 значений, они не отобразятся. В итоге получается по 5 одинаковых картинок в каждой строке и 4 строки. Требуется же чтобы после 5-ой ссылки в массиве, оставшиеся картинки отображались на следующей строке.
0
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
27.05.2014, 23:10 8
В этом случае, если выбирать из массива ссылок значение так
Это беспредел!
Немного дополнил пример приведенный выше -
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package 
{
    import flash.display.DisplayObject;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.geom.Point;
    
    
    public class List extends Sprite 
    {
        private static const NUM_IMAGES:uint = 15;
        private static const NUM_ROWS:uint = 5;
        private static const NUM_COLUMNS:uint = 3;
        private static const HORIZONTAL_GAP:uint = 5;
        private static const VERTICAL_GAP:uint = 5;
        
        public function List() 
        {
            var array:Array = [];
            var image:DisplayObject;
            var i:int;
            
            for (i = 0; i < NUM_IMAGES; i++) 
            {
                image = this.createRect(50, 50, 0x000000);
                array[i] = image;
                super.addChild(image);
            }
            
            var IMAGE_WIDTH:int = 50;
            var IMAGE_HEIGHT:int = 50;
            
            var start:Point = new Point(10, 10);
            
            var horizontalStep:int = IMAGE_WIDTH + HORIZONTAL_GAP;
            var verticalStep:int = IMAGE_HEIGHT + VERTICAL_GAP;
            
            var item:DisplayObject;
            
            var count:int;
            
            for (var j:int = 0; j < NUM_COLUMNS; j++) 
            {
                for (var k:int = 0; k < NUM_ROWS; k++) 
                {
                    item = array[count++];
                    item.x = horizontalStep * k + start.x;
                    item.y = verticalStep * j + start.y;
                }
            }
        }
        
        private function createRect(w:Number, h:Number, color:uint):Shape
        {
            var rect:Shape = new Shape();
            rect.graphics.beginFill(color);
            rect.graphics.drawRect(0, 0, w, h);
            rect.graphics.endFill();
            
            return rect;
        }
    }
 
}
1
Rized
1 / 1 / 0
Регистрация: 23.05.2014
Сообщений: 15
27.05.2014, 23:16 9
Уважаемый TanaTiX что-то немного намудрил с циклами. 5 колонок и 3 строки это получается так:
ActionScript 3
1
2
3
4
5
for(var string:int = 0; string < 3; string++){
    for (var column:int = 0; column < 5; column++){
        //Здесь мог быть ваш код 
    }
}
dendead, параметры циклов можно использовать для создания отступов между картинками.
0
dendead
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 99
27.05.2014, 23:18  [ТС] 10
В общем-то сделал так:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
var counter:int = 0;
for (var i:int = 0; i < 4; i++) {
    for (var j:int = 0; j < 5; j++) {
        var loader:Loader = new Loader( );
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
        loader.load(new URLRequest(shopImages[counter]));
        loader.x = j * 50;
        loader.y = i * 40;
        addChild(loader);
        counter++;
    }
}
0
Rized
1 / 1 / 0
Регистрация: 23.05.2014
Сообщений: 15
27.05.2014, 23:33 11
В итоге получается по 5 одинаковых картинок в каждой строке и 4 строки
А потому что при достижении во вложенном цикле максимального значения параметра (в моем примере - column) и выполнении кода в блоке, значение параметра внешнего цикла увеличивается, а внутреннего - уменьшается до минимального значения. Т.е. вложенные циклы работают так: string = 0, column = 0 {выполняется код}; string = 0, column = 1 {снова выполняется код}; ...(тут ещё несколько ходов цикла); string = 0, column = 4 ( < 5 - макс. значение по условию) {выполняется код}; string = 1, column = 0 {выполняется код}; string = 1, column = 2 {выполняется код}...и т.д.
Соответственно, вам нужно всего лишь завести переменную (=0 изначально), которую вы будете инкрементировать в каждом ходе цикла и тем самым узнаете сколько картинок уже обработано, и уже на этой основе можно запрашивать следующую картинку, используя значение этой переменной.
UPD: а, пока печатал, вы уже сами догадались, молодец
0
dendead
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 99
27.05.2014, 23:44  [ТС] 12
Вывел в трейс значения i и j, и вуаля!
0
TanaTiX
Модератор
2796 / 1650 / 168
Регистрация: 19.02.2011
Сообщений: 6,005
Завершенные тесты: 2
28.05.2014, 00:06 13
Цитата Сообщение от Rized Посмотреть сообщение
Уважаемый TanaTiX что-то немного намудрил с циклами. 5 колонок и 3 строки это получается так:
Количество колонок и строк были выбраны случайно как пример.
Цитата Сообщение от bus Посмотреть сообщение
count++
Если нужно увеличить значение после, то и "++" пишем после некоего действия, если перед, то, соответственно, перед.
Попробуйте передать в метод значения
ActionScript 3
1
count++
и
ActionScript 3
1
++count
Посмотрите, какие значения попадут в метод.
0
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
28.05.2014, 00:42 14
Цитата Сообщение от TanaTiX Посмотреть сообщение
Посмотрите, какие значения попадут в метод.
Разницу я знаю, но сказал из-за того, что ТС только в одном месте обращается к массиву и куда более приятнее видеть array[count++] нежели array[count]; count++..
0
dendead
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 99
28.05.2014, 00:43  [ТС] 15
Цитата Сообщение от bus Посмотреть сообщение
только в одном месте обращается к массиву
А в итоге всё равно получилось несколько обращений и пришлось переносить count в конец цикла.
0
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
28.05.2014, 01:58 16
Цитата Сообщение от dendead Посмотреть сообщение
А в итоге всё равно получилось несколько обращений и пришлось переносить count в конец цикла.
Представьте, что Вам нужно купить в магазине две буханки хлеба. Вы идете и покупаете одну, относите ее домой и идете за второй.. Вот так же и с массивами. Зачем два раза обращаться к одному элементу, сохраните его в локальное свойство и используйте.
ActionScript 3
1
2
3
4
5
6
7
8
9
for (var j:int = 0; j < NUM_COLUMNS; j++) 
            {
                for (var k:int = 0; k < NUM_ROWS; k++) 
                {
                    item = array[count++];
                    item.x = horizontalStep * k + start.x;
                    item.y = verticalStep * j + start.y;
                }
            }
0
dendead
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 99
26.06.2014, 03:50  [ТС] 17
Возник ещё один вопрос по выводу таблицы с клипами через циклы. Никак не могу понять как вывести таблицу такого вида:
123101112
456131415
789161718

Пришло в голову написать два цикла подряд:

ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for (var i:int = 0; i < 3; i++) {
    for (var j:int = 0; j < 3; j++) {
         var clip:Clip = new Clip( );
         clip.x = j * 74 + 52;
         clip.y = i * 80 + 95;
         addChild(clip);
    }
}
for (var z:int = 0; z < 3; z++) {
    for (var c:int = 3; c < 6; j++) {
         var clip2:Clip = new Clip( );
         clip2.x = z * 74 + 52;
         clip2.y = c * 80 + 95;
         addChild(clip2);
    }
}
Который час бьюсь, но в упор не могу найти способ проще. Подскажите пожалуйста как можно тут поступить?
0
dendead
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 99
27.06.2014, 14:11  [ТС] 18
Решил задачу создав ещё один внешний цикл и рассчитав смещение клипов по x относительно этого цикла. Получилось подобие групп по 9 клипов в каждой.
0
27.06.2014, 14:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2014, 14:11

Вложенные циклы, вывод строк пирамидкой
Как написать программу слудующего вида при помощи вложенных циклов? A ...

Вычисление функции через вложенные циклы for
Составить программу вычисления функции: Z=√(x^3/y), где y=ln |tg(x/2)| + m^2,...

Посчитать форпулу через вложенные циклы
всем привет, очень нужна помощь, вот задание к контрольной работе, я в с++...


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

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

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