2016-01-05 2 views
-2

Вот мой код:метод Java deepToString() не работает на массив примитивов

import java.util.Arrays; 
import java.util.List; 

public class ArrayDemo1 { 
    public static void main (String args[]) { 

    //reversing array and inspecting it using Arrays.deepToString() 

    int[] array1 = new int[] {1,2,3,4}; 
    int[] reversed_array = ArrayDemo1.reverse(array1); 
    for (int i=0; i < reversed_array.length; ++i) { 
     System.out.println(reversed_array[i]); 
    } 
    System.out.println(Arrays.deepToString(reversed_array)); 
    } 

    public static int[] reverse(int[] list) { 
    int[] result = new int[list.length]; 

    for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { 
     result[j] = list[i]; 
    } 
    return result; 
    } 
} 

Ошибка:

incompatible types: int[] cannot be converted to Object[]

Похоже, в этом посте: What's the simplest way to print a Java array?

они используют Arrays.deepToString для правильной печати массивов примитивов?

Это код, в том ссылочного сообщение:

*// array of primitives:* 
int[] intArray = new int[] {1, 2, 3, 4, 5}; 
*// for when you have other elements (other than strings) use the code below* 
System.out.print(Arrays.deepToString(*your arrays name*)); 
*//output: [1, 2, 3, 4, 5]* 
+3

Какой конкретный ответ вы говорите? По большей части, я вижу, что 'deepToString' используется для массивов массивов на этой странице ... –

+0

, если вы измените все на Object [], где у вас есть int [], он будет работать – JRowan

+1

Вы можете просто использовать' Массивы. toString() 'вместо' Arrays.deepToString() '. У вас есть массив 'int', а не массив массивов. – azurefrog

ответ

4

ошибка именно то, что говорит составитель. У вас есть int[], но вы не можете передать его методу, который ожидает Object[], так же, как вы не можете передать int (или любой другой примитив), где требуется Object.

Использование метода рекурсивного преобразования строк, такого как Arrays.deepToString, здесь не требуется. Этот метод принимает только Object[], потому что только массив ссылок на объекты может ссылаться на другие массивы, что делает рекурсию необходимой. Массив примитивов может содержать только примитивные значения - нет необходимости брать каждый отдельный элемент и рекурсивно называть его deepToString; они уже являются примитивными значениями. На самом деле, Arrays.deepToString «S JavaDocs состояние:

If an element e is an array of a primitive type, it is converted to a string as by invoking the appropriate overloading of Arrays.toString(e) . If an element e is an array of a reference type, it is converted to a string as by invoking this method recursively.

Метод Arrays.deepToString сам должен заметить, если внутренний элемент примитивный массив, и он вызывает Arrays.toString в этом случае.

Вместо этого используется Arrays.toString, у которого есть перегрузки для каждого типа примитивных массивов.

Смежные вопросы