コンパイル中に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を文字列に自動的にプロモートしないのはなぜですか?
password
行で、整数を追加し(それらを連結する場合)、明示的なキャストなしで文字列に入れます。Integer.toString()を使用する必要があります。
だからこのように
password = Integer.toString(generator.nextInt(10) + generator.nextInt(10)
+ generator.nextInt(10) + generator.nextInt(10)
+ generator.nextInt(10) + generator.nextInt(10));
username
で機能する理由は、文字列に入れられた整数に文字列が追加されているため、連結時に暗黙的に文字列にキャストされるためです。
より良い方法isStringBuilder
を使用するには、
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();
簡単な修正は、最初に「」を追加することです。例:
password = "" + generator.nextInt(10) ...
generator.nextInt()
の戻り値の型を見てください。それはint
を返しますが、それをString
に割り当てようとしています。互換性のない型文字列にintを割り当てることはできません。