2015-04-08 2 views
-2

В настоящее время я пытаюсь обнаружить и распечатать размер ArrayList в Java для университетского задания. Это то, что я до сих пор:Размер печати ArrayList в Java

метод для ArrayList

public Dog[] obtainAllDogs() { 
    Dog[] result = new Dog[dogs.size()]; 
    result = dogs.toArray(result); 
    return result; 
} 

и метод, чтобы установить емкость конуры (выбежала из консоли)

private void setKennelCapacity() { 

    Dog[] currentKennelCapacity = kennel.obtainAllDogs(); 
    for (Dog d: currentKennelCapacity){ 
    } 
    System.out.println("The current kennel holds " + currentKennelCapacity + ", if you wish to increase it please enter a number below."); 
    System.out.print("Enter max number of dogs: "); 
    int max = scan.nextInt(); 
    scan.nextLine(); 
    kennel.setCapacity(max); 
} 

Это немного неуклюжий, но он делает эту работу в настоящий момент, интересная часть заключается в том, что она выдает это при запуске консоли:

The current kennel holds [LDog;@55f96302, if you wish to increase it please enter a number below. 

Это набирает что-то, но не совсем то, что я хочу. В настоящее время размер питомника равен 20, поэтому он должен, очевидно, распечатать 20, а не [LDog; @ 55f96302.

Может кто-нибудь объяснить эту ошибку мне?

Если я заменяю currentKennelCapacity с «г» (от каждого цикла), он выводит все данные из питомника, а не только целого числа 20.

Вот текущая информация конуры, если полезно :

DogsRUs 
20 
1 
Dinky 
1 
James Bond 
007007 
false 
1 
Gold fingers 

Я предпочел бы что-то, чтобы помочь мне понять, а не просто прямой решения, если это возможно, помогает мне узнать :)

Спасибо!

+1

Что вы думаете? «Текущий питомник держит« + currentKennelCapacity »? Каков тип 'currentKennelCapacity' и какой метод вызывается при попытке связать его с String? –

+3

Я не вижу 'ArrayList' где угодно. В любом случае вы видите по умолчанию 'toString' массива. –

+0

@DaveNewton Он имеет в виду массив. Глупая ошибка с его стороны, но все в порядке. Вам нужно сделать .length для массива, чтобы увидеть размер – 3kings

ответ

4

currentKennelCapacity - это массив. Если вы хотите напечатать, сколько элементов он может содержать, вы должны использовать currentKennelCapacity.length:

System.out.println("The current kennel holds " + currentKennelCapacity.length + ", if you wish to increase it please enter a number below."); 

Примечание это не хорошее имя для переменной, которая должна ссылаться на массив, так как она выглядит, как это должно быть число ,

0

Вы пытаетесь распечатать массив Dog, который не может быть преобразован в строку, поэтому вы видите эти числа. Это хэш-код массива.

Вы можете найти размер массива через его собственность длины, как это:

System.out.println("The current kennel holds " + 
    currentKennelCapacity.length 
    + ", if you wish to increase it please enter a number below."); 
2

То, что вы сделали это распечатать сам массив, а не размер массива. А в Java массивы тоже являются объектами, но они не переопределяют Object's toString method, который отвечает за вывод [LDog;@55f96302.

[T] его метод возвращает строку равным значению:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

Все массивы имеют length атрибут можно использовать.

System.out.println("The current kennel holds " + currentKennelCapacity.length 
    + ", if you wish to increase it please enter a number below."); 

Что толку был ваш выбор имени переменной, currentKennelCapacity, так что имя описывает что-то еще, кроме того, что это на самом деле. Я бы назвал его более точным, например currentKennel. Возможно, это способствовало запутыванию того, что будет напечатано при печати переменной.

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

System.our.println(Arrays.toString(currentKennel)); 
1

Используйте [] .length

System.out.println("The current kennel holds " + currentKennelCapacity + ", if you wish to increase it please enter a number below."); 

Для

System.out.println("The current kennel holds " + currentKennelCapacity.length + ", if you wish to increase it please enter a number below."); 
0

Прежде всего, ваш оператор печати находится вне вашего для каждого цикла. Во-вторых, вы можете попробовать и исследовать перегрузку метода toString(). Это поможет вам понять, почему вы не можете печатать массив, как хотите. Наконец, как уже упоминалось, вам нужно использовать array.length, чтобы получить размер массива.

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