0

我想在 Motor 类中创建一个构造函数(Motor),我想在 Contructor1 类中调用它,但是当我这样做时出现错误......我不知道为什么。我从这周开始学习java。

这是代码:

  class Motor{
        Motor(int type[]){
            int input;
            input=0;
            type = new int[4];
            for(int contor=0; contor<4; contor++){
                System.out.println("Ininsert the number of cylinders:");
                Scanner stdin = new Scanner(System.in);
                    input = stdin.nextInt();
                type[contor] = input;
                System.out.println("Motor with "+type[contor]+" cylinders.");
            }
        }
    }

    public class Contructor1 {
        public static void main(String[] args){
            Motor motor_type;
            for(int con=0; con<4; con++){
                motor_type = new Motor();
            }

            }

        }
4

4 回答 4

7

不清楚为什么你首先在构造函数中放置了一个参数 - 你没有使用它:

Motor(int type[]){
    int input;
    input=0;
    type = new int[4];

在最后一行中,您基本上是在覆盖传入的任何值。您为什么要这样做?

如果您确实想保留它,则需要创建一个数组以从调用者传入,例如

int[] types = new int[4];
// Populate the array here...
motor_type = new Motor(types);

不过,目前的代码看起来有点混乱 - 您实际上是打算让单个实例Motor具有多个值,还是真的对拥有多个实例感兴趣Motor

作为旁注,此语法:

int type[]

气馁。您应该将类​​型信息保存在一个地方:

int[] type

此外,奇怪的是您在 中没有字段Motor,而且您也从未使用您在调用代码中创建的值。

于 2012-10-12T13:09:49.557 回答
2

构造函数有一个 type 的参数int[],但你不传递任何东西作为参数。您需要创建一个数组,并将其作为参数传递:

int[] type = new int[4];
Motor m = new Motor(type);

请注意,这个构造函数参数根本没有用,因为您在构造函数中没有对它做任何事情。相反,你用一个新数组覆盖它。我会简单地删除数组参数。

于 2012-10-12T13:11:50.910 回答
1

您必须将 [] 作为参数传递给Motor构造函数。

喜欢

 new Motor (new int[] {0,1,2,3});

由于您在Motor类中定义了参数化构造函数,因此默认情况下它不会创建无参数构造函数,这就是为什么您在下面的行中出现错误的原因

 motor_type = new Motor();  // Error here , because no-arg constructor not defined. 
于 2012-10-12T13:10:30.040 回答
0

您可以尝试以下操作:

int intType[]={1,2,3}; //create some int array
Motor motor_type=new Motor(intType); //pass int array here
于 2012-10-12T13:09:52.273 回答