Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串和数组的混合语法和非常罕见的用法_Java_Arrays_String - Fatal编程技术网

Java 字符串和数组的混合语法和非常罕见的用法

Java 字符串和数组的混合语法和非常罕见的用法,java,arrays,string,Java,Arrays,String,我发现字符串和数组(语法)混合在一起非常有趣但却非常奇怪。见以下代码: 示例A: int x = (int)(Math.random()*4 ); String n = new String[] {"FF", "RR"}[x]; System.out.println(n) ; 当随机数为0或1时,输出“FF”或“RR”。我的问题是如何做到这一点。我无法理解示例A中使用的语法。我使用了非常普通的字符串数组语法,如下所示: String s[] ; s = new String[]{"dd",

我发现字符串和数组(语法)混合在一起非常有趣但却非常奇怪。见以下代码:

示例A:

int x = (int)(Math.random()*4 );
String n = new String[] {"FF", "RR"}[x];

System.out.println(n) ;
当随机数为0或1时,输出“FF”或“RR”。我的问题是如何做到这一点。我无法理解示例A中使用的语法。我使用了非常普通的字符串数组语法,如下所示:

String s[] ;
s = new String[]{"dd", "rr"};

String s [] =  {"gg", "ss"};

但是我还没有看到顶级语法(示例A)。有人能帮我理解顶级语法是如何处理和执行的吗。提前谢谢。

它与您的第二个符号基本相同

第二行相当于

String s[]= new String[]{"FF","RR"};
String n = s[x];

只是在这个例子中,
s
是匿名的。

它基本上与第二个符号相同

String n = new String[] {"FF", "RR"}[x];
           ^^^^^^^^^^^^^^^^^^^^^^^^^
第二行相当于

String s[]= new String[]{"FF","RR"};
String n = s[x];
只是在这个例子中,
s
是匿名的

String n = new String[] {"FF", "RR"}[x];
           ^^^^^^^^^^^^^^^^^^^^^^^^^
这将创建一个包含两个元素的匿名数组,
“FF”
“RR”
。匿名数组是一个没有名称的临时对象,在语句执行完毕后立即销毁。然后使用
[]
运算符对该匿名数组编制索引

String n = new String[] {"FF", "RR"}[x];
                                    ^^^
这将返回匿名数组的第x个元素

请注意,此程序中似乎存在错误;如果随机数导致
x
大于1,您将获得
ArrayIndexOutOfBoundsException

这将创建一个包含两个元素的匿名数组,
“FF”
“RR”
。匿名数组是一个没有名称的临时对象,在语句执行完毕后立即销毁。然后使用
[]
运算符对该匿名数组编制索引

String n = new String[] {"FF", "RR"}[x];
                                    ^^^
这将返回匿名数组的第x个元素


请注意,此程序中似乎存在错误;如果随机数导致
x
大于1,您将获得
ArrayIndexOutOfBoundsException

如下所示:当您通常访问字符串数组中的元素时,您会做什么

String s = arr[0];
获取数组中的第一个元素。现在您正在这样做:

String n = new String[] {"FF", "RR"}[x];

您只需在创建时立即从数组中获取一个元素。或者,
xth
元素。请注意,如果随机数超出数组的边界,则程序将失败。

这是这样的:当您正常访问字符串数组中的元素时,您会怎么做

String s = arr[0];
获取数组中的第一个元素。现在您正在这样做:

String n = new String[] {"FF", "RR"}[x];
您只需在创建时立即从数组中获取一个元素。或者,
xth
元素。请注意,如果随机数超出数组的边界,则程序将失败。

新字符串[]{“FF”,“RR”}
是“字符串数组”类型的表达式。这就是为什么您可以在中将其分配给
s

String[] s = new String[] {"FF", "RR"};
由于它是“字符串数组”类型,因此可以在其上使用
[]
运算符来获取给定索引处的字符串。您必须在括号内加一个
int
。而
x
是一个
int

因此
newstring[]{“FF”,“RR”}[x]
是数组
newstring[]{“FF”,“RR”}
的索引
x
处的元素。此元素的类型为String。因此,您可以将其分配给变量
n
,该变量也声明为字符串

这基本上和做同样的事情

char c = "hello".charAt(2);

新字符串[]{“FF”,“RR”}
是“字符串数组”类型的表达式。这就是为什么您可以在中将其分配给
s

String[] s = new String[] {"FF", "RR"};
由于它是“字符串数组”类型,因此可以在其上使用
[]
运算符来获取给定索引处的字符串。您必须在括号内加一个
int
。而
x
是一个
int

因此
newstring[]{“FF”,“RR”}[x]
是数组
newstring[]{“FF”,“RR”}
的索引
x
处的元素。此元素的类型为String。因此,您可以将其分配给变量
n
,该变量也声明为字符串

这基本上和做同样的事情

char c = "hello".charAt(2);


详细说明您的上一条语句,
x
可以接受[0,3]中的任何值,2和3都将生成一个异常。简单而好的解释。我同意,如果随机数大于1,它将抛出“ArrayIndexOutofBoundException”。详细说明您的上一条语句,
x
可以接受[0,3]中的任何值,2和3都将生成异常。简单而好的解释。我同意,如果随机数大于1,则抛出“ArayIdxOutOfBangExtExpPoint”。通常,代码>随机。NeXint(int n)< /C>通常被认为是生成一个随机整数的更好方法(至少,我认为它是这样的)。(嗯,至少我认为是这样的。)