2015-12-07 4 views
0

У меня есть следующий код:Неожиданный выход из класса Test

import java.util.*; 

public class Room { 

    ArrayList<Bed> beds = new ArrayList<Bed>(); 

    private int BedNumber; 

    public void createBed(boolean isDouble) { 

     beds.add(new Bed(isDouble)); 

     BedNumber++; 
    } 

    public int howManyBeds() { 
     return BedNumber; 
    } 

    public static void main(String[] args) { 
     Room p = new Room(); 
     p.createBed(true); 
     p.createBed(false); 
     Bed test = p.beds.get(0); 
     System.out.println(test); 
    } 

} 

public class Bed { 

    private boolean isDouble; 

    public Bed(boolean isDouble) { 
     this.isDouble = isDouble; 

    } 

    public String bedSize() { 

     if (isDouble) { 
      return "Double Bed"; 
     } else { 
      return "Single Bed"; 
     } 
    } 


} 

Когда я скомпилировать его, Eclipse сообщает мне, что есть ошибки, присутствующие в коде, и спрашивает меня, если я хочу, чтобы продолжить. Когда я это сделаю, я получаю совершенно неожиданный результат - Bed @ 14ae5a5

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

Может ли кто-нибудь увидеть, что мне не хватает?

UPDATE ----

Нашли ошибку, которую я исправленный ниже. Я печатал ссылку на объект вместо вызова метода ...

Теперь вы печатаете правильный результат, однако Eclipse все еще сообщает мне, что что-то не так при компиляции.

Является ли мой код плохо написанным? Может ли кто-нибудь определить, почему Eclipse не счастлив?

+0

Может быть, оно принимает от последнего успешно скомпилированного класса. Перед попыткой выполнить все ошибки компиляции необходимо устранить. –

ответ

0

Ошибки вашей компиляции связаны с попыткой объявить два открытых класса в одном файле Java.

Что касается вывода, вы пытаетесь напечатать объект Bed, что приводит к печати объекта Object.toString().

public String toString() { 
    return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
} 

Так, он печатает имя класса, «Кровать» с символом @, за которым следует шестнадцатеричное значение его хэш, 14ae5a5.

+0

Все разрешено сейчас. Эти два класса находятся в отдельных файлах. На совершенно другой ноте, хорошая практика - создать метод get для извлечения значений из ArrayList вне класса? –

+0

Ради абстракции, да. В более широком масштабе это делается для того, чтобы любые изменения могли быть сделаны с одной функцией и применяться ко всем ее вызовам. Гораздо сложнее сказать, например, добавить защищенные от ifdef защитные оболочки на основе платформы для каждого отдельного вызова функции, зависящего от платформы, а не просто создавать функцию с другой реализацией на каждую платформу и каждый раз вызывать ее. –

0

Метод printlnSystem.out фактически вызывает метод параметра, в данном случае, слоя. Однако toString нет в вашем классе Bed! Так что же он сделал? Он вызывает метод toStringObject, который возвращает [email protected], где XXXX является местом расположения вашей кровати.

Чтобы решить эту проблему, просто добавьте метод toString к вашему классу. Не забудьте добавить @Override перезаписать toString метод Object

@Override 
public String toString() { 
    //return a string representation here 
} 
Смежные вопросы