【问题标题】:How to define multiple variables in single statement如何在单个语句中定义多个变量
【发布时间】:2015-07-26 17:11:12
【问题描述】:

在 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;
    }
}

【问题讨论】:

  • 只是好奇你为什么想要这个?仅仅为了将 2 行减少到 1 行?
  • @noMAD:在 Python/Octave/Matlab/... 世界中,在单个语句中传递/设置多个参数是一个非常方便的功能。 C/C++/Java 系列所缺乏的东西。

标签: java arrays


【解决方案1】:

你可以像这样定义多个变量:

double a,b,c;

一行中的每个变量也可以分配给特定的值:

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

另一个方面是,当您在同一行中准备公共类型变量时,您可以从右侧分配的变量分配左侧的变量,例如:

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

注意,您还可以通过保持在同一行来练习对变量的算术运算。

【讨论】:

    【解决方案2】:

    这是不可能的,但您也不需要调用两次parseFile

    这样写你的代码:

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

    Python(我相信)支持多个返回值。 Java 遵循 C 约定,因此不允许这样做。由于这不是语言的一部分,因此它的语法也不是,这意味着如果您要进行多次返回,则需要像 temp 数组这样的稍微粗暴的黑客攻击。

    【讨论】:

      【解决方案3】:

      当声明多个相同类型的变量时,可以这样做:

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

      【讨论】:

        【解决方案4】:

        如果你的字面意思是 line;只要您在两个语句之间放置一个分号,它们就会被执行,就好像它们之间有一个新行一样,因此您可以调用:

        a = 1; b = 2;
        

        您甚至可以通过删除注释(该范围到行尾)将整个文件压缩到一个单行中。作为 Java 编译器的第一步,通常会从 Java 文件(在内存中)中删除间距(空格、制表符、新行...)。

        但您可能对单语句更感兴趣。不支持像 [start, stop] = parseFile(file); 这样的语法(至少目前不支持)。你可以做一个在线人:

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

        【讨论】:

          【解决方案5】:

          也许这就是你要找的东西:

          int array[] = {1,2};
          

          Java array assignment (multiple values)

          如果您希望显式分配给每个元素,我认为您不能在一次分配中做到这一点,就像下面的二维示例的类似概念一样。正如杰里米的回答所指定的那样,这似乎是您想要的。

          Explicitly assigning values to a 2D Array?

          【讨论】:

            【解决方案6】:

            也许

            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;
                }
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-12-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-10-27
              相关资源
              最近更新 更多