2013-11-08 2 views
0

Я пишу программу, чтобы показать уровень лампы с помощью «O», но когда я компилирую, он показывает «не может найти символ», я объявляю «сообщение» и «яркость», есть ли что-нибудь еще, что я пропустил, чтобы объявить? класс Лампа и класс TestLamp Я сохраняю в другом файле, когда компилирую лампу, не показывает ошибки. Но это шоу «не может найти символ» при компиляции TestLampОшибка Java: не могу найти символ

class Lamp { 

    // Sub-task 1: Declare and initialize data member with default value 
    int brightness=1; 

    // Sub-task 2: Define a method to indicate the brightness level of lamp 
    String getBrightness() { 
     String message = ""; 
     while(brightness>0) { 
      brightness--; 
      message += "O"; 
     } 

     return message; 
    } 

    // Sub-task 3: Define a method to update the brightness of the lamp 
    void setBrightness(int b) { 

     if(b<1 || b>5) 
      brightness=2; 
     else 
      brightness=b; 

    } 
} 

class TestLamp { 
    public static void main (String[] args) { 
     // Sub-task 4: Declare and create 3 lamp objects 
     Lamp lamp1,lamp2,lamp3; 

     // Sub-task 5: Adjust the lamp brightness according to the requirement 
     lamp1.setBrightness(3); 
     lamp2.setBrightness(10); 

     // Sub-task 6: Display the information of the created lamps 
     lamp1.getBrightness(); 
     System.out.println("Lamp1"+lamp1.message); 
     lamp2.getBrightness(); 
     System.out.println("Lamp2"+lamp2.message); 
    } 
} 
+0

Не могли бы вы высказать полную ошибку? Кроме того, если 'TestLamp' не находится в одном пакете, вы должны поставить' import package.Lamp' перед объявлением класса. – fxm

+1

Не можете найти * который * символ? И на какой линии? – Bohemian

ответ

3

используется lamp1.message но нет message поля в Lamp классе.

Кроме того, вы не инициализируете экземпляры Lamp, что приведет к другой ошибке времени компиляции. (Спасибо JasonC, я так привык к IDE, что забыл основные вещи).

+1

Использование неинициализированных переменных приведет к ошибке компиляции, а не к NPE (если плакат не инициализирует их «нуль», конечно). –

+0

@JasonC true, я собираюсь отредактировать – orique

5

вы просто создать ссылку Lamp lamp1,lamp2,lamp3; но вы не создаете какой-либо объект создать объект первым, как ниже

Lamp lamp1=new Lamp(); 

Объем Струнный сообщения является с в методе getBrightness() так lamp1.message даст вам ошибки

Так, чтобы напечатать сообщение или вы можете определить String message на уровне класса или использовать lamp1.getBrightness()

Пожалуйста, смотрите ниже рабочему код

class Lamp { 

// Sub-task 1: Declare and initialize data member with default value 
    int brightness=1; 
    String message = ""; 
// Sub-task 2: Define a method to indicate the brightness level of lamp 
String getBrightness() { 

    while(brightness>0) { 
     brightness--; 
     message += "O"; 
    } 


    return message; 
} 

// Sub-task 3: Define a method to update the brightness of the lamp 
void setBrightness(int b) { 

    if(b<1 || b>5) 
     brightness=2; 
    else 
     brightness=b; 


} 


    } 

class ddd { 
public static void main (String[] args) { 
    // Sub-task 4: Declare and create 3 lamp objects 
    Lamp lamp1 = new Lamp(); 
    Lamp lamp2=new Lamp(); 

    // Sub-task 5: Adjust the lamp brightness according to the requirement 
    lamp1.setBrightness(3); 
    lamp2.setBrightness(10); 

    // Sub-task 6: Display the information of the created lamps 
    lamp1.getBrightness(); 
     System.out.println("Lamp1"+lamp1.message); 
    lamp2.getBrightness(); 
     System.out.println("Lamp2"+lamp2.message); 


} 
     } 
+0

@ JasonC друг, просматривая код, который мне приковал, я просто редактировал свой ответ и нашел, что вы уже предоставили решение. Так что я остановился – SpringLearner

3

Вы не инстанцированы свои lamp объектов, и ваш класс лампы не хватает message поля

2

исправили ошибки.

Error 1: 
System.out.println("Lamp1"+lamp1.getBrightness()); //changed from lamp1.message 
System.out.println("Lamp1"+lamp1.getBrightness()); //changed from lamp2.message 

Error 2: 
     lamp1 = new Lamp(); //missing instance creation 
     lamp2 = new Lamp();//missing instance creation 

/* если вы планируете использовать lamp3 и lamp4, создать этот экземпляр, а */

рабочий код после исправления:

