Назначьте значение переменной внутри оператора if [duplicate]

    

На этот вопрос уже есть ответ здесь:

    

Мне было интересно, можно ли присвоить переменной значение внутри условного оператора, например, так:

if((int v = someMethod()) != 0) return v;

Есть ли способ сделать это на Java? Потому что я знаю, что это возможно в условиях while, но я не уверен, что делаю это неправильно для оператора if или if это просто невозможно.

69 голосов | спросил Jose Salvatierra 22 PMpMon, 22 Apr 2013 17:40:11 +040040Monday 2013, 17:40:11

9 ответов


0

Переменные могут быть назначены, но не объявлены внутри условного оператора:

int v;
if((v = someMethod()) != 0) return true;
ответил Parth 22 PMpMon, 22 Apr 2013 17:42:53 +040042Monday 2013, 17:42:53
0

Вы можете назначить , но не объявить внутри if

Попробуйте это:

int v; // separate declaration
if((v = someMethod()) != 0) return true;
ответил Bohemian 22 PMpMon, 22 Apr 2013 17:47:16 +040047Monday 2013, 17:47:16
0

назначение возвращает левую часть назначения. так да. это возможно. однако вам нужно объявить переменную снаружи:

int v = 1;
if((v = someMethod()) != 0) {
    System.err.println(v);
}
ответил rmalchow 22 PMpMon, 22 Apr 2013 17:43:39 +040043Monday 2013, 17:43:39
0

Да, вы можете присвоить значение переменной внутри if.

Я бы не рекомендовал это. Проблема в том, что это похоже на общую ошибку, когда вы пытаетесь сравнить значения, но используете = вместо == или ===.

Будет лучше, если вы сделаете что-то подобное:

int v;
if((v = someMethod()) != 0) 
   return true;
ответил Achintya Jha 22 PMpMon, 22 Apr 2013 17:41:42 +040041Monday 2013, 17:41:42
0

Я считаю, что ваша проблема связана с тем, что вы определяете переменную v внутри теста. Как объясняет @rmalchow, это сработает, измените его на

int v;
if((v = someMethod()) != 0) return true;

Существует также другая проблема переменной области видимости. Даже если бы то, что вы пытались, сработало, какой смысл? Предполагая, что вы можете определить область действия переменной внутри теста, ваша переменная v не будет существовать вне этой области. Следовательно, создание переменной и присвоение значения будет бессмысленным, поскольку вы не сможете использовать ее.

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

ответил rlinden 22 PMpMon, 22 Apr 2013 17:52:19 +040052Monday 2013, 17:52:19
0

Да, это возможно. Рассмотрим код ниже:

public class Test  
{        
    public static void main (String[] args)       
    {       
        int v = 0;          
        if ((v=dostuff())!=0)            
        {          
            System.out.printf("HOWDY\n");          
        }             
    }                
    public static int dostuff()       
    {             
        //dosomething              
        return 1; 
    }       
}          

Надеюсь, это удовлетворит ваш вопрос.

ответил Karthik Rk 22 PMpMon, 22 Apr 2013 17:57:11 +040057Monday 2013, 17:57:11
0

Да, можно назначить внутри, если условная проверка. Но ваша переменная уже должна была быть объявлена ​​для присвоения чего-либо.

ответил IndoKnight 22 PMpMon, 22 Apr 2013 17:43:51 +040043Monday 2013, 17:43:51
0

Вы можете назначить переменную внутри оператора if, но сначала вы должны объявить ее

ответил user2256686 22 PMpMon, 22 Apr 2013 17:42:55 +040042Monday 2013, 17:42:55
0
  

Потому что я знаю, что это возможно в определенных условиях, но я не уверен, что   Я делаю это неправильно для оператора if или если это просто невозможно.

СОВЕТ: , какого типа и когда должно быть условие?

Если это можно сделать с помощью while, это можно сделать с помощью оператора if как weel, поскольку оба они ожидают логическое условие.

ответил PermGenError 22 PMpMon, 22 Apr 2013 17:43:18 +040043Monday 2013, 17:43:18

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132