Путаница с классом класса и классом драйверов в java

В основном мне приходилось писать класс Point, а затем класс драйвера для него, это также делается в eclipse. Проблема, с которой я столкнулась, заключается в том, что когда я пытаюсь вызвать переменные pointX и pointY, чтобы изменить значение точки в классе драйвера, я продолжаю получать ошибку. В моих инструкциях переменные должны были объявляться как private в PointClass, но затем возникает проблема при попытке вызвать их в классе PointTest. Также я смущен, если мои указатели/методы get & set в PointClass правильно написаны.

Чтобы уточнить, каковы мои требования, это краткое изложение моих инструкций:

  1. Напишите класс Point. Класс Point должен быть записан как абстрактный тип данных.
  2. Включите следующие переменные экземпляра:

    а. целое число, представляющее координату x

    б. целое число, представляющее координату y

    с. Переменные экземпляра в вашей программе должны быть доступны только внутри класса Point.

  3. У вас есть 2 конструктора класса Point.

    а. конструктор без аргументов, установите обе переменные экземпляра в 10 (десять).

    б. конструктор, имеющий два аргумента, по одному для каждой из двух переменных экземпляра, устанавливает переменные экземпляра в значения этих аргументов.

  4. Включите методы get и set для каждой из двух переменных экземпляра, определенных на шаге 2.

  5. Включите метод toString в свой класс Point.
  6. Напишите клиентскую программу под названием PointTest
  7. В классе PointTest выполните следующие действия:

    • Создайте объект типа Point с помощью конструктора no-arguments. Вызовите эту точку1

      Создайте второй объект типа Point, используя конструктор с двумя аргументами. Назовите эту точку2. Используйте значения x = 11, y = 24

      Отображать переменные экземпляра точки 1 после вызова point1.toString()

      Отображать переменные экземпляра точки 2 после вызова point2.toString()

      Измените значение x с точки 1 на 35, используя установленный метод для значения x для точки 1

      Отображать переменные экземпляра точки 1 после вызова point1.toString()

      Отображать переменные экземпляра точки 2 после вызова point2.toString()

      Измените значение y с точки 2 на 13, используя метод set для значения y для point2

      Отображать переменные экземпляра точки 1 после вызова point1.toString()

      Отображать переменные экземпляра точки 2 после вызова point2.toString()

Код для класса Point выглядит следующим образом

public class PointClass {

 private int pointX; //set instance variables
 private int pointY;


 public void setPoints() { //method to set the points values
 pointX = 10;
 pointY = 10;

 }

 public void getPoints(int x, int y){ //method to set arguments to instance variables 
 pointX = x;
 pointY = y;
 }

 /////////////////////////////////////////////////

 public int getPointX() {
 return pointX;
 }

 public void setPointX(int x) {
 this.pointX = x;
 }

 ///////////////////////////////////////////////

 public int getPointY() {
 return pointY;
 }

 public void setPointY(int y) {
 this.pointY = y;
 }

 ///////////////////////////////////////////////

 public String toString(){ //toString method to display the values
 return "x = " + pointX + "y = " + pointY;
 }

}

Код драйвера следующий.

import java.awt.Point;

public class PointTest{

 public static void main(String[] args){

 PointClass p = new PointClass();


 System.out.print("Lab1 Point");
 System.out.print("January 16, 2014");

 Point point1 = new Point(); //set point1 as no argument 
 Point point2 = new Point(11,24); // set point2 as argument with x and y

 System.out.print(point1.toString()); //display point1 from toString method
 System.out.print(point2.toString()); //display point2 from toString method

 point1 = pointX(35);

 System.out.print(point1.toString()); 
 System.out.print(point2.toString()); 

 point2.pointY(13);

 System.out.print(point1.toString()); 
 System.out.print(point2.toString()); 
 }

}

РЕДАКТИРОВАТЬ

Хорошо, после исправления некоторых вещей, я все еще немного смущен, так как я все еще получаю одну ошибку, так ли это должно быть?

