为什么我们不能在java构造函数中传递字符串

时间:2013-12-07 11:35:39

标签: java constructor copy-constructor

class td{    
    int roll;    
    float per;    
    String name;   

    td(int r,float p,String n){    
        roll=r;    
        name=n;    
        per=p;    
    }

    td(){       
        roll=0;    
        name="sachin";    
        per=0;    
    }

    void get(){    
        try{    
            DataInputStream x=new DataInputStream(System.in);    
            roll=Integer.parseInt(x.readLine());    
            per=Float.parseFloat(x.readLine());    
            name=x.readLine();    
        }    
        catch(Exception e){    
            System.out.println("the error is" +e);    
        }    
    }

    void disp(){    
        System.out.println(roll);    
        System.out.println(name);    
        System.out.println(per);    
    }

}



class std{    
    public static void main(String ar[]){
        td c1 = new  td();    
        td c2 = new  td(3,5.600,"ddd");    
        td c3 = new  td();

        c1.disp();    
        c2.disp();    
        c3.disp();    
    }

}

当我运行此代码时,我得到了这个:

C:\j2sdk1.4.0\bin\std.java:48: cannot resolve symbol   
   symbol  : constructor td  (int,double,java.lang.String)
   location: class td
   td c2 = new  td(3,5.600,"ddd");
        ^

   Note: C:\j2sdk1.4.0\bin\std.java uses or overrides a deprecated API.
   Note: Recompile with -deprecation for details.
   1 error

   Tool completed with exit code 1

3 个答案:

答案 0 :(得分:5)

5.600被视为double,而不是float

  

浮点字面值的类型为float,如果它以字母F结尾   或f;否则它的类型是双倍的,它可以选择以   字母D或d。

由于您没有附加f,因此它正在搜索您没有为您的班级提供的构造函数td(int r,double p,String n),因此会出错。

您需要通过将f附加到5.600来精确定义浮动参数。

I.e:

td c2 = new td(3,5.600f,"ddd");

答案 1 :(得分:4)

如果你检查错误,那不是因为String,而是因为Double

您需要调用构造函数,如下所示:

td c2 = new td(3,5.600F,"ddd");

因为默认情况下5.600被认为是Double,所以编译器会尝试搜索(int,double,java.lang.String)但它不存在,所以它会产生错误。

答案 2 :(得分:0)

td c2 = new td(3,5.600,“ddd”);

在td类中声明的变量与输入的数据不匹配 替换Double的浮动类型。