【问题标题】:Java error: can't find symbol?Java 错误:找不到符号?
【发布时间】:2009-05-29 13:51:09
【问题描述】:

我有以下代码 sn-p 其中一些字符串在 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
  )
);

我得到的错误是out.println(itemimport(....tserialmask,tserialincrement)); 语句中的"cannot find symbol" symbol : variable tserialmask

我尝试在 if 块之外声明变量,这似乎会导致更多错误,表明它已经被声明。

【问题讨论】:

  • 请给出格式正确的代码。那是不可读的。

标签: java string


【解决方案1】:

您需要先声明变量,然后再分配它。这是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”作为前缀更有用的东西。 (这是什么意思?)

【讨论】:

    【解决方案2】:

    您需要在 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));
    

    【讨论】:

      【解决方案3】:

      您在 if else 语句中声明字符串变量,然后尝试在语句之外访问它们。您需要在 if 语句之前声明变量,然后只在 if/else 语句中分配它们。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2013-05-20
          • 2013-12-06
          • 2016-07-22
          • 2013-11-22
          • 1970-01-01
          • 1970-01-01
          • 2013-11-08
          • 2015-02-22
          相关资源
          最近更新 更多