Вопрос № 98956: Здравствуйте эксперты!
Я только начинаю всой путь в мире Java. У меня к вам просьба. Помогите мне, пожалуйста, со следующими кодами. Не могу до конца найти ошибки. Там три разных файла: TestCircle.java, Shape.java и Circle.java. В идеале, он...
Вопрос № 98.956
Здравствуйте эксперты!
Я только начинаю всой путь в мире Java. У меня к вам просьба. Помогите мне, пожалуйста, со следующими кодами. Не могу до конца найти ошибки. Там три разных файла: TestCircle.java, Shape.java и Circle.java. В идеале, они должны взаимодействовать друг с другом, и, в резельтате чего, должно получиться следуюшее:
This shape is a Circle
located at X = 22, Y = 44
Radius is 2.5
The shape area is: 19.63
The changed shape is:
Circle with center at <22, 44> and radius = 4.25
Area is 56.75
Отвечает: din
Здравствуйте, Игнатьев Иннокентий!
Давайте по порядку.
1. Класс Shape в нем у Вас всего два метода area() и perimeter() которые в обоих случаях возвращают значение 0.00. Встает естественный вопрос, а зачем он нужен? Этот класс просто бессмыслен. Значит мы его просто удаляем.
2. У класса Circle есть конструктор public Circle(double r, int x, int y) и есть поля x и y, как думаете, что делать компилятору в этом случае?
public Circle(double r, int x, int y) {
x = x;
y = y;
setRadius(r);
}
исправляем
public Circle(double r, int X, int Y) {
x = X;
y = Y;
setRadius(r);
}
В том же классе есть метод
public String getLocation() {
return "X = " + X + ", Y = " + Y;
}
нет у вас ни переменных, ни свойств, ни полей с именами X и Y. Java чувствительна к регистру X не то же что x. Исправляем:
public String getLocation() {
return "X = " + x + ", Y = " + y;
}
3. Не используйте оператор "
" при выводе. Метод System.out.println автоматически добавляет в конце текста символ перевода строки, и независимо от платформы ОС. Переделываем:
public static void main(String[] args) {
DecimalFormat showTwoDecimals = new DecimalFormat("0.00");
Circle c1 = new Circle(2.5, 22, 44);
System.out.println("This shape is a " + c1.getName());
System.out.println("located at " + c1.getLocation());
System.out.println("Radius is " + c1.getRadius());
System.out.println("");
System.out.println("The shape area is: " + showTwoDecimals.format(c1.area()));
c1.setRadius(4.25);
System.out.println("The changed shape is:");
System.out.println(c1);
System.out.println("Area is " + showTwoDecimals.format(c1.area()));
}
4. В Java желательно объединять классы в пакеты, хотя бы в целях избежания неоднозначности. Поэтому я указал в начале каждого класса директиву package pkgCircle; где pkgCircle имя нашего пакета.
5. Теперь осталось сделать следующее. Создаем директорию TestCircle в ней поддиректорию pkgCircle и уже в ней создаем 2 файла TestCircle.java и Circle.java. Из директории TestCircle вызываем компилятор Java и компилируем наш проект:
javac pkgCircle/TestCircle.java pkgCircle/Circle.java
6. И наконец запускаем нашу программу:
java pkgCircle.TestCircle
и видим то, что Вы хотели видеть.
Полностью исправленный код в приложении.
Удачи!
Приложение:
--------- Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: din (статус: Практикант)
Ответ отправлен: 20.08.2007, 01:46 Оценка за ответ: 5 Комментарий оценки: Уважаемый din,
Я искренне благодарю Вас за Вашу помощь. Спасибо Вам.