Я новичок в java, я попытался решить приведенную ниже программу, но получаю ошибку, может ли кто-нибудь сказать мне, где я делаю ошибку?

public class TestGlass 
    { 
       public static void main(String [] args) 
       { 
          Glass milk = new Glass(15); // 15 ounces of milk 
          Glass juice = new Glass(3); // 3 ources of juice



      milk.drink(2); 
      milk.drink(1); 

      milk.report(); 

      juice.fill(6);  // went from 3 to 9 ounces 
      juice.drink(1); // now down to 8 ounces 

      juice.report();  

      juice.spill(); 

      juice.report(); 
   } 
} 

class Glass 
{ 

     int ounce;

     public void spill()
     {
       ounce = 0;
     }


     public void drink(int x){
        ounce = ounce-x;
     }

     public void fill(int x){
        ounce = ounce+x;
     }

     public int getOunce()
     {
       return ounce;  
     }


     public void report()
     {
       int x = getOunce();
       System.out.println("Glass has " + x + " ounces");
     }

} 

Вот ошибка,

TestGlass.java:5: error: constructor Glass in class Glass cannot be applied to given types;
      Glass milk = new Glass(15); // 15 ounces of milk 
                   ^
  required: no arguments
  found: int
  reason: actual and formal argument lists differ in length
TestGlass.java:6: error: constructor Glass in class Glass cannot be applied to given types;
      Glass juice = new Glass(3); // 3 ources of juice 
                    ^
  required: no arguments
  found: int
  reason: actual and formal argument lists differ in length
2 errors
0
user3646332 6 Дек 2014 в 22:54

2 ответа

Лучший ответ

Вам нужно добавить конструктор к Glass, который принимает ваш параметр ounce.

class Glass {
....
    public Glass (int ounce) {
        this.ounce = ounce;
    }
....
}

Конструктор - это метод, который вызывается при использовании оператора new. Его задача - инициализировать - создать - экземпляр объекта класса. Конструктор с одним или несколькими аргументами, как этот, настроен на получение значений для инициализации переменных экземпляра класса.

Обратите внимание, как в сообщении об ошибке уже упоминается конструктор. Это потому, что, если вы не укажете свой собственный конструктор, Java добавит конструктор по умолчанию, который не получает аргументов. Этот конструктор по умолчанию без аргументов был тем, что вызывалось при вызове new. Поскольку вы передавали аргументы конструктору без аргументов, вы получили ошибку. Как только вы добавите свой собственный конструктор, конструктор no-arg по умолчанию исчезнет. Если вы также хотите иметь версию без аргументов (например, установив для ounce значение 0 или значение по умолчанию), вы можете вернуть ее, указав ее вместе с той, которую я вам дал - это можно перегрузить конструктор (см. ссылки ниже).

 class Glass {
    ....
        public Glass () {
            this.ounce = 1;  
            /* In this setup, a glass always has at least 1 ounce */
            /* If you want it be 0, you could say this.ounce = 0, or */
            /* just leave everything inside {} blank, since ounce will */
            /* default to 0 anyway */
        }

        public Glass (int ounce) {
            this.ounce = ounce;
        }
    ....
    }

Вызов new Glass() вызовет этот первый конструктор без аргументов. Вызов new Glass(15) вызовет второй конструктор, который принимает аргумент.

Вот хороший учебник по конструкторам.

Вот хороший учебник по перегрузке конструкторов.

1
sparc_spread 6 Дек 2014 в 20:28

Вам нужно написать конструктор для Glass, который принимает аргумент.

class Glass { 
     int ounce;

     public Glass(int ounce) {
         this.ounce = ounce;
     }

     public void spill()
     {
       ounce = 0;
     }


     public void drink(int x){
        ounce = ounce-x;
     }

     public void fill(int x){
        ounce = ounce+x;
     }

     public int getOunce()
     {
       return ounce;  
     }


     public void report()
     {
       int x = getOunce();
       System.out.println("Glass has " + x + " ounces");
     }

} 
0
Wade Anderson 6 Дек 2014 в 19:56