处理编译错误“非法启动表达”

时间:2014-08-01 12:29:43

标签: java

 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:错误:非法开始表达 private String decode(char c){ ^

PhoneNumber.java:46:错误:';'预期 private String decode(char c){                      ^

PhoneNumber.java:46:错误:';'预期 private String decode(char c){                             ^

PhoneNumber.java:60:错误:非法开始表达 public boolean equals(PhoneNumber pn){ ^

PhoneNumber.java:60:错误:';'预期 public boolean equals(PhoneNumber pn){                      ^

PhoneNumber.java:60:错误:';'预期 public boolean equals(PhoneNumber pn){                                     ^

PhoneNumber.java:63:错误:非法开始表达 public String toString(){ ^

PhoneNumber.java:63:错误:';'预期 public String toString(){                       ^

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

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

我从大约30个错误中得到了它,但我不确定如何解决“非法启动表达”错误。如果你看到代码有什么问题,一般可以随意指出。 感谢

2 个答案:

答案 0 :(得分: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()方法。毕竟,我认为你的代码应该编译。

附录:请详细格式化您的代码。它很难读懂。作为一个积极的副作用,你会发现问题,这会引起你提到的错误。

答案 1 :(得分:0)

您的代码有多个问题,如错误消息所示。以下是其中一些没有特别的顺序:

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都有一个可能对您有帮助的自动代码格式化工具。