2015-05-01 4 views
4

Я изучаю Java, и я просматриваю Deitel & Книга Дейтеля «Java: как программировать». Во время обучения я пытаюсь выполнять упражнения в спине. Конкретное упражнение, над которым я работаю, это:Создание класса, затем тестирование этого класса

Создайте прямоугольник класса с длиной и шириной атрибутов, каждый из которых по умолчанию равен 1. Предоставьте методы, которые вычисляют периметр и площадь прямоугольника. Используйте методы set и get для длины и ширины. Установленные методы будут проверять, что длина и ширина - это числа с плавающей запятой, превышающие 0,0 и менее 20,0. Напишите программу для проверки класса Rectangle.

Вот класс, я создал:

package rectangle; 

public class Rectangle { 

    public float rectangle; 
    public float length; 
    public float width; 
    public float perimeter; 
    public float area; 

    public Rectangle(float length, float width){ 

     if(length < 0.0 || length >= 20.0){ 
      throw new IllegalArgumentException("Length must be between 0.0 and 20.0"); 
     } 
     if(width < 0.0 || width >= 20.0){ 
      throw new IllegalArgumentException("Width must be between 0.0 abnd 20.00"); 
     } 

     this.length = length; 
     this.width = width; 
    } 


    public float getLength(){ 
     return length; 
    } 

    public float getWidth(){ 
     return width; 
    } 

    public void setPerimeter(float perimeter){ 
     perimeter = ((getLength() *2) + (getWidth()*2)); 
    } 

    public float getPerimeter(){ 
     return perimeter; 
    } 

    public void setArea(float area){ 
     area = getLength() * getWidth(); 
    } 

    public float area(){ 
     return area; 
    } 

} 

Вот тестовый класс или привод Класс:

package rectangle; 

public class TestRectangle { 

     public static void main(String[] args){ 
       Rectangle rectangle1 = new Rectangle (3.2, 3.3); 

       System.out.printf("The perimeter of rectangle1 is: %d%n", rectangle1.getPerimeter());  

     } 

} 

Как я бегу класс Test (в IDE) это предупреждение показывает :

«Несовместимые типы: возможное преобразование с потерями из double to float».

Я не понимаю, почему IDE подходит к этому предупреждению. Может ли кто-нибудь помочь?

+0

Литералы с плавающей запятой в Java являются 'double', но ваш конструктор' Rectangle' принимает 'float'. Просто измените тип данных параметров в своем конструкторе на 'double', чтобы устранить возможные ошибки позже. – jdphenix

+1

Что происходит с аксессуарами для публичных экземпляров vars? Сделайте их частными! И что такое 'public float rectangle'? –

ответ

4

В Java, буквальное значение 1,0 или любое другое нормальное десятичное значение считается двойным (64-битным значением с плавающей точкой). В качестве входных данных ваш конструктор принимает поплавки (32-битные значения с плавающей запятой). Вы пытаетесь передать 64-разрядные номера функции, которая принимает 32-битные номера. Java никогда не позволит вам делать что-либо, что может потерять точность (например, перенос float в метод int или двойной метод float). Лучший способ обойти это сказать

Rectangle rectangle1 = new Rectangle (3.2f, 3.3f); 

Добавление п говорит Java, что в буквальном смысле является 32-бит с плавающей точкой, а не 64-битный двойной. Вы также можете добавить литье:

Rectangle rectangle1 = new Rectangle ((float) 3.2, (float) 3.3); 

но с использованием обозначения f очень предпочтительнее.

1

Вы создаете дубликаты этой строки.

Rectangle rectangle1 = new Rectangle (3.2, 3.3); 

Чтобы сделать поплавки, вам нужно сделать, это:

Rectangle rectangle1 = new Rectangle (3.2f, 3.3f); 
Смежные вопросы