2011-09-19 15 views
5

estoy recibiendo un error en Java durante la compilación:de error de Java: "tipos incompatibles" mensaje

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

Aquí está el código de 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 

    } 
} 

¿Cuál es la razón de este error y cómo ¿Lo arreglo? ¿Por qué no promociona automáticamente el int a una cadena?

+2

Al leer su mensaje de error, parece que estaba buscando una Cadena pero encontró una int. hmm ... Me pregunto si hay alguna función que convierta un entero en una cadena. – arunkumar

+0

Para colocar un entero en una cadena, tiene dos opciones: 1. 'Integer.toString (yourint)'. y 2. Agregue una línea en blanco a su entero como este 'String mystring =" "+ 25'. Si no lo hace, el compilador le informará que ha cometido un error. Con razón, estás poniendo algo a lo que no pertenece. –

Respuesta

5

En la línea password, va a añadir enteros (Cuando se quiere ser la concatenación de ellas) y ponerlo en una cadena sin una explícita cast.You'll tiene que utilizar Integer.toString()

Así como esto

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

la razón funciona en username es porque tiene cadenas que se añade a los números enteros la opción de venta en una cadena, por lo que está implícita la fundición en una cadena cuando concatinating.

+3

I Sospecho que el OP está intentando concatenar múltiples entradas como cadenas, en lugar de agregarlas juntas y luego convertir la suma en una sola cadena. Así que debería envolver cada 'generator.nextInt (X)' en 'Integer.toString' en lugar de la suma de todos ellos. –

+0

Sí. Estoy de acuerdo en que su objetivo es la concatenación, pero en su estado actual los está agregando. La solución es Integer.toString() para agregar un '" "+' antes de todo. – Nicholas

+0

¡Muchas gracias! Ambas salvaste mi vida para este proyecto – user951901

1

solución fácil es añadir "" en primer lugar, por ejemplo:

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

mejor manera es utilizar 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

Mira el tipo de retorno de generator.nextInt() devuelve un int pero Está tratando de asignarlo a un String que es lo que dice: tipo incompatible no puede asignar un int a una Cadena.

Cuestiones relacionadas