2015-02-12 9 views
-1

Я работаю над чем-то, но у меня есть эта проблема, которую я не могу решить ... Есть 2 ситуации, но мне нужно их обоих сразу. .Java - Требуется массив, но *** найдено и символ не найден

1 @Test 
2 public void newStackIsFull() { 
3  BoundedStack targetStack = new BoundedStack(5); 
4  targetStack[0] = new BoundedStack(); 
5  assertTrue(targetStack.isFull()); 
6 } 

В этом случае, я получаю сообщение об ошибке в строке 4: array required, but BoundedStack found

Если я изменить код для этого:

1 @Test 
2 public void newStackIsFull() { 
3  BoundedStack[] targetStack = new BoundedStack[5]; 
4  targetStack[0] = new BoundedStack(); 
5  assertTrue(targetStack.isFull()); 
6 } 

Здесь я получил сообщение об ошибке в строке 5: cannot find symbol .isFull()

Проблема в том, что мне нужна ОБА ситуация сразу. Поэтому я должен уметь читать из массива, помещать вещи в массив, ... а также использовать методы из класса BoundedStack.

+0

Какая библиотека BoundedStack является частью? Я не вижу его в встроенных Java-модулях; это то, что вы написали? Если да, делали ли вы документы? Если нет, не могли бы вы назвать нам имя библиотеки? –

+0

В первом случае targetStack - это Object ... так что вы не можете сказать targetStack [0], потому что targetStack НЕ является массивом. Во втором случае targetStack представляет собой массив, поэтому массив NOT имеет метод isFull. Вы уверены, что ищете? –

+0

targetStack [0] .isFull() ??? т. е. вы просто не ссылаетесь на элемент в массиве? –

ответ

0

Если вы хотите расширить тип массива в java: вы не можете. полная остановка.

Однако вы можете использовать реализацию интерфейса List (ArrayList здесь, кажется, хороший выбор), который будет хранить вещи с индексом, и вы можете получить вещи, используя get метод:

List<BoundedStack> list = new ArrayList<BoundedStack>(); 
list.add(new BoundedStack()); 
list.get(0); 
list.isEmpty(); 

Если вы хотите для добавления методов к этому классу, вы можете расширить его.

+0

Я думаю, что дело в том, что они хотят использовать операции с массивом на объекте «BoundedStack», но не знают, как это сделать. Я не думаю, что они хотят массив объектов BoundedStack. –

+0

Это означает, что они хотят каким-то образом расширить тип массива, что невозможно в java. – benzonico

+0

Но вы предполагаете, что они используют «Список» 'BoundedStack' - я говорю, что я думаю, что OP хочет использовать« BoundedStack »вместо списка. Это вполне возможно сделать аналогичным объектом для массива, не распространяя его напрямую. –

1

Ваш первый пример имеет ошибку времени компиляции, потому что вы пытаетесь получить доступ к первому элементу массива, но targetStack на самом деле является BoundedStack, а не массивом.

Ваш второй пример также имеет ошибку времени компиляции; на этот раз вы пытаетесь вызвать метод isFull для массива (переменная targetStack), и этот метод не существует для массивов.

Вы, кажется, путаете массив объекта и самого объекта.

BoundedStack[] targetStack = new BoundedStack[5]; 
//targetStack is now an array of 5 BoundedStack and not a BoundedStack 
//targetStack[0] is the first element of the array, beware that as of this moment, it is null because the array was not initialized 
targetStack[0] = new BoundedStack(); //you create a new BoundedStack object 
System.out.println(targetStack[0].isFull()); //we print if this first element is full or not. 
Смежные вопросы