2011-09-19 5 views
5

Je reçois une erreur en Java lors de la compilation:Java erreur: "types incompatibles" message

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

Voici le code 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 

    } 
} 

Quelle est la raison de cette erreur et comment est-ce que je le répare? Pourquoi ne fait-il pas automatiquement la promotion de l'int à une chaîne?

+2

En lisant votre message d'erreur, il semble qu'il recherchait une chaîne mais a trouvé un int. hmm ... Je me demande s'il existe une fonction qui convertit un entier en chaîne. – arunkumar

+0

Pour placer un entier dans une chaîne, vous avez deux choix: 1. 'Integer.toString (yourint)'. et 2. Ajoutez une chaîne vide à votre entier comme ceci 'String mystring =" "+ 25'. Si vous ne le faites pas, le compilateur vous indiquera que vous avez fait une erreur. À juste titre, vous mettez quelque chose où cela n'appartient pas. –

Répondre

5

Sur la ligne password, vous ajoutez Entiers (Si vous voulez être les concaténer) et de le mettre dans une chaîne sans cast.You'll explicite devez utiliser Integer.toString()

donc comme celui-ci

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

la raison pour laquelle il travaille en username est parce que vous avez ajouté des chaînes en nombres entiers dans la vente d'une chaîne, donc, il est implicitement transtyper une chaîne quand concatinating.

+3

I Suspecter que l'OP tente de concaténer plusieurs entiers comme des chaînes, plutôt que de les ajouter ensemble, puis de convertir la somme en une seule chaîne. Donc il devrait envelopper chaque 'generator.nextInt (X)' dans 'Integer.toString' plutôt que la somme de tous. –

+0

Oui. Je suis d'accord que son but est la concaténation, mais dans son état actuel, c'est en les ajoutant. La solution est Integer.toString() pour ajouter un "" "+" avant le tout. – Nicholas

+0

Merci beaucoup !!! Vous avez tous les deux sauvé ma vie pour ce projet – user951901

1

solution facile est d'ajouter "" d'abord, par exemple:

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

Une meilleure façon est utiliser 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

Regardez le type de retour de generator.nextInt() il retourne un int mais vous essayez de l'affecter à un String c'est ce qu'il dit: incompatible type vous ne pouvez pas attribuer un int à une chaîne.

Questions connexes