Ошибка Java: сообщение «несовместимые типы» - PullRequest
6 голосов
/ 19 сентября 2011

Я получаю ошибку в 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 автоматически в строку?

Ответы [ 4 ]

5 голосов
/ 19 сентября 2011

В строке 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, заключается в том, что у вас есть строки, добавляемые к целым числам, помещаемым в строку, поэтому он неявно преобразуется в строку при объединении.

2 голосов
/ 19 сентября 2011

Лучший способ - это для использования 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();
1 голос
/ 19 сентября 2011

Простое исправление - сначала добавить "", например ::1001*

password = "" + generator.nextInt(10) ...
0 голосов
/ 19 сентября 2011

Посмотрите на тип возврата generator.nextInt(), он возвращает int, но вы пытаетесь присвоить его String, вот что он говорит: несовместимый тип вы не можете назначитьInt в строку.

...