2015-05-14 2 views
5

В Python я могу определить две переменные с массивом в одной строке.Как определить несколько переменных в одном выражении

>>>[a,b] = [1,2] 
>>>a 
1 
>>>b 
2 

Как сделать то же самое в Java?

У меня есть пара переменных в классе PCT, тип которых является окончательным. Есть ли способ определить их в одной строке в стиле Python? Следующий формат явно не работает на Java. Я мог бы определить их отдельно, но он будет дважды ссылаться на метод parseFile, которого я хочу избежать.

public class PCT { 
    final int start; 
    final int stop; 
    public PCT (File file) { 
     //...... 
     //...... 
     // the following statement does not compile 
     [start, stop] = parseFile(file); 
    } 
    public int[] parseFile(File f) { 
     int[] aa = new int[2]; 
     // .... 
     // .... 
     return aa; 
    } 
} 
+0

Просто любопытен, почему вы хотели бы это? С единственной целью - уменьшить 2 строки до 1? – noMAD

+1

@noMAD: Это довольно удобная функция в мире Python/Octave/Matlab/... для передачи/установки нескольких параметров в одном выражении. Что-то, чего не хватает в C/C++/Java. –

ответ

4

Это не возможно, но вы также не нужно вызывать parseFile дважды.

Написать свой код так:

int [] temp = parseFile(file); 
start = temp[0]; 
stop = temp[1]; 

Python (я считаю) поддерживает несколько возвращаемых значений. Java подчиняется соглашениям C, и поэтому не позволяет этого. Так как это не является частью языка, синтаксис для него тоже не означает, что для получения нескольких возвратов необходимы незначительные грубые хаки, такие как массив temp.

+1

это работает! спасибо – Nasreddin

+0

Рад помочь! Пожалуйста, отметьте это как ответ, если у вас нет каких-либо затяжных вопросов. –

2

Если вы имеете в виду литерал line; до тех пор, как вы поместите точку с запятой между двумя заявлениями, они выполняются, как если есть новая линия между так что вы можете позвонить:

a = 1; b = 2; 

Вы даже можете сжать весь файл в Oneliner, удалив комментарий (это область действия до конца строки). Интервал (пробел, табуляция, новая строка, ...) обычно удаляется из файлов Java (в памяти) в качестве первого шага в компиляторе Java.

Но вас, вероятно, больше интересует оператор singe. Sytax как [start, stop] = parseFile(file); не поддерживается (по крайней мере, пока не сейчас). Вы можете сделать Onliner:

int[] data = parseFile(file); start = data[0]; stop = data[1]; 
0

Может быть, это то, что вы ищете:

int array[] = {1,2}; 

Java array assignment (multiple values)

Если вы хотите, чтобы явно присвоить каждому элементу, я не» Думаю, вы можете сделать это в рамках одного задания, как аналогичное понятие с примером 2-го примера ниже. Кажется, что вы хотите, как указано в ответах Джереми.

Explicitly assigning values to a 2D Array?

0

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

int a = 1, b = 2, c = 3; //etc. 
4

Вы можете определить несколько переменных, как это:

double a,b,c; 

Каждая переменная в одном также может быть присвоена также конкретная величина:

double a=3, b=5.2, c=3.5/3.5; 

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

int a = 4, b = a+1, c=b*b; 

Замечено, вы также можете практиковать арифметические операции переменная, оставаясь в одной строке.

0

Может

public class PCT 
{ 
    final Point pos; // two ints! 

    public PCT (File file) 
    { 
     pos = parseFile(file); 
    } 

    public int[] parseFile(File f) 
    { 
     Point aa = new Point(); 
     // .... 
     // .... 
     return aa; 
    } 
} 
Смежные вопросы