2015-02-25 2 views
1

Я чрезвычайно новичок, когда приходит на Java и программирование в целом. Я пытаюсь создать простую программу, где вы угадываете мой возраст, и если вы правы, он скажет «правильно», и если вы ошибаетесь, он скажет «неправильно».несовместимые типы: void не может быть преобразован в int

Это мой код:

import java.util.InputMismatchException; 
import java.util.Scanner; // This will import just the Scanner class. 

public class GuessAge { 
    public static int main(int[] args) { 
     System.out.println("\nWhat is David's Age?"); 
     Scanner userInputScanner = new Scanner(System.in); 
     int age = userInputScanner.nextLine(); 



     int validInput = 20; 
     if (validInput == 20) { 
      return System.out.println("Correct!!"); 
     } 
     else { 
      return System.out.println("Wrong...."); 
     } 
    } 
} 

я получаю ошибку «несовместимые типы: пустота не может быть преобразованы в целом», но у меня нет класса пустот в коде? Я знаю, что мой код, вероятно, ужасен, но если вы, ребята, можете указать мне в правильном направлении, это было бы здорово. Благодарю.

ответ

8

Ваша программа не должна возвращать int в public static int main. Вместо этого вы можете получить его как void (то есть ничего не возвращайте). Вам просто нужно просто распечатать свои заявления и не делать return. Также int[] должен быть String[], а Scanner должен проверить на nextInt(), как указано в комментариях!

import java.util.InputMismatchException; 
import java.util.Scanner; // This will import just the Scanner class. 

public class GuessAge { 
public static void main(String[] args) { 
    System.out.println("\nWhat is David's Age?"); 
    Scanner userInputScanner = new Scanner(System.in); 
    int age = userInputScanner.nextInt(); 



    int validInput = 20; 

    // typo in your code - compare to age 
    if (validInput == age) { 
     System.out.println("Correct!!"); 
    } 
    else { 
     System.out.println("Wrong...."); 
    } 
} 

} 
+1

'int age = userInputScanner.nextLine();' выглядит немного странно. – aioobe

+0

Ваше право - код нуждается в лучшем рефакторе. Две секунды – GermaineJason

+0

nextInt() было бы лучше –

3

Вы пытаетесь вернуть System.out.println(), который имеет тип void. Удалите операторы return с System.out.println(), и они все равно будут распечатаны. Обратите внимание, что вам не нужно указывать возвращаемое значение в методе main.

+2

Кроме того, в вашем операторе if вы сравниваете validInput с 20, что верно, поскольку вы инициализировали его до 20. Вы хотите сравнить возраст до 20. –

+0

@not_a_bot добавил ваше исправление к моему ответу - хороший звонок! – GermaineJason

+0

Спасибо! Я вынул операторы return и переключил validinput в выражении if, но я все еще получаю одну последнюю ошибку, говорящую, что строка не может быть преобразована в int, а затем подсказка cmd показывает, что эта строка int age = userInputScanner.nextline(); –

0

В вашем объявлении метода, у вас есть public static int main(int[] args)

Слово после static ключевого слова является типом возврата, и в этом случае вашей декларация требует основного метода должны возвращать int. Чтобы решить эту проблему, main должен иметь тип возврата void, поскольку вы печатаете только в основном и не возвращаете тип int.