Проблема с обращением к элементу поля массива полей
По идее, простая задача из учебника, но поскольку понимание принципов пока хромает на обе ноги, прошу показать, как это работает:
class Level {
private final LevelInfo levelInfo;
private final Point[] points;
public Level(LevelInfo levelInfo, Point[] points) {
this.levelInfo = levelInfo;
this.points = points;
}
static int res = 0;
//метод, который не могу родить, не соображу как обратится к переменной поля массива полей
int i = points.length - 1;
while (i > 0) {
//aux = points[i];
res = res + (Point.x * Point.y);
i--;
System.out.println(Point.x + " * " + Point.y + " = " + res); //явно как-то не так
System.out.println("iter = " + i);
}
//int res = (Point.x * Point.y);
//System.out.println("p4 = " + p4.getX());
return res;
}
static class LevelInfo {
private static String name;
private static String difficulty;
// private LevelInfo levelInfo;
// private Point[] points;
public String getName() {
return name;
}
public String getDifficulty() {
return difficulty;
}
public LevelInfo(String name, String difficulty) {
LevelInfo.name = name;
LevelInfo.difficulty = difficulty;
}
}
static class Point {
private static int x;
private static int y;
public int getX() {
return x;
}
public int getY() {
return y;
}
public Point(int x, int y) {
Point.x = x;
Point.y = y;
}
@Override
public String toString() {
return "Quarke level, name is " + LevelInfo.name +
", difficulty is " + LevelInfo.difficulty +
", point count is " + points.length;
}
}
class LevelTest {
public static void main(String[] args) {
//**инициализация массива**
Level.Point p1 = new Level.Point(43, 36);
Level.Point p2 = new Level.Point(38, 31);
Level.Point p3 = new Level.Point(44, 38);
Level.Point p4 = new Level.Point(44, 42); // 6282
Level.Point[] points = {p1, p2, p3, p4};
Level.LevelInfo info = new Level.LevelInfo("Quarke Intro", "Easy");
//вот тут вызывается метод
System.out.println(new Level(info, points).calculateLevelHash());
System.out.println("p4 = " + p4.getX());
}
}
значальное условие :алгоритм хеширования очень простой. Для каждой точки мы умножаем координаты x и y, и складываем сумму всех этих умножений. Полученное число и будет хешем.
Задание В классе Level напиши метод calculateLevelHash(), который бы возвращал число в соответствии с описанным выше алгоритмом.
изначальный код :
class Level {
private LevelInfo levelInfo;
private Point[] points;
public Level(LevelInfo levelInfo, Point[] points) {
this.levelInfo = levelInfo;
this.points = points;
}
@Override
public String toString() {
return "Quarke level, name is " + levelInfo.getName() + ", difficulty is " + levelInfo.getDifficulty() + ", point count is " + points.length;
}
static class Point {
private int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
static class LevelInfo {
private String name;
private String difficulty;
public LevelInfo(String name, String difficulty) {
this.name = name;
this.difficulty = difficulty;
}
public String getName() {
return name;
}
public String getDifficulty() {
return difficulty;
}
}
}
class LevelTest {
public static void main(String[] args) {
Level.Point p1 = new Level.Point(3, 5);
Level.Point p2 = new Level.Point(10, 100);
Level.Point p3 = new Level.Point(50, 40);
Level.Point[] points = {p1, p2, p3};
Level.LevelInfo info = new Level.LevelInfo("Quarke Intro", "Easy");
//3015
System.out.println(new Level(info, points).calculateLevelHash());
}
}
введите сюда код
Ответы (1 шт):
Автор решения: Олег
→ Ссылка
под скрип ржавых шестеренок в тощем мозге сообразил как :
public int calculateLevelHash() {
int res = 0;
for (int i = 0 ; i < points.length; i++) {
res = res + (points[i].x * (points[i].y)) ;
System.out.println(points[i].x + " * " + (points[i].y) + " = " + res);
System.out.println("iter = " + i);
System.out.println("res = " + res);
}
return res;
}
отмена тревоги