#java #encapsulation #setter #instance-variables
#java #инкапсуляция #установщик #переменные экземпляра
Вопрос:
Мой код состоит из 2 классов. (1. Тест) (2. Собака)
Цель кода состоит в том, чтобы test создал 3 собаки и с помощью установщиков установил имя и размер собак, а затем заставил 3 собак лаять.
Вот мой код.
public class Dog {
private int size;
public void bark(){
System.out.println("Size: " size);
if(size > 19) System.out.println("Woof Woof Woof");
if(size > 9 amp;amp; size < 20) System.out.println("Bark Bark Bark");
if(size < 10 amp;amp; size > 0) System.out.println("Yip Yip Yip");
if(size == 0) System.out.println("Size Not Set");
}
public void setSize (int s){
if(size > 0 amp;amp; size < 60) size = s;
if(size > 60) {
size = 60;
System.out.println("Debug: Size sent to large resetting to max.(60)");
}
}
public class Test{
public static void main (String[] args){
//dog size
int s1 = 100;
int s2 = 100;
int s3 = 100;
//create dog and make him bark
Dog d1 = new Dog();
d1.setSize(s1);
d1.bark();
//create dog and make him bark
Dog d2 = new Dog();
d2.setSize(s2);
d2.bark();
//create dog and make him bark
Dog d3 = new Dog();
d3.setSize(s3);
d3.bark();
}}
Вот результат
Size: 0
Size Not Set
Size: 0
Size Not Set
Size: 0
Size Not Set
Я думаю, что при Dog
запуске setSize
он не ссылается size
на переданный аргумент? Если да, то как мне это исправить?
Когда я переключаюсь private int size;
на private int size = 10;
это, это работает. Однако, когда я меняю его на private int size = 0;
это, это не так.
Почему это так?
Комментарии:
1. почему вы проверяете размер?
2. измените размер> 60; на s> 60
Ответ №1:
ваша логика установки неверна:
if(size > 0 amp;amp; size < 60) size = s;
if(size > 60) {
size = 60;
по умолчанию размер инициализируется равным нулю, поэтому вызов установщика не работает, потому что это условие никогда не проверяется!
вам нужно проверить параметр s вместо размера поля!
Ответ №2:
Измените свой размер setter
на
public void setSize (int size){
if(size > 0 amp;amp; size < 60) this.size = size;
if(size > 60) {
this.size = 60;
System.out.println("Debug: Size sent to large resetting to max.(60)");
}
}
Не было смысла проверять значение size
, поскольку оно еще не было установлено
Ответ №3:
изменить size > 60
; на s>60