2016-02-09 4 views
1

Я хотел бы указать, что я очень новичок в Java, поэтому я могу делать глупые ошибки.Java: возвращает строку из метода

У меня есть класс под названием «Персонажи», который состоит из 4 переменных и нескольких методов. Все переменные являются частными, поэтому из того, что я прочитал, мне нужно использовать методы, чтобы что-то им делать.

Один из методов должен возвращать одну из переменных в строковой форме, однако я продолжаю получать ошибку как от затмения, так и при ее запуске. «Этот метод должен возвращать результат типа„String“Ошибка возникает на первой строке метода:.

public String displayStats(String option) { 
    switch (option) { 
    case "charName": 
     System.out.println(charName); 
     return charName; 
    case "charHealth": 
     System.out.println(charHealth); 
     String charHealth2 = Integer.toString(charHealth); 
     return charHealth2; 
    case "charMana": 
     System.out.println(charMana); 
     String charMana2 = Integer.toString(charMana); 
     return charMana2; 
    case "charStamina": 
     System.out.println(charStamina); 
     String charStamina2 = Integer.toString(charStamina); 
     return charStamina2; 
    default: 
     System.out.println("Error on default");} 
} 

} 

Полный класс:

package basics; 

public class Characters { 

    private String charName = ""; 
    private int charHealth = 0; 
    private int charMana = 0; 
    private int charStamina = 0; 

    public void summoner(Characters player) { 
     player.charName = "Summoner"; 
     player.charHealth = 80; 
     player.charMana = 150; 
     player.charStamina = 50;} 

    public void sentinel(Characters player) { 
     player.charName = "Sentinel"; 
     player.charHealth = 200; 
     player.charMana = 50; 
     player.charStamina = 100;} 

    public void beserker(Characters player) { 
     player.charName = "Beserker"; 
     player.charHealth = 100; 
     player.charMana = 0; 
     player.charStamina = 200;} 

    public void mage(Characters player) { 
     player.charName = "Mage"; 
     player.charHealth = 80; 
     player.charMana = 200; 
     player.charStamina = 20;} 

    public String displayStats(String option) { 
     switch (option) { 
     case "charName": 
      System.out.println(charName); 
      return charName; 
     case "charHealth": 
      System.out.println(charHealth); 
      String charHealth2 = Integer.toString(charHealth); 
      return charHealth2; 
     case "charMana": 
      System.out.println(charMana); 
      String charMana2 = Integer.toString(charMana); 
      return charMana2; 
     case "charStamina": 
      System.out.println(charStamina); 
      String charStamina2 = Integer.toString(charStamina); 
      return charStamina2; 
     default: 
      System.out.println("Error on default");} 
    } 

} 
+4

Как вы думаете, будет ли возвращен вызывающий абонент, если он попадет в этот случай по умолчанию? –

+2

Как правило, вы должны ломаться от каждого оператора case и иметь один возврат из своего метода в конце. Несколько возвратов от одного метода считаются плохой практикой, так как это делает код труднее следовать –

+0

Я думаю, что я мог бы слишком сосредоточиться на объявлении метода. Спасибо. – BaphOfWonder

ответ

0

В функции displayStats вы не возвращаете String по всем путям вашего кода .
Это потому, что default не return.

Может быть, вы хотели написать:

default: 
    return "Error on default"; 
1

Вы ничего не возвращаются в default случай вашего оператора switch, что означает, что есть возможность (хотя и маленькая), что метод не будет знать, что возвращать.

0

Две проблемы: charName является строкой, но charHealth, charMana и charStamina являются Интс. Таким образом, ваша функция displayStats не всегда возвращает строку.

Кроме того, ваш вариант по умолчанию в вашем операторе switch также должен возвращать строку.

Было бы лучше создать функцию доступа для каждой переменной:

public String getCharName() { 
    return charName; 
} 

public int getCharHealth() { 
    return charHealth; 
} 

т.д.

0

Метод displayStats всегда должен возвращать строку или выбросить исключение. Поскольку код подразумевает, что случай по умолчанию является ошибкой, затем генерирует исключение. На данный момент вместо создания нового класса исключений просто выкиньте IllegalArgumentException - новое исключение IllegalArgumentException (опция). При распечатке указывается тип исключения и значение недопустимой опции.