Java错误:找不到符号?

时间:2009-05-29 13:51:09

标签: java string

我有以下代码段,其中一些字符串在if块中初始化:

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
  )
);

我收到的错误是"cannot find symbol" symbol : variable tserialmask声明中的out.println(itemimport(....tserialmask,tserialincrement));

我尝试在if块之外声明变量,这似乎会带来更多错误,说它已经被声明了。

4 个答案:

答案 0 :(得分:5)

您需要先声明变量,然后再分配它。这是tserialincrement的版本(对于tserialmask也是如此)

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

然而,这有两个问题:

  • 你在字符串上使用==,这在几乎所有情况下都是个坏主意;使用equals
  • 您可以使用条件运算符在一个语句(每个变量)中执行此操作:

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

此外,我建议使用更好的变量名称,使用Pascal大小写(例如serialMask)和更有用的东西,而不仅仅是“t”作为前缀。 (这是什么意思?)

答案 1 :(得分:3)

您需要在if / else块之外声明tserialmask和tserialincrement。否则,当该块结束时,它们将超出范围。

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));

答案 2 :(得分:0)

您在if else语句中声明String变量,然后尝试在语句之外访问它们。您需要在if语句之前声明变量,然后仅在if / else语句中指定它们。

答案 3 :(得分:0)

您需要在if分支之外声明变量tserialmask和tserialincrement,而不是尝试在内部重新声明它们,如下所示:

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