Ошибка Java: не удается найти символ? - PullRequest
0 голосов
/ 29 мая 2009

У меня есть следующий фрагмент кода, где некоторые строки инициализируются в блоке 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 ]

5 голосов
/ 29 мая 2009

Вам нужно сначала объявить переменную, а затем просто назначить ее. Вот версия для 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" в качестве префикса. (Что это значит?)

3 голосов
/ 29 мая 2009

Вам необходимо объявить tserialmask и tserialincrement вне блоков if / else. В противном случае они выходят за рамки, когда этот блок заканчивается.

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 голосов
/ 29 мая 2009

Вам необходимо объявить переменные tserialmask и tserialincrement вне ветвей if и , а не пытаться переопределить их внутри, например:

String tserialmask;
if (serialmask == "1") {  
    tserialmask = "aaa########"; 
} else { 
    tserialmask = ""; 
} 
0 голосов
/ 29 мая 2009

Вы объявляете строковые переменные в операторах if else, а затем пытаетесь получить к ним доступ вне операторов. Вам необходимо объявить переменные перед вашими операторами if, а затем назначать их только внутри операторов if / else.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...