public class PointClass {

private int pointX; //set instance variables
private int pointY;


public void setPoints() { //method to set the points values
 pointX = 10;
 pointY = 10;

}

public PointClass(int x, int y){ //method to set arguments to instance variables 
 this.pointX = x;
 this.pointY = y;
}

/////////////////////////////////////////////////

public int getPointX() {
 return pointX;
}

public void setPointX(int x) {
 this.pointX = x;
}

///////////////////////////////////////////////

public int getPointY() {
 return pointY;
}

public void setPointY(int y) {
 this.pointY = y;
}

///////////////////////////////////////////////

public String toString(){ //toString method to display the values
 return "x = " + pointX + "y = " + pointY;
}

}

public class PointTest {

public static void main(String[] args){


 System.out.print("Lab1 Point");
 System.out.print("January 16, 2014");

 PointClass point1 = new PointClass(); //set point1 as no argument 
 PointClass point2 = new PointClass(11, 24); // set point2 as argument with x and y

 System.out.print(point1); //display point1 from toString method
 System.out.print(point2); //display point2 from toString method

 point1.setPointX(35);

 System.out.print(point1); 
 System.out.print(point2); 

 point2.setPointY(13);

 System.out.print(point1); 
 System.out.print(point2); 
}

}
1 ответ

Если переменная-член является private вы не можете напрямую обращаться к ней за пределами своего собственного класса, как вы пробовали здесь

point2.pointY(13);

Вы должны использовать public сеттеры/получатели, которые вы написали, чтобы выполнить это.

point2.setPointY(13);

Кроме того, в вашем PointClass вас есть метод getPoints(int x, int y) который на самом деле устанавливает параметры. Имя метода должно быть изменено на setPoints(int x, int y).

Кроме того, вы переопределили метод toString() вашего PointClass. Из-за этого вам не нужно явно вызывать toString().

System.out.println(point1.toString()); // Unneeded
System.out.println(point1); //Better

редактировать

После удаления import java.awt.point; вам нужно будет добавить конструктор в ваш PointClass.

public class PointClass {

private int pointX; //set instance variables
private int pointY;

//
//This is your new constructor
//
public PointClass(int x, int y) {
 this.pointX = x;
 this.pointY = y;
}

Теперь вы можете создавать экземпляры этого класса, как это

Point point1 = new Point(11, 24); // Old way - Incorrect
PointClass point1 = new PointClass(11, 24) // Better - This will make objects of your class.

Редактировать # 2

Вот заключительные классы, которые я написал для вас:

PointClass

public class PointClass {

 //Set instance variables
 private int pointX;
 private int pointY;

 //Default Constructor - Starts at (0, 0)
 public PointClass() {
 this.pointX = 0;
 this.pointY = 0;
 }

 //Constructor with specified values
 public PointClass(int x, int y){
 this.pointX = x;
 this.pointY = y;
 }

 //Setters
 public void setPointX(int x) { 
 this.pointX = x; 
 }
 public void setPointY(int y) {
 this.pointY = y;
 }

 //Getters
 public int getPointX() { 
 return this.pointX;
 }
 public int getPointY() {
 return this.pointY;
 }

 //toString for use with System.out.println()
 public String toString() {
 return "x = " + this.pointX + " y = " + this.pointY;
 }
}

PointTest

public class PointTest {

 public static void main(String[] args){
 System.out.println("Lab1 Point");
 System.out.println("January 17, 2014");
 System.out.println();

 PointClass point1 = new PointClass(); //set point1 as no argument 
 PointClass point2 = new PointClass(11, 24); // set point2 as argument with x and y

 System.out.println("Point1: " + point1); //display point1 from toString method
 System.out.println("Point2: " + point2); //display point2 from toString method
 System.out.println();

 point1.setPointX(35);

 System.out.println("Point1: " + point1); 
 System.out.println("Point2: " + point2); 
 System.out.println();

 point2.setPointY(13);

 System.out.println("Point1: " + point1); 
 System.out.println("Point2: " + point2);
 }

}

Когда я только что запустил это, я получил этот вывод

Lab1 Point
January 17, 2014

Point1: x = 0 y = 0
Point2: x = 11 y = 24

Point1: x = 35 y = 0
Point2: x = 11 y = 24

Point1: x = 35 y = 0
Point2: x = 11 y = 13

licensed under cc by-sa 3.0 with attribution.