Java构造函数:错误";“实际参数列表和正式参数列表长度不同”;
我一直在拼命地尝试让这段代码正常工作。这是我第一次使用对象/构造函数(我是一名新程序员),这让我很困惑。我会完全诚实;我不知道是什么问题。我已经尝试了很多东西,所以这个代码非常混乱。我也受够了,开始再次编写第二个代码,因为与第一个代码不一样的原因,尽管该代码的结构略有不同。我将发布这两次尝试,希望有人能看到我的错误。谢谢 尝试1:Java构造函数:错误";“实际参数列表和正式参数列表长度不同”;,java,oop,object,constructor,Java,Oop,Object,Constructor,我一直在拼命地尝试让这段代码正常工作。这是我第一次使用对象/构造函数(我是一名新程序员),这让我很困惑。我会完全诚实;我不知道是什么问题。我已经尝试了很多东西,所以这个代码非常混乱。我也受够了,开始再次编写第二个代码,因为与第一个代码不一样的原因,尽管该代码的结构略有不同。我将发布这两次尝试,希望有人能看到我的错误。谢谢 尝试1: class Circle { private static double r; public static double rd; public
class Circle
{
private static double r;
public static double rd;
public double Circle( double r, double rd )
{
r = rd;
return r;
}
public double calCircumference(double r)
{
return 2*Math.PI*r;
}
public static double calArea(double r)
{
return Math.PI*r*r;
}
}
class CircleApp
{
public static void main( String[] args )
{
double rd = Double.parseDouble( args[0] );
System.out.println( "Circle radius = " + rd );
// create an object of Circle with the radius rd
Circle circle1 = new Circle();
double cir = circle1.calCircumference();
double area = circle1.calArea();
System.out.println("Circumference = " + cir);
System.out.println("Area = " + area);
}
}
class Circle
{
public double rd = Double.parseDouble( args[0] );
private double r;
public void Circle( double rd )
{
double r = rd;
}
private double calCircumference(double r)
{
return 2*Math.PI*r;
}
public double calArea()
{
return Math.PI*r*r;
}
}
class CircleApp2
{
public static void main( String[] args )
{
System.out.println( "Circle radius = " + rd );
// create an object of Circle with the radius rd
Circle circle1 = new Circle( rd);
double cir = circle1.calCircumference();
double area = circle1.calArea();
System.out.println("Circumference = " + cir);
System.out.println("Area = " + area);
}
}
尝试2:
class Circle
{
private static double r;
public static double rd;
public double Circle( double r, double rd )
{
r = rd;
return r;
}
public double calCircumference(double r)
{
return 2*Math.PI*r;
}
public static double calArea(double r)
{
return Math.PI*r*r;
}
}
class CircleApp
{
public static void main( String[] args )
{
double rd = Double.parseDouble( args[0] );
System.out.println( "Circle radius = " + rd );
// create an object of Circle with the radius rd
Circle circle1 = new Circle();
double cir = circle1.calCircumference();
double area = circle1.calArea();
System.out.println("Circumference = " + cir);
System.out.println("Area = " + area);
}
}
class Circle
{
public double rd = Double.parseDouble( args[0] );
private double r;
public void Circle( double rd )
{
double r = rd;
}
private double calCircumference(double r)
{
return 2*Math.PI*r;
}
public double calArea()
{
return Math.PI*r*r;
}
}
class CircleApp2
{
public static void main( String[] args )
{
System.out.println( "Circle radius = " + rd );
// create an object of Circle with the radius rd
Circle circle1 = new Circle( rd);
double cir = circle1.calCircumference();
double area = circle1.calArea();
System.out.println("Circumference = " + cir);
System.out.println("Area = " + area);
}
}
任何帮助都将不胜感激。另外,因为我认为我的编码可能会让你们中的大多数人想把我的头扯下来,所以请不要批评其中的任何部分。我只是在这里开始学习过程,所以任何反馈/批评都会非常有用。再次感谢 构造函数不是
void
方法。这个
public void Circle( double rd )
应该是
public Circle( double rd ){
this.r = rd;
}
private double calCircumference()
那么下一个问题是
private double calCircumference(double r)
应该是
public Circle( double rd ){
this.r = rd;
}
private double calCircumference()
及
没有意义,这不在main
中。把所有的东西放在一起
class Circle {
private double r;
public Circle(double rd) {
this.r = rd;
}
public double calCircumference() {
return 2 * Math.PI * r;
}
public double calArea() {
return Math.PI * r * r;
}
}
然后
class CircleApp2 {
public static void main(String[] args) {
double rd = Double.parseDouble(args[0]);
System.out.println("Circle radius = " + rd);
// create an object of Circle with the radius rd
Circle circle1 = new Circle(rd);
double cir = circle1.calCircumference();
double area = circle1.calArea();
System.out.println("Circumference = " + cir);
System.out.println("Area = " + area);
}
}
这里有各种各样的问题 首先,在这两个版本中,您都声明了方法而不是构造函数。这是一个方法声明:
公共双圈(双r,双rd)
这是一个构造函数声明:
公众圈(双右,双右)
构造函数不指定返回类型
接下来,在您的第一次尝试中,有一条注释说您正在创建一个半径为rd
的圆,但实际上并没有传入rd
:
//创建半径为rd的圆对象
圆圈1=新圆圈();
那应该是
圆圈1=新圆圈(rd);
。。。但在尝试1中,在方法-that-should-be-a-constructor中也有两个参数,其中只需要1
在尝试2中,您试图使用CircleApp2
中的rd
变量,但它仅在圆圈中声明。。。该声明将不起作用,因为它试图使用args
,而args只存在于main
中
一个问题是,您在尝试构建之前编写了太多的代码。在无法创建实例的情况下,编写计算周长和面积的方法是没有意义的。从最少的代码开始,进行编译,然后添加到其中。以下是我对起点的建议:
//我通常赞同“设计继承还是禁止继承”,
//因此类被声明为final,但您可能不需要担心
//当你刚开始的时候太多了。
公开期末班
{
//我建议尽可能将字段设置为最终字段,并给出它们
//比“r”或“rd”更有意义的名称。(在
//一个圆的上下文,但“半径”更好。
私人最终双半径;
公共圈(双半径){
这个半径=半径;
}
}
公开期末班{
公共静态void main(字符串[]args){
double radius=double.parseDouble(args[0]);
圆=新圆(半径);
}
}
现在,要查看的代码要少得多-因此,如果您不理解某些内容,则可以更容易地确定它是什么。CalcircumReference(双r)
希望给出一个double
。这很奇怪,因为Circle
实例已经有一个半径字段。为什么不使用这个?