【问题标题】:Dealing with compile error "illegal start of expression"处理编译错误“非法开始表达式”
【发布时间】:2014-08-01 12:29:43
【问题描述】:
 public class PhoneNumber {

 private int areacode;

 private int number;

 private int ext;

 //intitialize data field


PhoneNumber() {

int areacode=0;

int number=0;

int ext=0;
//if no arguements are given set all identifiers to 0

}







PhoneNumber(int number) {

int areacode=0;

int ext=0;
//if number arguement is given initialize it caller value and set ext and areacode to 0
}



PhoneNumber(int newarea,int newnumber,int newext) {


//initialize all identifiers to value passed by caller
 }


PhoneNumber(String newnumber) {
//implement if caller provides String value

String str[]=newnumber.split("-");
//split string at point when - symbol is seen

str[0]=newnumber.substring(0,4);
//set str[0] to first 3 charchters of String

str[1]=newnumber.substring(5,12);
//set str[1] to last 6 charchters of string

int areacode=Interger.parseInt(str[0]);
//convert str[0] to interger and set value equal to areacode

String tempstring;
// creat string called tempstring

for (int i=0;i<str[1].length;i++) {
//if i is less than length of str[1] continue loop

if (str[1].charAT(i).matches("1"||"2"||"3"||"4"||"5"||"6"||"7"||

"8"||"9"||"0"||'A'||'B'||'C'||'D'||'E'||'F'||'H'||

'I'||'J'||'K'||'L'||'M'||'N'||'O'||'P'||'Q'||'R'||'S'||

'T'||'U'||'V'||'W'||'X'||'Y'||'Z'))
//if charchter identified at a point on str[1] is either a capital letter or digit go into if    statement
  {if (str[1].charAT(i).matches("1"||"2"||"3"||"4"||"5"||"6"||"7"||

   "8"||"9"||"0"))
  //(nested if statement)check to see if character i is a digit
  {tempstring=tempstring.concat(str[1].charAT(i));}
  //if i is a digit append it to end of tempstring

  else {tempstring=tempstring+decode(str[1].charAT(i));
    //if not invoke decode method then append to tempstring

   }}

   else {Sytem.out.println("error restart program with new input");}

   int number=Interger.parseInt(tempstring);
   //if charchter is not a letter or digit show error message
     }















 //method converts from letter to number

 private String decode(char c) {

 switch (c){

 case 'A': case 'B': case'C': return"2";

 case 'D': case 'E': case 'F': return"3";

 case 'G': case 'H': case 'I': return"4";

 case 'J': case 'K': case 'L': return"5";

 case 'M': case 'N': case 'O': return"6";

 case 'P': case 'Q': case 'R':case 'S': return"7";

 case 'T': case 'U': case'V': return"8";

 case 'W': case 'X': case'Y': case'Z': return"9";
 // given a certain capitial letter converts to number


 default: return"";
 //default value returns empty string

 }

 }



 public boolean equals(PhoneNumber pn) {
 //reade another phone number passed by called

 return this.areacode==pn.areacode && this.number==pn.number && this.ext==pn.ext;
 //if phonenumber is identical to previous number show true if not show false
 }



 public String toString() {
 //convert number to string

 String number4=new String.valueOf(PhoneNumber pn);

 String newnumber[]=number4.split("-");


 }

 }

 }

错误: PhoneNumber.java:46:错误:表达式的非法开始 私有字符串解码(字符 c){ ^

PhoneNumber.java:46: 错误:';'预期的 私有字符串解码(字符 c){ ^

PhoneNumber.java:46: 错误:';'预期的 私有字符串解码(字符 c){ ^

PhoneNumber.java:60:错误:表达式的非法开始 公共布尔等于(电话号码 pn){ ^

PhoneNumber.java:60: 错误:';'预期的 公共布尔等于(电话号码 pn){ ^

PhoneNumber.java:60: 错误:';'预期的 公共布尔等于(电话号码 pn){ ^

PhoneNumber.java:63:错误:表达式的非法开始 公共字符串 toString() { ^

PhoneNumber.java:63: 错误:';'预期的 公共字符串 toString() { ^

PhoneNumber.java:64: 错误: ')' 预期 String number4=new String.valueOf(PhoneNumber pn); ^

PhoneNumber.java:64:错误:表达式的非法开始 String number4=new String.valueOf(PhoneNumber pn); ^

我从大约 30 个错误中得到了它,但我不确定如何解决“非法开始表达”错误。另外,如果您发现代码有任何问题,请随时指出。 谢谢

【问题讨论】:

  • 谈论花括号的问题
  • 请查看您的帖子,并问自己如果您想帮助某人,是否希望看到代码。如果你不愿意努力把问题问好,你为什么要指望别人努力回答呢?

标签: java


【解决方案1】:

这段代码有很多问题,但我会尝试为这些问题命名。 将其粘贴到 Eclipse 中后,所有错误都很容易看到。

首先,你的方法调用写错了:

         Error                            Correction

Lines 58, 89: Interger.parseInt(str[0]);  -->  Integer.parseInt(str[0]);

Line  64: str[1].length                   -->  str[1].length()

Lines 67, 75, 79, 82:
          charAT                          -->  charAt

Lines 67, 75:
          charAt(i).matches               -->  charAt(i) == '1' || charAt(i) == '2' || ... (not recommended)

注意:尝试以下操作:

char c = str[1].charAt(i);
boolean b = Character.isLetter(c) && Character.isUpperCase(c) || Character.isDigit(c);
if(b) { ... }

此外,没有带 char 的 String.concat():

Line 79: tempstring=tempstring.concat(str[1].charAt(i));  -->  tempstring += str[1].charAt(i)

Line 87: Sytem.out.println               -->  System.out.println

在第 91 行之后,缺少一个 },这在第 157 行中太多了。这就是您的 illegal start of expression 的来源。

您还应该重做toString() 方法。毕竟,我认为您的代码应该可以编译。

附录:请正确格式化您的代码。很难读。作为一个积极的副作用,您会看到导致您之前提到的错误的问题。

【讨论】:

    【解决方案2】:

    如错误消息所示,您的代码存在多个问题。以下是其中一些,不分先后:

    1) 构造函数 PhoneNumber(String newnumber) 没有用大括号 } 封闭,它应该放在行之后的某个地方

      //if charchter is not a letter or digit show error message
     }
    

    2) String 没有公共成员 length。而是使用方法length() 来获取字符串的长度。

    3) String 没有 charAT(int) 方法。而是拼写为charAt(int)

    4) charCharacter 都没有定义 matches(...) 方法。如果你想检查一个字符是数字还是数字,你可以使用组合

    Character.isDigit(char)
    Character.isLetter(char)
    Character.isLetterOrDigit(char)
    Character.isUpperCase(char)
    ...
    

    5) Interger 应拼写为Integer

    这里可能还有很多问题很难找到,因为您的代码甚至无法编译,但这应该可以帮助您入门。

    另外,我建议您正确格式化您的代码。这样就更容易找到丢失的括号和其他类似的小错误。您还可以使用 Eclipse、Netbeans 或 IntelliJ 等 IDE 来帮助您在编写代码时对其进行调试。所有这些 IDE 还具有自动代码格式化工具,可能会对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-12-02
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 2018-04-30
      相关资源
      最近更新 更多