class Lamp { 

// Sub-task 1: Declare and initialize data member with default value 
    int brightness=1; 

// Sub-task 2: Define a method to indicate the brightness level of lamp 
String getBrightness() { 
    String message = ""; 
    while(brightness>0) { 
     brightness--; 
     message += "O"; 
    } 


    return message; 
} 

// Sub-task 3: Define a method to update the brightness of the lamp 
void setBrightness(int b) { 

    if(b<1 || b>5) 
     brightness=2; 
    else 
     brightness=b; 


} 


    } 

class TestLamp { 
public static void main (String[] args) { 
    // Sub-task 4: Declare and create 3 lamp objects 
    Lamp lamp1,lamp2,lamp3; 

    lamp1 = new Lamp(); 
    lamp2 = new Lamp(); 

    // Sub-task 5: Adjust the lamp brightness according to the requirement 
    lamp1.setBrightness(3); 
    lamp2.setBrightness(10); 

    // Sub-task 6: Display the information of the created lamps 
    lamp1.getBrightness(); 
     System.out.println("Lamp1"+lamp1.getBrightness()); 
    lamp2.getBrightness(); 
     System.out.println("Lamp2"+lamp2.getBrightness()); 


} 
     } 
3

Перед вашим setBrightness() метод, вы должен создать экземпляр объекта лампы.

Lamp lamp1 = new Lamp(); 

Сделайте то же самое для всех объектов лампы.

Затем измените ваш

System.out.println("Lamp1"+lamp1.message); 

в

System.out.println("Lamp1"+lamp1.getBrightness()); 
1

Создание объекта для лампы в классе Testlamp

Lamp lamp1=new Lamp(); 
+0

+/- 0 Отлично catch, но это не является причиной ошибки компиляции, описанной OP (хотя это, безусловно, будет причиной следующей ошибки компиляции, которую он получает после фиксации его текущей). –

0

Вы пытаетесь использовать lamp1.message, но message не поле лампа.У вас есть:

// Sub-task 2: Define a method to indicate the brightness level of lamp 
    String getBrightness() { 
     String message = ""; 
     while(brightness>0) { 
      brightness--; 
      message += "O"; 
     } 


     return message; 
    } 

Затем вы идете, чтобы использовать его как:

 lamp1.getBrightness(); 
     System.out.println("Lamp1"+lamp1.message); 

Но то, что вы, вероятно, имел в виду:

 System.out.println("Lamp1"+lamp1.getBrightness()); 

Обратите внимание, что вы используете возвращаемое значение из getBrightness(), который возвращает указанную вами строку.

Между прочим, по соглашению, получатели и сеттеры свойств обычно получают и устанавливают один и тот же тип значения. Более распространенная практика заключается в том, чтобы у вас было , которое вернуло текущее значение яркости (точную противоположность setBrightness(int)) и добавьте специальный метод, например. String getBrightnessMessage(), чтобы сгенерировать строку, которую вы используете.

1

Прежде всего:

  • Вы не имеете сообщение переменную в классе лампы, которые вы пытаетесь вызвать в System.out.printline, используйте System.out.println ("LAMP1" + LAMP1. getBrightness()); вместо

Далее, некоторые конвенции вещи, чтобы покрыть:

  • Это хорошая вещь, чтобы иметь один из классов в вас исходный файл общественного -> общественный класс TestLamp {
  • В основном добытчиками используются для retriving частных/protected, так как он изнутри экземпляра класса. В вашем случае, если вы whant вернуть некоторое строковое представление, что лучше вызвать метод ToString() или getDispleyText()
1

важно помнить, что в Java Object objectName; ли на самом деле не делает новый объект. Он создает указатель/ссылку на объект. Когда он создается первым, он устанавливает адрес 0 (null). для фактического создания объекта вам необходимо использовать ключевое слово new. В вашем случае, вы должны сделать следующее ...

class TestLamp 
{ 
    public static void main (String[] args) 
    { 
     // Sub-task 4: Declare and create 3 lamp objects 
     Lamp lamp1,lamp2,lamp3; 

     lamp1 = new Lamp(); 
     lamp2 = new Lamp(); 
     lamp3 = new Lamp(); 

     // Sub-task 5: Adjust the lamp brightness according to the requirement 
     lamp1.setBrightness(3); 
     lamp2.setBrightness(10); 

     // Sub-task 6: Display the information of the created lamps 
     lamp1.getBrightness(); 
     System.out.println("Lamp1"+lamp1.message); 
     lamp2.getBrightness(); 
     System.out.println("Lamp2"+lamp2.message); 
    } 
} 

EDIT: Кроме того, ваша строка сообщение в Лампе не может быть достигнуто с помощью основного метода в качестве своего внутри функции. вместо этого используйте метод, который вы делаете для этого, getBrightness().

 System.out.println("Lamp1" + lamp1.getBrightness();); 
     System.out.println("Lamp2" + lamp2.getBrightness();); 
Смежные вопросы