2015-08-06 2 views
1

Я следую за книгой, и у меня есть класс Point, который определяет точку, и я пытаюсь отобразить значения. Я смотрю вокруг какое-то время, независимо от того, что я делаю, всегда отображается [0,0], вот мой код.Метод toString() не печатает правильные значения объекта

class Main { 

    public static void main(String []args) { 
     Point point = new Point(10, 20); 
     System.out.println(point.toString()); 
    }  
    } 

    class Point { 

    private int x, y; 

    public Point(int x, int y) { 
     x = x; 
     y = y; 
    } 

    public String toString() { 
     return "[" + x + ", " + y + "]"; 
    } 

ответ

6

Вы никогда не инициализируете членов класса x и y на самом деле. Таким образом, они инициализируются как 0 автоматически, следовательно, вывод [0,0].

x = x означает параметр x = параметр x, который ничего не делает.

использование this.x = x; вместо этого Point класс участник x будет установлен.

2

Используйте это в конструкторе, как показано ниже: -

class Point { 

private int x, y; // These x and y are member of Point class 

public Point(int x, int y) { 
    this.x = x; 
    this.y = y; 
} 

public String toString() { 
    return "[" + x + ", " + y + "]"; 
} 

Вы не инициализирует х и у класса Point. В методе toString() вы печатаете x и y класса Point, которые не инициализируются и, следовательно, принимают значение по умолчанию 0 i.e. 0 - значение по умолчанию для целого числа.

2

Посмотрите на конструкторе:

public Point(int x, int y) { 
     x = x; 
     y = y; 
    } 

В вашем случае, если вы не инициализировать поля класса. Чтобы сделать это, используйте this ключевое слово и оно должно выглядеть следующим образом:

public Point(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

В противном случае вы имеете дело с параметром x и только y переменных.

0

В вашем Constructor для Point объекта:

public Point(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

Вам нужно будет поставить this.x, чтобы указать, что вы устанавливаете значение x переменной в Point объекта, а не x аргумента, переданного в конструктор.

Обновленные функциональный код ниже:

class Main { 

    public static void main(String []args) { 
     Point point = new Point(10, 20); 
     System.out.println(point.toString()); 
    }  
    } 

    class Point { 

    private int x, y; 

    public Point(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    public String toString() { 
     return "[" + x + ", " + y + "]"; 
    } 
1

использовать это ключевое слово для разделения локальных переменных и переменного экземпляра. в вашем параметризованном конструкторе jvm не может инициализировать переменную экземпляра, потому что она получает проблему двусмысленности между локальной и переменной экземпляра. И переменная экземпляра в java неявно инициализируется, если u не инициализируется, поэтому вы получаете [0,0] в качестве вывода.

здесь код ..

класс Main {

public static void main(String []args) { 
    Point point = new Point(10, 20); 
    System.out.println(point.toString()); 
}  

}

класс точка {

private int x, y; 

public Point(int x, int y) { 
    this.x = x; 
    this.y = y; 
} 

public String toString() { 
    return "[" + x + ", " + y + "]"; 
} 
Смежные вопросы