2015-10-06 2 views
-3

Я все еще очень новичок в Java, и я уже два дня борется с проблемой. Я просто прошу о помощи с моим кодом. Что я пропущу или делаю неправильно? Вот код:Использование методов в Java для этого

public static void main(String[] args) 
    {   
     menu();    
    } 

    public static double getMeters() 
    { 
     String str; 
     double meters; 

     // Get meters input from user: 
     str = JOptionPane.showInputDialog("Enter a distance in meters: "); 

     // Convert string input to double: 
     meters = Double.parseDouble(str); 

     // Validate input: 
     if (meters <= 0) 
     { 
      JOptionPane.showMessageDialog(null, "Error: Input must be a " + 
        " positive number");  
      getMeters(); 
      break; 
     }  
     else 
      return meters; 

    } 

    public static void menu() 
    { 
     String choice; 
     double meters = getMeters();    

     // Show menu options: 
     choice = JOptionPane.showInputDialog("1. Convert to Kilometers \n" + 
       "2. Convert to Inches \n" + "3. Convert to Feet \n" + 
       "4. Quit Program \n" + "\n Enter your choice: ");   

     switch (choice) 
     { 
      case "1": 
       showKilometers(meters); 
       menu(); 
       break; 

      case "2": 
       showInches(meters); 
       menu(); 
       break; 

      case "3": 
       showFeet(meters); 
       menu(); 
       break; 

      case "4": 
       JOptionPane.showMessageDialog(null, "Goodbye!"); 
       System.exit(0); 
       break; 

      default: 
       JOptionPane.showMessageDialog(null, "Error: Invalid input."); 
       menu(); 
       break;    
     }   
    } 

    public static void showKilometers(double meters) 
    { 
     double kilometers; 

     // Convert meters to kilometers: 
     kilometers = meters * 0.001; 

     // Display result: 
     JOptionPane.showMessageDialog(null, meters + " meters is " + 
       kilometers + " kilometers.");  
    } 

    public static void showInches(double meters) 
    { 
     double inches; 

     // Convert meters to inches: 
     inches = meters * 39.37; 

     // Display result: 
     JOptionPane.showMessageDialog(null, meters + " meters is " + 
       inches + " inches.");  
    } 

    public static void showFeet(double meters) 
    { 
     double feet; 

     // Convert meters to feet: 
     feet = meters * 3.281; 

     // Display result: 
     JOptionPane.showMessageDialog(null, meters + " meters is " + 
       feet + " feet."); 
    }   
} 

Он продолжает говорить «отсутствующее заявление о возврате» в методе getMeters() ....? Я не уверен, как исправить это, где он может проверять ввод и принимать только положительные числа ... пожалуйста, помогите.

Это наша первая глава, посвященная методам, поэтому я пока не знаю никаких продвинутых или каких-либо причудливых трюков.

+5

Что вы думаете, 'break' делает? Что, по-вашему, означает, что сообщение _missing return statement_ означает? –

+0

Почему вы почувствовали необходимость сообщить нам полное задание, когда все, о чем вы спрашиваете, является ошибкой компиляции? В следующий раз включите полное сообщение об ошибке и номер строки. – Andreas

+0

Извините за отправку всего задания, я пытался дать столько информации, чтобы все знали, что я пытаюсь сделать. Я новичок в программировании, и это мой первый день на StackOverflow .... извините за любые глупые вопросы сейчас или в будущем. :/ Спасибо за помощь! – Jess

ответ

1

Правильный вариант метода getMeters() заключается в следующем:

public static double getMeters() { 
    String str; 
    double meters; 

    // Get meters input from user: 
    str = JOptionPane.showInputDialog("Enter a distance in meters: "); 

    // Convert string input to double: 
    meters = Double.parseDouble(str); 

    // Validate input: 
    if (meters <= 0) { 
     JOptionPane.showMessageDialog(null, "Error: Input must be a " + 
       " positive number"); 
     return getMeters(); 
    } else 
     return meters; 
} 

Я вынул break. break предназначен для вырывания из for, while, do-while или switch инструкций, поэтому запрещается размещать их.

Я также изменил getMeters(); на return getMeters();. getMeters() - метод, возвращающий double. Вы вызывали метод, но игнорировали возвращаемое значение. Как следствие, вы можете дойти до конца метода, не возвращая ничего. Это недопустимо (если метод не имеет типа возврата void).

+0

Спасибо, много! Это определенно помогло! Не могу поверить, что я разорвал свои волосы на 2 дня над чем-то таким простым! Еще раз спасибо! – Jess

+0

@Jess Не беспокойтесь. Рад, что смог помочь. –

0

В вашем методе getMeters(), если выполняется оператор if, double не будет возвращен, так как единственный оператор return находится в вашем заявлении else. Надеюсь это поможет!

BTW, оператор break недействителен внутри оператора if. Они действительны только для циклов и циклов, а также для операторов switch.

+0

Фактически, 'break' недействителен. Сообщение об ошибке «Разрыв не может использоваться вне цикла или коммутатора». – Andreas

+0

Благодарим за помощь! – Jess

+0

@ Аndreas, вы правы, извините, что по какой-то причине я думал, что если выражение было циклом for. –

0

В вашем коде для метода getMeters() у вас есть оператор if, который заканчивается break;, который завершит функцию, не возвращая ничего. Он должен вернуть код ошибки или -1.0, просто что-то представляющее, что произошло.

if (meters <= 0) 
{ 
    JOptionPane.showMessageDialog(null, "Error: Input must be a " + " positive number");  
    getMeters(); 
    //error code for negative numbers is -1.0 
    //note that the return type is (Double) -1.0 rather than (int) -1 
    return -1.0; 
} 
else 
    return meters; 

Кроме того, я хотел бы обратиться к если условие meters <= 0. Бьюсь об заклад, что будет 0. Если true, это означает, что условие должно быть meters < 0.

+0

Вы правы. Я должен положить метров <0. Спасибо за помощь! – Jess

0

В getMeters вы не можете использовать break, вы должны использовать «double» в качестве возврата, удалить инструкцию «break», а затем использовать «return getMeters();» ниже.

+0

Благодарим за помощь! – Jess