Получение фрагмента массива 2d-массива

#java #arrays

#java #массивы

Вопрос:

У меня есть 2d-массив строк. Как я могу проверить его фрагмент? Например, строка 3, там до 6-го элемента

Я пробовал

   String arr[][] = new String[3][6]
  arr[3][4] = "example"
  if (Arrays.asList(arr).subList(3,6).contains("example"))
            System.out.print("yes");
 

Но это не работает. Это работает только для 1d массива? Кроме того, вместо использования contains как можно проверить, все ли элементы являются нулевыми в массиве фрагментов?

Комментарии:

1. уточните, пожалуйста, неясно, о чем вы спрашиваете

2. ну, я хочу получить только фрагмент 2d-массива arr [3] [6] и проверить, содержит ли он «пример», не перебирая весь массив

3. вы можете просто получить значение, сохраненное в array[3][6] , что вы имеете в виду, если нарезать дальше?

4. @user3758223, похоже, вы пытаетесь получить всю строку из arr[3] ?

5. Что вы считаете фрагментом многомерного массива?

Ответ №1:

Прежде всего, массивы в Java индексируются с нулевым индексом, поэтому, если вы объявляете массив с первым измерением 3 , максимальный индекс равен 2 .

Во-вторых, если вы хотите просмотреть фрагменты третьей строки, вы должны 2 явно указать индекс перед преобразованием в список.

 import java.util.*;
public class ArrayGame {
    public static void main(String[] args) {
        String arr[][] = new String[3][6];
        arr[2][4] = "example";
        if (Arrays.asList(arr[2]).subList(3,6).contains("example"))
            System.out.println("yes");    
    }
}
 

Вывод:

 yes
 

Ответ №2:

Посмотрите в массивах javadoc:

 Arrays.copyOfRange(T[] original, int from, int to)
 

где

например, исходное значение arr[3]

from равно 0

to равно 7

http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#copyOfRange(T [], int, int)

Комментарии:

1. Но это скопировало бы весь массив и заняло бы память, что плохо, поскольку мне придется выполнять эти проверки в определенных фрагментах массива много раз.

Ответ №3:

Текущий способ сделать это просто :

 if (Arrays.asList(arr[3]).contains("example"))
        System.out.print("yes");
 

Удачи!

Ответ №4:

Вы заявляете, что String arr[][] = new String[3][6] это означает просто структуру из 3 строк и 6 столбцов.

Можно присвоить значение, в данном случае строку,

  • arr[0][...] = <assigned-value> // строка 1
  • arr[1][...] = <assigned-value> // строка 2
  • arr[2][...] = <assigned-value> // строка 3

Но это не будет работать так, как вы ожидали

  • arr[3][4] = "example" // строка 4, здесь выбрасывается ArrayIndexOutOfBoundsException