• Февраля 16, 2019, 08:03:13 am
• Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Новости: IT направления и поиск первой работы. Смотрите запись нашего вебинара: https://bit.ly/2OGjmHU

Автор Тема: Java start (online) Пархоменко Александр (Вопросы)  (Прочитано 511 раз)

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 10985
    • Просмотр профиля
    • E-mail
Re: Java start (online) Пархоменко Александр (Вопросы)
« Ответ #45 : Января 25, 2019, 01:07:23 am »
MegaStack
Ну, что по порядку.
Как я уже и говорил в лекции двух мерные массивы, это одномерные массивы каждым элементом которого является ссылка на одномерные массивы. Обращаясь в двух мерном массиве по первому индексу мы получаете по сути ссылку на другой одномерный массив.
Т.е.
аrray[0] — вернет вам ссылку на одномерный массив, который и представляет собой 0-ю строку этого массива. А уже когда вы переходите по этой ссылке там вы и обнаружите другой   одномерный массив.
Таким образом аrray[0] — не может быть в двух мерном массиве 5, в принципе.
Другой вопрос что вы так не делали и оно заработало, а вот это наоборот очень странно. Работать так оно явно не должно. Такой код как вы привели сработает только в одном случае, если количество строк в массиве равно количеству столбцов в остальных случаях это работать не будет.

Акцентировал внимание что бы было понимание что у двухмерного массива длинна это сколько в нем ссылок на одномерные массивы, что в принципе одно и тоже что сколько в нем строк.

Вопрос 2.
Так на i — месте массива b т. е. b уже лежит ссылка на одномерный массив, вот она то и выступает в качестве имени

Вопрос 3.
Эта строка кода присваевает ссылке на  i — индексе одномерный массив длинной i

megaStack

  • Пользователи
  • *
  • Сообщений: 42
  • мой ник на сайте lms.prog.kiev.ua: Coffe-Java
    • Просмотр профиля
    • E-mail
Re: Java start (online) Пархоменко Александр (Вопросы)
« Ответ #46 : Февраля 04, 2019, 09:57:30 pm »
MegaStack

Другой вопрос что вы так не делали и оно заработало, а вот это наоборот очень странно. Работать так оно явно не должно. Такой код как вы привели сработает только в одном случае, если количество строк в массиве равно количеству столбцов в остальных случаях это работать не будет.


У меня почему-то работает. И количество столбцов не соответствует количеству строк!!!! Вот код:

package com.gmail.oastro36;

import java.util.Arrays;

public class Main {

public static void main(String[] args) {

int[][] array = new int[4][5];

for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
array[i][j] = (int) (Math.random() * 10);
System.out.print(array[i][j] + "\t");
}
System.out.println();
}

}

}

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 10985
    • Просмотр профиля
    • E-mail
Re: Java start (online) Пархоменко Александр (Вопросы)
« Ответ #47 : Февраля 05, 2019, 12:24:51 am »
MegaStack

Нее не работает :).

Тут вам опять повезло что столбцов больше чем строк. А вы наоборот попробуйте например так:

int[][] array = new int[4][3];

for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
array[i][j] = (int) (Math.random() * 10);
System.out.print(array[i][j] + "\t");
}
System.out.println();
}

megaStack

  • Пользователи
  • *
  • Сообщений: 42
  • мой ник на сайте lms.prog.kiev.ua: Coffe-Java
    • Просмотр профиля
    • E-mail
Re: Java start (online) Пархоменко Александр (Вопросы)
« Ответ #48 : Февраля 11, 2019, 08:55:41 pm »
Добрый вечер. Вроде бы полностью разобрался с двухмерными массивами. Но у меня возник вопро. В видеолекции был такой код:

package com.gmail.oastro36;

import java.util.Arrays;

public class ArrayMain {

public static void main(String[] args) {

int[][] array = new int[4][5];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
array[i][j] = (int) (Math.random() * 10);
System.out.print(array[i][j] + "\t");
}
System.out.println();

}

for (int[] row : array) {
System.out.println(Arrays.toString(row));
}

}

}

Вопрос связан с работой цикла foreach. Я правильно понимаю смысл его работы: за одну итерацию цикла foreach выводится одна строка??? То есть за одну итерацию перебираются все 5 j-х элементов каждого i-го элемента. То есть не каждый j-й элемент за одну итерацию, а все в строке. Так или не так????

И еще был в видеолекции такой код (практическая задача) Там где нужно было считать с клавиатуры целое положительное число (n), сформировать массив с одинаковым количеством строк и столбцов равным введенному число, и заполнить масив цифрами по возрастанию от 1 до n. Вывести массив на экране и вычислить сумму цифр по главной диагонали. Вы в своем решении подсчитали суму цифр по диагонали через цикл, а я это сделал через условный оператор if, а именно:

package com.gmail.oastro36;

import java.util.Arrays;
import java.util.Scanner;

public class ArrayMain {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
System.out.println("Введите размер массива(целое число): ");
int n = sc.nextInt();

int[][] array = new int[n][n];
int num = 0;

for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {

array[i][j] = j + 1;

if (i == j) {
num = num + array[i][j];
}
}

}

for (int[] row : array) {
System.out.println(Arrays.toString(row));
}
System.out.println("Сумма цифр по диагонали: " + num);

}

}

Вопрос. Можно ти так через if?


« Последнее редактирование: Февраля 11, 2019, 09:58:39 pm от megaStack »

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 10985
    • Просмотр профиля
    • E-mail
Re: Java start (online) Пархоменко Александр (Вопросы)
« Ответ #49 : Февраля 11, 2019, 11:57:27 pm »
MegaStack

Вопрос о цикле for — each для двух мерного массива. Так как каждым элементом двумерного массива является ссылка на одномерный массив, то за каждую итерацию переменной цикла присваивается сразу целая строка.


Вопрос о решении через if. Так решать можно но вы выполните много лишних итераций. Но решение будет работоспособно.

megaStack

  • Пользователи
  • *
  • Сообщений: 42
  • мой ник на сайте lms.prog.kiev.ua: Coffe-Java
    • Просмотр профиля
    • E-mail
Re: Java start (online) Пархоменко Александр (Вопросы)
« Ответ #50 : Февраля 12, 2019, 10:13:06 am »
А поясните, почему через if будет много лишних итераций?

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 10985
    • Просмотр профиля
    • E-mail
Re: Java start (online) Пархоменко Александр (Вопросы)
« Ответ #51 : Февраля 12, 2019, 01:49:41 pm »
МegaStack

Ну смотрите обычно вам массивы уже будут приходить готовые (например по сети), что бы проссумировать диагональные элементы массива вашим способом (с использованием if для массива 5х5 = 25 действий) в тоже время для перебора диагональных элементов циклом всего 5 действий. Вроде небольшая разница, но для массива 1000х1000 (средненькая фотография ) ваш способ должен выполнить 1_000_000 действий, а просто циклом по диагонали 1000 действий, что уже весьма и весьма существенно.