将值应用于对象时出错

时间:2013-07-05 08:12:17

标签: java constructor

我需要一些关于这个java代码的帮助,我似乎陷入了对象vara var = new vara(“banan”,“12.5”,“5”)。我想,因为我在类vara中创建了一个带有三个参数String,double和int的构造函数,可以在测试类中调用它们并得到我想要的结果但是我得到一个错误,说明类vara中的构造函数vara不能适用于给定的类型。它说它需要一个字符串,一个double和一个int。但我提供了这些,那么问题是什么?感谢任何帮助,我现在坚持了4天,我只是看不到隧道中的任何光线。

import java.lang.String;

public class Vara {              

//Deklarerar variabler 

private String name; 
private double price; 
private int antal;

//tildela konstruktorer för de deklarerade variablerna 
public Vara (String name, int antal, double price) { 
this.name = name;
this.antal = antal;
this.price = price; 
} // slut constructor

 public void setName(String name)  {  
 this.name = name; } 

public void  setPrice (double price) { 
this.price = price; } 

public void setAntal (int antal)  {  
this.antal = antal;  }

public String getName() {    
return this.name;} 

public double getPrice() {   
return this.price; } 

public int getAntal() {    
return this.antal; }     
}

//testklassen ska stå som en egen klass
class Test {    
    public void main(String[] args){ 
    }   
Vara var = new Vara("Banan","12.5","5") {

        @Override
    public void setName(String name) {
var.setName("Banan");
    }  
        @Override
public void setPrice (double price) {
var.setPrice("12.5");  
}
        @Override
public void setAntal (int antal) {
var.setAntal("5");


System.out.println("Namnet är " +var.getName() +" priset är " +var.getPrice() +" och antalet är "+var.getAntal() );// här slutar system.out

}// slut main  
}

// slut Test klass

4 个答案:

答案 0 :(得分:2)

您正在使用错误的参数调用构造函数:

Vara var = new Vara("Banan","12.5","5")

不是您的构造函数所期望的:

public Vara (String name, int antal, double price)

当您希望按指定顺序{/ 1}},StringString 时,您将三个int字面值传递给构造函数。 double中包含的任何内容都是""字面值。

替换为:

String
  

“巴南”--->它是一个字符串文字。

     

12.5 --->默认为double,12.5f为float。

     

5 ---> int默认情况下,5l很长。

在调用setter方法时,你需要做同样的事情。

答案 1 :(得分:1)

从构造函数的最后两个参数中删除双引号:

Vara var = new Vara("Banan",5,12.5);

原因:如果用双引号括起来,那么它被Java视为String而不是double或int。并且由于您的构造函数不接受三个String参数,因此会出错。

同样是您在var对象上调用的setter方法的问题。

setAntal(int antal)需要int参数,但您正在传递String。因此,在调用setter方法的同时删除双引号。

var.setAntal(5);
var.setPrice(12.5);

此外,当您将树参数发送给构造函数时,您无需再次调用setter方法来设置相同的值。

正在运行代码:

public class Vara {              

    //Deklarerar variabler 

    private String name; 
    private double price; 
    private int antal;

    //tildela konstruktorer för de deklarerade variablerna 
    public Vara (String name, int antal, double price) { 
        this.name = name;
        this.antal = antal;
        this.price = price; 
    } // slut constructor

    public void setName(String name)  {  
        this.name = name; } 

    public void  setPrice (double price) { 
        this.price = price; } 

    public void setAntal (int antal)  {  
        this.antal = antal;  }

    public String getName() {    
        return this.name;} 

    public double getPrice() {   
        return this.price; } 

    public int getAntal() {    
        return this.antal; }     
}

//testklassen ska stå som en egen klass
class Test {    
    public static void main(String[] args){ 
        Vara var = new Vara("Banan",5, 12.5);
        System.out.println("Namnet är " +var.getName() +" priset är " +var.getPrice() +" och antalet är "+var.getAntal() );// här slutar system.out

    }
}   

指出一些错误:

  • 您的main方法必须静态
  • main方法一启动就结束,代码必须在main方法中。

其他人将我的代码与您的代码进行比较。我建议你看一些基本的java教程。

答案 2 :(得分:1)

请注意,您使用3个String参数调用构造函数:

Vara var = new Vara("banan", "12.5", "5");

由于您只定义了一个带Stringintdouble的构造函数,因此必须删除引号:

Vara var = new Vara("banan", 12.5, 5);

这也不起作用,因为您现在向double参数提供int,反之亦然。因此,您必须将构造函数更改为

public Vara (String name, double price, int antal)

或将您的电话改为

Vara var = new Vara("banan", 5, 12.5);

答案 3 :(得分:0)

当你将类的构造函数声明为public Vara (String name, int antal, double price)时,所以你应该调用create这个类的对象如下

Vara var = new Vara("Banan",5,12.5);