2011-09-17 10 views
5

Estamos aprendiendo cómo utilizar varias clases de Java ahora, y hay un proyecto preguntar sobre la creación de una clase Circle que contendrá una radius y una diameter, a continuación, hacer referencia a ella de una clase principal para encontrar el diámetro. Este código sigue recibiendo un error (mencionado en el título)de error de Java - "método válido declaración; tipo de retorno requerida"

public class Circle 
{ 
    public CircleR(double r) 
    { 
     radius = r; 
    } 
    public diameter() 
    { 
     double d = radius * 2; 
     return d; 
    } 
} 

Gracias por cualquier ayuda, -AJ

Actualización 1: Está bien, pero no debería tener que declarar la tercera línea public CircleR(double r) como un doble, ¿verdad? En el libro del que estoy aprendiendo, el ejemplo no hace eso.

public class Circle 

    { 
     //This part is called the constructor and lets us specify the radius of a 
     //particular circle. 
     public Circle(double r) 
     { 
     radius = r; 
     } 

     //This is a method. It performs some action (in this case it calculates the 
     //area of the circle and returns it. 
     public double area() //area method 
     { 
      double a = Math.PI * radius * radius; 
     return a; 
    } 

    public double circumference() //circumference method 
    { 
     double c = 2 * Math.PI * radius; 
    return c; 
    } 

     public double radius; //This is a State Variable…also called Instance 
     //Field and Data Member. It is available to code 
    // in ALL the methods in this class. 
    } 

Como se puede ver, el código public Circle(double r).... qué es tan diferente de lo que hice en la mía con public CircleR(double r)? Por alguna razón, no se da ningún error en el código del libro, sin embargo, el mío dice que hay un error allí.

+3

Javac suele ser bastante útil y los mensajes de error que devuelve son bastante claros. La próxima vez que tenga uno de estos tendrá un breve descanso y le llegará la respuesta :) – mbatchkarov

+2

'CircleR' no es un constructor para' Circle'. Los nombres * deben * coincidir. –

Respuesta

22

Como se puede ver, el Círculo pública código (doble r) .... ¿cómo es que diferente de lo que hice en la mía con Circler pública (doble r)? Para sea cual sea el motivo, no se proporciona ningún error en el código del libro; sin embargo, mina dice que hay un error allí.

Al definir constructores de una clase, deben tener el mismo nombre que su clase. lo tanto el siguiente código

public class Circle 
{ 
    //This part is called the constructor and lets us specify the radius of a 
    //particular circle. 
    public Circle(double r) 
    { 
    radius = r; 
    } 
.... 
} 

es correcta, mientras que su código

public class Circle 
{ 
    private double radius; 
    public CircleR(double r) 
    { 
     radius = r; 
    } 
    public diameter() 
    { 
     double d = radius * 2; 
     return d; 
    } 
} 

que está mal porque su constructor tiene nombre diferente de su clase. Usted podría seguir el mismo código del libro y cambiar su constructor de

public CircleR(double r) 

a

public Circle(double r) 

o (si realmente quería a nombre de su constructor como Circler) cambiar el nombre de la clase a Circler.

Así que su nueva clase debe ser

public class CircleR 
{ 
    private double radius; 
    public CircleR(double r) 
    { 
     radius = r; 
    } 
    public double diameter() 
    { 
     double d = radius * 2; 
     return d; 
    } 
} 

también agregué el tipo de retorno doble en su método como ha señalado Froyo y John B.

Consulte este article sobre constructores.

HTH.

+0

bien, pero ahora está resaltando el radio = r; porción y diciendo "no se puede encontrar el símbolo - clase variable". y gracias por el artículo, lo estoy leyendo ahora. –

+1

no importa, me di cuenta de que en la parte inferior, necesito decir doble radio público ;. ¿Cuál es la razón de esto, sin embargo? ¿Por qué afirmo que en la parte inferior en lugar de allí dentro del círculo público (doble r)? –

+0

Porque ... 'double r' es un parámetro para el constructor. 'double radius;', fuera de cualquier método, es un campo en la clase. Los parámetros se descartan cuando el método retorna. Los campos existen siempre que la instancia de clase. –

4

se le olvidó declarar doble como un tipo de retorno

public double diameter() 
{ 
    double d = radius * 2; 
    return d; 
} 
8

Cada método (que no sea un constructor) debe tener un tipo de retorno.

public double diameter(){... 
-1

Tuve un problema similar al agregar una clase al método principal. Resulta que no fue un problema, fui yo quien no revisó mi ortografía. Entonces, como novato, aprendí que la ortografía incorrecta puede ensuciar las cosas. Estos mensajes me ayudaron a "ver" mi error y todo está bien ahora.

Cuestiones relacionadas