Как я могу поместить массив Java внутри себя? - программирование
Подтвердить что ты не робот

Как я могу поместить массив Java внутри себя?

Я пытаюсь создать массив объектов Java и поместить массив внутри себя со своим вторым индексом (чтобы представить автомодельный фрактал с массивом), но когда я пытаюсь получить доступ к theArray[1][1][0], я получаю эта ошибка:

Main.java:11: error: array required, but Object found.

Это то, что я пробовал до сих пор, и я не уверен, почему он не работает:

import java.util.*;
import java.lang.*;

class Main
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Object[] theArray = new Object[2];
        theArray[0] = "This array should contain itself at its second index.";
        theArray[1] = theArray; //Now I'm attempting to put the array into itself.
        System.out.println(theArray[1][1][0]) //Main.java:11: error: array required, but Object found
    }
}

Возможно ли разместить массив Java внутри себя, как я пытаюсь сделать здесь?

4b9b3361

Ответ 1

theArray[1] имеет тип времени компиляции Object (поскольку он исходит из массива Объекты).

Вам нужно передать его в Object[], чтобы использовать его как массив.


Основная проблема, с которой вы сталкиваетесь, состоит в том, что хотя массив, который содержит сам, является вполне допустимым объектом, он не является допустимым типом.

Вы можете вложить типы массивов произвольно глубоко; ndash; Object[][][][][][][][][][][][][] - допустимый тип. Однако "нижний уровень" этого типа не может быть массивом.

Вы пытаетесь создать тип, который является массивом самого себя.
Используя generics, это было бы возможно:

class Evil extends ArrayList<Evil> { }

Ответ 2

Вы используете ошибку кастинга, так как объявили theArray как массив объектов. В результате вы не можете обещать Java, что theArray[1] является Array - это может быть любой тип Object. Вам нужно разбить свой доступ, чтобы сделать то, что вы хотите:

Object[] innerArray = (Object[]) theArray[1];
System.out.println(innerArray[0] == theArray[0]); // Always true since innerArray IS theArray
while (true) {
    // Careful! This loops forever!
    // set innerArray = innerArray[1] = theArray = theArray[1] = innerArray... 
    // all of these are the exact same object (but you have to tell Java their type every time)
    innerArray = (Object[]) innerArray[1]; 
    System.out.println(innerArray[0]);
}

Ответ 3

Ваш код эквивалентен

Object arr = theArray[1];  // arr is an Object here, not an array 

Но вы могли бы сделать

Object[] arr = (Object[] ) theArray[1];    // Now it is an array