Ошибка при компиляции Java с отсутствующим оператором возврата

#java #compiler-errors #return

#java #ошибки компилятора #Возврат

Вопрос:

Я пытаюсь изучать Java, бездельничая и создавая разные вещи, такие как этот пример с кубиками. Однако в приведенном ниже классе я застрял на этом отсутствующем возврате, но я не уверен, почему. Любая помощь приветствуется!

Test1.java:12: ошибка: отсутствует оператор возврата } ^ 1 ошибка

 import java.util.Random;

class Char
{
    Random r = new Random();
    int nSides;

    public int Die(int sides)
    {
        this.nSides = sides;
        r = new Random();   
    }

    public int roll()
    {
        return r.nextInt(nSides   1);
    }

    public int roll(int times)
    {
        int sum = 0;
        for (int i = 0; i < times; i  )
        {
        sum  = roll();
        }
        return sum;
    }

}
  

Ответ №1:

Похоже, вы пытались написать конструктор, который, естественно, не имеет возвращаемого значения. Конструктор должен иметь то же имя, что и класс, который он создает.

public int Die Замените следующим.

 public Char(int sides)
{
    this.nSides = sides;
    r = new Random();   
}
  

В качестве альтернативы вы можете переименовать свой класс Die .

 public class Die {
    public Die(int sides)
    {
       this.nSides = sides;
       r = new Random();   
    }
// Rest of your code
}
  

Ответ №2:

Вам нужно сказать

 public Char(int sides)
  

или, предполагая, что вы хотите, чтобы класс действительно назывался «Die», измените объявление класса на:

 class Die
  

и строка конструктора (?) для:

 public Die(int sides)
  

(удаление «int»).

Ответ №3:

В функции Die применяется оператор возврата:

 public int Die(int sides)
{
    this.nSides = sides;
    r = new Random(); 
    return 0; // whatever you want to return 
}
  

или удалите int перед смертью и сделайте это void .

 public void Die(int sides)
{
    this.nSides = sides;
    r = new Random(); 
}
  

Ответ №4:

Похоже, вы пытаетесь создать вызываемый класс Die , который должен быть его конструктором. Попробуйте это:

 import java.util.Random;

class Die {
    private Random r = new Random();
    private final int nSides;

    public Die(int sides) {
        this.nSides = sides;
    }

    // rest of class omitted
}
  

Примечания:

  • Конструкторы не объявляют возвращаемый тип и называются так же, как класс.
  • Нет необходимости повторно инициализировать Random поле (строка удалена)
  • Лучше объявить nSides как final (см. Код)
  • Лучше сделать все поля private