如何修复java:1:错误:';{&òx27;预期

如何修复java:1:错误:';{&òx27;预期,java,class,Java,Class,我正试图用Java编译一个简单的类,但无法理解错误的含义。我对Java非常陌生 错误是: Book.java:1: error: '{' expected public class Book(String bookName) ^ 代码 本类别声明: public class Book(String bookName) Java中不允许使用。 也许您的意思是创建这样的构造函数: public class Book { //... publ

我正试图用Java编译一个简单的类,但无法理解错误的含义。我对Java非常陌生

错误是:

Book.java:1: error: '{' expected
public class Book(String bookName)
                 ^ 
代码


本类别声明:

public class Book(String bookName)
Java中不允许使用

也许您的意思是创建这样的构造函数:

public class Book {

    //...

    public Book(String bookName) {
        this.name = bookName;
    }

    //...
}
public class Book {

    private @Getter @Setter String name;
    private @Getter @Setter int price;

    public Book(String bookName) {
        this.name = bookName;
    }

    public Book() {
        Random r = new Random();
        int lowPrice = 10;
        int highPrice = 100;
        price = r.nextInt(highPrice - lowPrice) + lowPrice;
    }

}

其他问题

  • Random::nextInt
    返回一个
    int
    而不是
    字符串,因此声明
    
    private String price;
    应该是
    private int price;
  • 您也可以使用getter和setter
最后,我假设您的代码应该如下所示:

public class Book {

    //...

    public Book(String bookName) {
        this.name = bookName;
    }

    //...
}
public class Book {

    private @Getter @Setter String name;
    private @Getter @Setter int price;

    public Book(String bookName) {
        this.name = bookName;
    }

    public Book() {
        Random r = new Random();
        int lowPrice = 10;
        int highPrice = 100;
        price = r.nextInt(highPrice - lowPrice) + lowPrice;
    }

}

看看这个:

    • public class Book(String bookName)
      {
      
      应该是

      public class Book
      {
      
      或者您必须创建一个单独的参数化构造函数

      public class Book
      {
      
          private String name;
          private String price;
          public Book(String bookName){
              //.. code
              name = bookName;
          }
      
          public Book() 
          {
              //name = bookName;
              Random r = new Random();
              int lowPrice = 10;
              int highPrice = 100;
              price = r.nextInt(highPrice - lowPrice) + lowPrice;
          }
      }
      

      您的类声明错误。您需要从类构造函数的声明中删除
      class
      声明器

      java中不允许您的类声明
      public类目(String bookName)
      。您需要将其更改为
      public类目

      Random#nextInt(…)
      不返回字符串,而是返回整数。将
      String price
      更改为
      int price

      试试这个:

      public class Book {
      
          private String name;
          private int price;
      
          public Book(String bookName) {
              name = bookName;
              Random r = new Random();
              int lowPrice = 10;
              int highPrice = 100;
              price = r.nextInt(highPrice - lowPrice) + lowPrice;
          }
      }
      

      更改了类声明并添加了Main方法

      public class Book {
      
          private String name;
          private String price;
      
          public Book(String bookName) 
          {
              this.name = bookName;
              Random r = new Random();
              int lowPrice = 10;
              int highPrice = 100;
              this.price = r.nextInt(highPrice - lowPrice) + lowPrice;
          }
      
        public void printBookDetails(){
        System.out.println("The book "+this.name + "is for "+ this.price +"dollars");
        }
      
        public static void main(String [] args){
                Book book =new Book("MyBook");
                book.printBookDetails();
      
        }
      
      }
      
      公共课堂用书{

      private String name;
      
      
       Book(String bookName) 
       {
         this.name = bookName;
      }
        public static void main(String[] args){
          int price;
          int lowPrice = 10;
          int highPrice = 100;
          price =(highPrice - lowPrice) + lowPrice;
              System.out.println(price);
      }
      

      }

      这是Java而不是Scala。构造函数在主体内部,而不是在声明范围内。在开始编码之前,请先看一下Java语法。谢谢。我今天读了一本这方面的书,但只是想了解一下。如果我的无知冒犯了你,我向你道歉。我是在寻求帮助。@1.1k StackOverflow声誉的elksie5000,我会我希望你熟悉一些页面,比如“向下投票”按钮上的文字——“这个问题没有显示任何研究成果(…)”。您可能会发现此页面非常有用:@zlakad,我不打算删除此问题。我猜可能还有其他人在使用新语言的第一天也面临同样的情况。默认构造函数没有参数named
      bookName
      @smac89
      构造函数重载
      仍然没有
      bookName
      可变的scope@smac89完全同意、更新和thanks@elksie5000是的,在python中这是可能的,但在java中,构造函数应该在类的主体内定义,就像没有任何返回类型的函数一样,对于某些属性,重载构造函数,如asnwerMy向您提出的问题所示:无论何时实例化新书,您都是creating new Random r.将r声明为私有静态字段不是更便宜(更优雅)吗?是的,你是对的@zlakad,在这个回答中,我只是解决了大问题:)