2011-09-19 101 views
5

我在编译过程中得到一个错误在Java中:Java错误:“不兼容类型”消息

UserID.java:36: error: incompatible types 
      + generator.nextInt(10); 
      ^
    required: String 
    found: int 

下面是Java代码:

public class UserID { 

    private String firstName; 
    private String userId; 
    private String password; 

    public UserID(String first) { 
    Random generator = new Random(); 

    userId = first.substring(0, 3) + 
     + generator.nextInt(1) + 
     (generator.nextInt(7) + 3) + generator.nextInt(10);  //this works 

    password = generator.nextInt(10) + generator.nextInt(10); //Error is here 

    } 
} 

,这是什么错误,以及如何的原因我是否修复它?为什么不自动将int提升为String?

+2

读取您的错误消息,它看起来像是在寻找一个字符串,但发现了一个int。嗯......我想知道是否有任何将Integer转换为String的函数。 – arunkumar

+0

为了将整数放入字符串中,您有两个选择:1.'Integer.toString(yourint)'。和2.添加blankstring到你的整数像这个'字符串mystring =“”+ 25'。如果你不这样做,编译器会让你知道你犯了一个错误。正确的是,你正在把它不属于的地方。 –

回答

5

password行,您要添加整数(如果你想被串联它们),并把它转换成字符串没有明确cast.You'll已经使用Integer.toString()

所以这样

password = Integer.toString(generator.nextInt(10) + generator.nextInt(10) 
     + generator.nextInt(10) + generator.nextInt(10) 
     + generator.nextInt(10) + generator.nextInt(10)); 

它工作在username的原因是因为你必须添加字符串到整数放入字符串,所以concatinating当它隐含强制转换为字符串。

+3

我怀疑OP试图将多个整数连接为字符串,而不是将它们相加,然后将总和转换为单个字符串。所以他应该将'generator.nextInt(X)'放在'Integer.toString'中,而不是全部的总和。 –

+0

是的。我同意他的目标是连接,但在目前的状态下,它正在增加它们。解决方案是Integer.toString()来在整个事物之前添加一个'“”+“。 – Nicholas

+0

非常感谢你!你们两个都为这个项目拯救了我的生命 – user951901

1

简单的解决方法是增加 “” 第一,如:

password = "" + generator.nextInt(10) ... 
2

更好的办法使用StringBuilder

StringBuilder sb=new StringBuilder(); 
sb.append(first.substring(0, 3)); 
sb.append(last.substring(0, 3)); 
sb.append(generator.nextInt(1)); 
sb.append(generator.nextInt(7) + 3); 
sb.append(generator.nextInt(10)); 

userId=sb.toString(); 
0

看的generator.nextInt()返回类型,它返回一个int但您正在尝试将其分配给String这就是它所说的:不兼容的类型您无法将int分配给字符串。