2012-06-16 3 views
1

Я разрабатываю небольшое приложение, изучая Android.Использование переменных между if/else в Android

Приложение в основном делает серию простых математических вычислений. Кнопка вызывает функцию, где выполняются вычисления. Все работало нормально, пока я не вставил конструкцию if/else.

Внутри этой конструкции, я использую переменные, созданные ранее, делая расчет и установить другие переменные с этим

if (TS>Ex) { 
    Double AE = 0.00; 
} else { 
    Double AE = (Ex-TS); 
}; 

Double TBTAT = (TS-Ex); 
Double Exx = 2864.17; 
if (TBTAT>Exx) { 
    Double TAT = (Exx*0.2); 
} else { 
    Double TAT = (TBTAT*0.2); 
}; 

У меня есть два из них если/другое конструкции.

Затем все собираются и отправляются в текст

IT_ResultTXT.setText(Double.toString(AE+TAT+TAF)); 

В нормальных условиях, АЕ, TAT, TAF оказываются «не может быть разрешен к переменной» в этой последней строке кода, но если Я объявляю их в начале функции, у меня есть ошибка дублированных переменных.

Я полагаю, это очень глупая базовая ошибка программирования Java, но я не могу найти решение этого.

+0

податливости это читать, это должно помочь: HTTP: // WWW. java-made-easy.com/variable-scope.html – kcoppock

+0

Если вы объявите переменную внутри скобки, установленной как {}, она будет видна только внутри этих скобок. – Flynn81

+0

Спасибо всем вам за ответы! -Позначает kcoppock по ссылке – David

ответ

8

Вы должны объявить в начале (или где-либо еще в области видимости), только один раз:

Double AE; 

if (TS > Ex) { 
    AE = 0.00; 
} else { 
    AE = (Ex - TS); 
}; 

Double TBTAT = (TS - Ex); 
Double Exx = 2864.17;  

Double TAT; 

if (TBTAT > Exx) { 
    TAT = (Exx * 0.2); 
} else { 
    TAT = (TBTAT * 0.2); 
}; 
+0

Спасибо Даршан, если мне это нравится, у меня есть ошибка «дублированной переменной AE» – David

+0

Не правда. Скопируйте вставьте код, и вы увидите, что вы его не получите. – Ixx

+0

Darshan и lxx вы правы, извините за это Я понимаю, что я декларировал через «double var = whatever» вместо «var = whatever», это точка? Итак, в этом случае, какую переменную я получу? Большое спасибо за ваши ответы! – David

0

Объем АЕ, ТАТ, TAF являются only within the if/else statement block, и not visible outside.

лучше, чтобы объявить его в качестве локального varible к способу, в котором эти, если/другое заявление присутствует или как класс переменных

входом в инстанс
As local varibles: 

    public void go() { 

    Double AE = 0.00; 
    Double TBTAT = (TS-Ex); 
    Double Exx = 2864.17; 

    if(condition){ 


     } 

    else{ 



     } 

} 


    As Class scope: 

      public class A { 

       Double AE = 0.00; 
       Double TBTAT = (TS-Ex); 
       Double Exx = 2864.17; 


      public void go(){ 


       if (condition){ 



       } 
       else{ 


       } 



       } 


     } 
+0

У меня на самом деле не было вашей точки Кумар Первый случай - тот, который у меня уже есть, второй, возможно, слишком продвинутый для меня. Должен ли я сделать класс для каждого расчета? Могу ли я выставить переменную значение из инструкции? – David

+0

Нет, это не так. I означает Scope.When вы объявляете переменную в классе, вы делаете ее видимой везде в каждом методе класса.И если его внутри области метода, то она видима в каждом try-catch, loop и т. Д. Внутри этого метода, теперь я хочу включить еще одну вещь. О внутренних классах. Когда вы объявляете локальный класс, это означает класс в пределах метод, тогда, если этот класс должен получить доступ к переменной в методе. Это должно быть объявлено final.well, если вы не получили пример внутреннего класса, оставьте его. Но я думаю, что у вас будет четкое представление о двух вышеуказанных примерах –

Смежные вопросы