web-dev-qa-db-ja.com

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を文字列に自動的にプロモートしないのはなぜですか?

6
user951901

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で機能する理由は、文字列に入れられた整数に文字列が追加されているため、連結時に暗黙的に文字列にキャストされるためです。

5
Nicholas

より良い方法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();
2
adatapost

簡単な修正は、最初に「」を追加することです。例:

password = "" + generator.nextInt(10) ...
1
JRL

generator.nextInt()の戻り値の型を見てください。それはintを返しますが、それをStringに割り当てようとしています。互換性のない型文字列にintを割り当てることはできません。

0
OscarRyz