2011-09-19 35 views
5

Tôi nhận được một lỗi trong Java trong biên soạn:lỗi Java: "loại không tương thích" nhắn

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

Đây là mã 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 

    } 
} 

lý do cho lỗi này và làm thế nào là gì tôi có sửa nó không Tại sao nó không tự động thúc đẩy int vào một String?

+2

Đọc thông báo lỗi của bạn, có vẻ như nó đang tìm kiếm một Chuỗi nhưng tìm thấy một int. hmm ... Tôi tự hỏi nếu có bất kỳ chức năng nào chuyển đổi một số nguyên thành một chuỗi. – arunkumar

+0

Để đặt một số nguyên vào một chuỗi, bạn có hai lựa chọn: 1. 'Integer.toString (yourint)'. và 2. Thêm chuỗi trống vào số nguyên của bạn như thế này 'String mystring =" "+ 25'. Nếu không, trình biên dịch sẽ cho bạn biết rằng bạn đã mắc lỗi. Đúng như vậy, bạn đang đặt một cái gì đó mà nó không thuộc về. –

Trả lời

5

Trên dòng password, bạn đang thêm Số nguyên (Khi bạn muốn được concatenating chúng) và đưa nó vào một chuỗi mà không có một cast.You'll rõ ràng đã sử dụng Integer.toString()

Vì vậy, như thế này

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

lý do nó hoạt động trong username là bởi vì bạn có Strings được thêm vào số nguyên giao dịch thỏa thuận thành một string, vì vậy nó ngầm đúc nó vào một string khi concatinating.

+3

Tôi nghi ngờ OP đang cố gắng ghép nhiều int thành chuỗi, thay vì thêm chúng lại với nhau rồi chuyển đổi tổng thành một chuỗi. Vì vậy, ông nên được gói mỗi 'generator.nextInt (X)' trong 'Integer.toString' chứ không phải là tổng của tất cả chúng. –

+0

Có. Tôi đồng ý rằng mục tiêu của anh ta là concatination, nhưng trong trạng thái hiện tại nó đang thêm chúng. Giải pháp là Integer.toString() để thêm một '" "+' trước toàn bộ sự việc. – Nicholas

+0

Cảm ơn bạn rất nhiều !!! Cả hai bạn đã cứu mạng tôi cho dự án này – user951901

1

Dễ dàng sửa chữa là thêm "" đầu tiên, ví dụ:

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

Better cách sử dụng 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

Nhìn vào kiểu trả về của generator.nextInt() nó trả về một int nhưng bạn đang cố gắng gán nó cho một String đó là những gì nó nói: loại không tương thích bạn không thể gán một int cho một Chuỗi.

Các vấn đề liên quan