2009-05-29 8 views
0

Je l'extrait de code de code suivant où certaines chaînes sont initialisés dans le bloc if:Erreur Java: impossible de trouver le symbole?

String serialmask = request.getParameter("serialmask"); 
String serialincrement = request.getParameter("serialincrement"); 
if (serialmask == "1") { 
    String tserialmask = "aaa########"; 
} 
else { 
    String tserialmask = ""; 
} 
if (serialincrement == "1") { 
    String tserialincrement = "aaa^^^^^^^^"; 
} 
else { 
    String tserialincrement = ""; 
} 
out.println(
    itemimport( 
    partnumber, 
    itemcost, 
    itemlistprice, 
    itemdescription, 
    PurchProdLineKey, 
    UnitMeasKey, 
    itemclasskey, 
    trackmethod, 
    tserialmask, 
    tserialincrement 
) 
); 

L'erreur que je reçois est "cannot find symbol" symbol : variable tserialmask dans la déclaration out.println(itemimport(....tserialmask,tserialincrement));.

J'ai essayé de déclarer les variables en dehors du bloc if et cela semble entraîner encore plus d'erreurs en disant qu'il a déjà été déclaré.

+0

S'il vous plaît donner le code correctement formaté. C'est illisible. –

Répondre

5

Vous devez d'abord déclarer la variable, puis l'affecter. Voici la version pour tserialincrement (le même est vrai pour tserialmask)

String tserialincrement; 
if (serialincrement == "1") 
{ 
    tserialincrement = "aaa^^^^^^^^"; 
} 
else 
{ 
    tserialincrement = ""; 
} 

Cependant, il y a deux choses: le problème avec ce

  • Vous utilisez == sur une chaîne, ce qui est une mauvaise idée dans presque toutes les situations; utiliser equals
  • Vous pouvez le faire dans une instruction (par variable) avec l'opérateur conditionnel:

    String tserialmask = "1".equals(serialmask) ? "aaa########" : ""; 
    String tserialincrement = "1".equals(serialincrement) ? "aaa^^^^^^^^" : ""; 
    

En outre, je vous suggère des noms plus agréables variables, en utilisant boîtier Pascal (par exemple serialMask) et quelque chose de plus utile que juste "t" comme préfixe. (Qu'est-ce que cela signifie?)

0

Vous déclarez des variables String dans les instructions if else, puis essayez d'y accéder en dehors des instructions. Vous devez déclarer les variables avant vos instructions if et ne les affecter que dans les instructions if/else.

3

Vous devez déclarer tserialmask et tserialincrement en dehors des blocs if/else. Sinon, ils sortent de la portée lorsque ce bloc se termine.

String serialmask = request.getParameter("serialmask"); 
String serialincrement = request.getParameter("serialincrement"); 
String tserialmask; 
String tserialincrement; 

if (serialmask == "1") 
{ 
    tserialmask = "aaa########"; 
} 
else 
{ 
    tserialmask = ""; 
} 
if (serialincrement == "1") 
{ 
    tserialincrement = "aaa^^^^^^^^"; 
} 
else 
{ 
    tserialincrement = ""; 
} 
out.println(itemimport(partnumber,itemcost,itemlistprice,itemdescription,PurchProdLineKey,UnitMeasKey,itemclasskey,trackmethod,tserialmask,tserialincrement)); 
0

Vous devez déclarer les variables tserialmask et tserialincrement en dehors du cas des branches et essayer de ne pas les redéclarer à l'intérieur, comme celui-ci:

String tserialmask; 
if (serialmask == "1") { 
    tserialmask = "aaa########"; 
} else { 
    tserialmask = ""; 
} 
Questions connexes