在Java中给出这个代码:
int i,j;
String[] names;
names[0] = new String("mary");
names[1] = "John";
i = names.length;
j = names[0].length();
我需要找到错误。据我所知,第1,第2,第4和第5行是正确的,因为它们涉及简单的实例变量,向数组添加元素以及查找数组的长度。但是第3和第6行很奇怪。
您可以像第3行中的方式一样将字符串添加到数组中吗?如果数组中充满了字符串,你可以将其编入索引并对其使用length()方法吗?
答案 0 :(得分:7)
上述代码中没有语法错误:
它们涉及简单的实例变量
除非在方法之外将它们声明为类的一部分,否则它们不是实例变量。如果它们在方法中声明,则将它们称为 local 变量到它们声明的任何代码块的范围。
尝试向未初始化的数组添加任何内容,如
String[] names;
names[0] = new String("mary");
names[1] = "John";
仍然会导致编译时错误,但这不是由于语法不正确而是试图操纵未初始化的变量。你需要初始化它,所以例如正如其他人所说的那样,使用:
String[] names = new String[2];
如果数组中充满了字符串,你可以将其编入索引并对其使用length()方法吗?
当然,这条线完全合法:
j = names[0].length();
相当于(假设您修复了yada yada上面的未初始化数组错误):
String firstElement = names[0];
j = firstElement.length();
答案 1 :(得分:4)
names
变量尚未初始化为两个元素的数组。
String[] names;
应该是
String[] names = new String[2];
其余代码看起来不错。
一些小的评论:
new String("mary");
几乎在所有情况下都只相当于"mary"
您也可以像这样初始化names
- 数组
String[] names = { "mary", "John" };
创建数组后,大小是固定的。您不能“添加元素”到数组。您只能更新其中的值。 (对于可以增长的数组,我建议您查看ArrayList
。)
答案 2 :(得分:3)
没有语法错误。这是编译器错误,因为您的数组未初始化。
还有一点 - 在初始化数组时,请确保它的初始化大小可以保存您稍后尝试放入的数据。
现在很抱歉提出这个显而易见的问题,但是什么阻止了您尝试编译此代码并查看错误是什么?它们具有足够的描述性 - 日食编译器说:
本地变量名称可能尚未初始化
所以回答你的问题标题(假设它应该是“如何识别Java中的语法错误”):
让编译器去做。
答案 3 :(得分:2)
永远不会创建names数组。您需要将第2行:String[] names;
更改为String[] names = new String[2];
答案 4 :(得分:1)
永远不会初始化names
变量。尝试为其元素赋值将导致编译器错误。但严格来说,这不是语法错误。
答案 5 :(得分:0)
你会注意到每个人都说这不是语法错误。他们是对的。语法错误是一种错误,它破坏了编程语言的语法或形式。你在这里有一个SEMANTIC错误,代码意义上的错误。
将两者想象为英语,语法与语法和拼写有关,而语义则涉及实际意义。
答案 6 :(得分:0)
试试这个:
int i,j;
String[] names = new String[2];
names[0] = "Mary";
names[1] = "John";
i = names.length;
j = names[0].length();
你的代码无法工作的原因是因为在说String[] names;
你只是声明会有一个名字数组但是在Java中你需要明确说出你的数组将保留多少项或立即将值分配给数组......
String[] names = {"Mary", "John"};
以初始化数组。