Я создал класс Robot с двумя свойствами: direction (это просто строка E, A, S, N) и location (массив из 4 целых чисел, которые сохраняют местоположение в обоих направлениях).Класс имеет главный конструктор:
public Robot (int east, int north, int west, int south, int direction) {
this.direction = direction%4 ;
location = new int[4] ;
int[] location = {east,north,west,south} ; }
и конструктор копирования:
Robot( Robot copy ) {
direction = copy.direction ;
location = copy.location ;
}
Также у него есть методы, но я хочу показать эти два метода: move () и setDirection ().
public void move() {
location[direction]++ ;
}
public void setDirection( int direction ) {
this.direction = direction ;
}
Я создал объект Robot и выровнял его с новым объектом, также использовал другой новый объект с помощью конструктора копирования:
Robot terminator = new Robot(0,0,0,0,1) ;
Robot b = terminator ;
Robot a = new Robot(terminator) ;
Вот проблема, когда я использую Move() для терминатора, a или b, местоположение других меняется, но когда я использую setDirection для терминатора, a не меняется, а b изменяется.Также, когда я использую то же самое с a, ни один из b и направление терминатора не изменяются.Так в чем же разница?Почему метод move (), реализованный на терминаторе, влияет на копию, а при использовании setDirection () - нет?
System.out.println(terminator) ;
System.out.println(a) ;
System.out.println(b) ;
terminator.setDirection(2);
a.setDirection(3) ;
terminator.move() ;
System.out.println(terminator) ;
System.out.println(a) ;
System.out.println(b) ;
Вывод:
Location[0, 0, 0, 0]Direction N
Location[0, 0, 0, 0]Direction N
Location[0, 0, 0, 0]Direction N
Location[0, 0, 1, 0]Direction W
Location[0, 0, 1, 0]Direction S
Location[0, 0, 1, 0]Direction W