识别Java中的语法错误

时间:2010-10-20 21:36:01

标签: java arrays syntax-error

在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()方法吗?

7 个答案:

答案 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"};

以初始化数组。