Я новичок в 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
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)
вызовет второй конструктор, который принимает аргумент.
Вот хороший учебник по конструкторам.
Вот хороший учебник по перегрузке конструкторов.
Вам нужно написать конструктор для 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");
}
}
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
Glass
отсутствует конструктор.