错误信息:类接口或枚举预期,这是什么意思?

时间:2013-10-22 17:14:03

标签: java

你好,我收到错误信息:class interface或enum expected,这是什么意思?

我的代码:

/**
 * to write a simple java class Mobile that models a mobile phone.
 * 
 * @author (john) 
 * @version (22/10/13)
 */
public class Mobile

{
    // type of phone
private String phonetype;
    // size of screen in inches
private int screensize;
    // memory card capacity
private int memorycardcapacity;
    // name of present service provider
private String mobileServiceProvider;
    // type of contract with service provider
private int mobileTypeOfContract;
    // camera resolution in megapixels
private int cameraresolution;
    // the percentage of charge left on the phone
private int chargeUp;
    // wether the phone has GPS or not
private int switchedOnFor;
    // to simulate using phone for a period of time
private int charge;
    // checks the phones remaining charge
private String provider;
    // simulates changing the provider
private String GPS; 
    // instance variables - replace the example below with your own


    // The constructor method

public Mobile(String mobilephonetype, int mobilescreensize,
int mobilememorycardcapacity, String mobileServiceProvider, int mobileTypeOfContract, int mobilecameraresolution, String mobileGPS, int chargeUp,int switchedOnFor, String changeProvider,int getBalance) {


    /**
*recieves orders for mobiles at the given price.
    */
this(yourCostHere);


price= 1000;
balance= 0;
total= 0;
 }

 /**
*returns a field price.
    */
public int getPrice()
   {
return price;
    }

    /**
    *return the amount of change due for orders of mobiles. 
    */
public int getBalance()
   {
return balance;
    }                


        //this.serviceprovider = newserviceprovider;
        //this.typeofcontract = 12;
        //this.checkcharge = checkcharge;
        //this.changeProvider = giffgaff;

  //Mobile samsungPhone = new Mobile(
 //   "Samsung" // String mobilephonetype
//,   1024    // intmobilescreensize
//,   2      // intmobilememorycardcapacity
//,   8       // intmobilecameraresolution
//,   "GPS"    //String mobileGPS
//,   "verizon" // String newserviceprovider
//,    "100" // intchargeUp
//,    "25" // intswitchedOnFor
//,    "25" // intcheckCharge
//,     "giffgaff"// String changeProvider
//);


        //typeofcontract = 12;
        //checkcharge = checkcharge;

    }
    //Mutator for newserviceprovider
public void setmobileServiceProvider(String newmobileServiceProvider)
   {
mobileServiceProvider = newmobileServiceProvider;
   }
   //Mutator for contracttype
public void setmobileTypeOfContract(int newmobileTypeOfContract)
   {
mobileTypeOfContract = newmobileTypeOfContract;
   }
   //Mutator for chargeUp
public void setchargeUp(int chargeUp)
   {
chargeUp = chargeUp;
   }
   //Mutator to simulate using phone for a period of time
public void switchedOnFor(int switchedOnFor)
   {
switchedOnFor = switchedOnFor;
    }
   //Accessor for type of phone
public String getType()
   {
returnphonetype;
   }
   //Accessor for provider
public String getprovider()
   {
returnmobileServiceProvider;
   }
   //Accessor for contract type
public int getContractType()
   {
returnmobileTypeOfContract;
   }
    //Accessor for charge
public int getCharge()
   {
returnchargeUp;
   }
    //Accessor which checks the phones remaining charge
public int checkCharge()
   {
returncheckCharge;
   }
    // simulates changing the provider
public void changeProvider()
   {
provider = changeProvider
   }

public int getBalance()
   {
return balance;
   }
    // A method to display the state of the object to the screen
public void displayMobileDetails() {
System.out.println("phonetype: " + phonetype);
System.out.println("screensize: " + screensize);
System.out.println("memorycardcapacity: " + memorycardcapacity);
System.out.println("cameraresolution: " + cameraresolution);
System.out.println("GPS: " + GPS);
System.out.println("mobileServiceProvider: " + mobileServiceProvider);
System.out.println("mobileTypeOfContract: " + mobileTypeOfContract );
} 

      /**
 * The mymobile class implements an application that
 * simply displays "new Mobile!" to the standard output.
 */
public class mymobile {
public void main(String[] args) {
System.out.println("new Mobile!"); //Display the string.
    }
}
public static void buildPhones(){
Mobile Samsung = new Mobile("Samsung",3,4,"verizon",8,12,"GPS",100,25,"giffgaff");  
Mobile Blackberry = new Mobile("Samsung",3,4,"verizon",8,12,"GPS",100,25,"giffgaff");     
}    
public static void main(String[] args) {
buildPhones();
}  

}

任何答案或回复和帮助将不胜感激,因为我无法像之前那样进行编译而没有语法错误。

2 个答案:

答案 0 :(得分:1)

除了编译器错误之外,还有其他错误,例如:这一个:

public void switchedOnFor(int switchedOnFor)
{ 
  switchedOnFor = switchedOnFor;
}

这将无效,因为参数switchedOnFor会遮挡成员switchedOnFor,即您将参数分配给自身。

要解决这个问题(和其他人一样),请使用this.switchedOnFor = switchedOnFor;。将参数声明为final也可能更好,因此让编译器帮助您,因为该赋值不再编译。

编辑:我将总结评论中报告的错误,所以请不要为我们提供投票。这只是提供一个简明的答案。

JonSkeet发现了一个基本错误:

public class Mobile
{
   ...
}
//Mutator for newserviceprovider
public void setmobileServiceProvider(String newmobileServiceProvider) { ...

在方法关闭类之前的大括号,因此方法在类,接口或枚举之外定义,这是编译器告诉你的。

Raghunandan找到了这个:

public String getprovider()
{
  returnmobileServiceProvider;
}

编译器会抱怨returnmobileServiceProvider未知以及缺少return语句。在这里,缺少一个简单的空间。

另一个问题是你的构造函数(正如Raghunandan所暗示的那样):

public Mobile(String mobilephonetype, int mobilescreensize, int mobilememorycardcapacity, String mobileServiceProvider, int mobileTypeOfContract, int mobilecameraresolution, String mobileGPS, int chargeUp,int switchedOnFor, String changeProvider,int getBalance) {

  /**
   *recieves orders for mobiles at the given price.
   */
  this(yourCostHere);

  price= 1000;
  balance= 0;
  total= 0;
}

这里有多个问题:

  • 根本不使用参数
  • 没有其他构造函数采用单个参数(即this(yourCostHere);将无法编译)
  • yourCostHere是一个未知符号
  • getBalance违反了命名惯例,因为getXxx暗示了一个getter方法

上述一些一般性建议:

  • 格式化代码将帮助您发现错误
  • 使用Eclipse或Netbeans等IDE将帮助您发现并修复错误
  • 学习如何调试应用程序(再次使用IDE最简单)将帮助您找到运行时错误,如上面的阴影错误
  • 最重要的一点:在发布问题之前,请确保您的代码正确且格式正确,然后只发布相关部分以及发生错误的必要信息(例如标记编译器/堆栈跟踪指示的行

答案 1 :(得分:0)

有一个非常简单的解决方案:使用自动代码格式化。例如在eclipse中:Contextmenue-> Source-> Format

这样做,您会注意到setmobileServiceProvider是在类块之外定义的,这没有任何意义。在类块中移动此方法和任何后续内容,错误消失。

如果没有干净的格式化代码,就无法理解这些错误。