2015-12-21 3 views
-1

Я пытаюсь изучить основы Java, когда мне нечего делать на работе, и я хотел поиграть с помощью ввода. Это то, что я сейчас:Повторите метод из «if» до тех пор, пока не будет введено правильное значение для возврата.

import java.util.Scanner; 
public class Input { 
    private static Scanner input; 
    public static void main(String [] args){ 
     String name = (askName()); 
     double age = (askAge()); 
     System.out.println("Your name is " + name + " and your age is " + age); 
    } 
static String askName(){ 
    System.out.print("What is your name?"); 
    input = new Scanner(System.in); 
    //listens for strings 
    String name = input.next(); 
    return name; 
} 
static double askAge(){ 
    System.out.print("What is your age?"); 
    input = new Scanner(System.in); 
    //listens for doubles 
    double age = input.nextDouble(); 
    if (input.hasNextDouble()){ 
     return age; 
    } else { 
     System.out.println("Please insert a number:"); 
     askAge();} 
} 
} 

И это то, что я получаю:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    This method must return a result of type double 

    at Input.askAge(Input.java:16) 
    at Input.main(Input.java:6) 

Что делать, чтобы заставить пользователя ввести целое число (то есть, как я делаю метод повторяется до тех пор, пока не получает Int, что он может вернуться)

+0

Просто FYI слово вы ищете является 'recursion' – jackdh

+0

Ваша логика в обратном направлении: сначала проверьте 'hasNextDouble', затем вызовите' nextDouble', если 'hasNextDouble' истинно. –

ответ

0

я предпочел бы сделать это следующим образом:

public static void main(String [] args){ 
    Scanner sc = new Scanner(System.in); 
    String name = getString(sc, "What is your name? "); 
    int age = getInt(sc, "What is your age? "); 
    System.out.println("Your name is " + name + " and your age is " + age); 
} 


/* You increase the performance when using an already existing single  
scanner multiple times for different reasons (to get a name, first name, 
second name, age, etc.), instead of making a new Scanner each time */ 

public static String getString(Scanner sc, String message) { 
    System.out.print(message); 
    return sc.nextLine(); 
} 

public static int getInt(Scanner sc, String message) { 
    System.out.print(message); 
    if (sc.hasNextInt()) { 
     return sc.nextInt(); 
    } else { 
     sc.next(); // required to skip the current input 
     return getInt(sc, "Please insert a number: "); 
    } 
} 
+0

Ну, это работает. Я еще не понимаю, почему, но есть причина, по которой они не позволяют мне касаться какого-либо исходного кода;) – kukunamuniu

+0

коснитесь причины. – LowLevel

2

Возвращает значение рекурсивного вызова:

System.out.println("Please insert a number:"); 
return askAge(); 

Однако: это горе uld лучше использовать цикл, а не рекурсию здесь, так как вы можете (в конце концов) получить StackOverflowError, если вы продолжаете вводить недопустимое значение.

1

Если условие используется для принятие решения, а не для зацикливания. Используйте цикл while, Разрыв петли, когда u получите правильное значение. Я подключаю код sudo.

while(true){ 
if (input.hasNextDouble()){ 
     //Assign value to a variable ; 
     //Break loop 
    } else { 
     //Re ask question 
     System.out.println("Please insert a number:"); 
     } 

} 

Образец link для вашей помощи.

Исключением, которое вы получаете, является то, что вы не возвращаете какое-либо значение из askAge() в другой части.

+0

Итак, мне удалось получить метод, чтобы спросить меня о двойном, пока я не войду в него, но если я не сделаю этого в первый раз, когда меня спросят, он не вернется к основному методу. Что я теперь делаю неправильно? Пожалуйста, не стреляйте, я просто лингвист, окруженный IT-парнями;) – kukunamuniu

-1

Пожалуйста, измените Mathod как,

static double askAge(){ 
    System.out.print("What is your age?"); 
    input = new Scanner(System.in); 
    //listens for doubles 

    if (input.hasNextDouble()){ 
     return input.nextDouble(); 
    } else { 
     System.out.println("Please insert a number:"); 
     } 
    return askAge(); 
}} 
+0

Это не разрешает проблему компиляции, описанную в вопросе. –

+0

good catch @AndyTurner, обновил мой код. Этот код отлично работает.tested – dullpointer

Смежные вопросы

 Смежные вопросы