2015-10-20 3 views
0

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

Вот код,


int day, year; 
String month; 

System.out.println("Enter the month you were born."); 
month=in.nextLine(); 
System.out.println("Enter day you were born."); 
day=in.nextInt(); 
System.out.println("Enter the year you were born."); 
year=in.nextInt(); 

if (month==January && day <=20) 
    System.out.println("You are a Capricorn."); 
if (month==January && day > 20) 
    System.out.println ("You are an Aquarius."); 
if (month==February && day <= 19) 
    System.out.println ("You are an Aquarius."); 
if (month==February && day >19) 
    System.out.println ("You are a Pisces."); 
if (month==March && day <= 20) 
    System.out.println ("You are a Pisces."); 
if (month==March && day > 20) 
    System.out.println ("You are an Aries."); 
if (month==April && day <= 20) 
    System.out.println ("You are an Aries."); 
if (month==April && day >20) 
    System.out.println ("You are a Taurus."); 
if (month==May && day <= 21) 
    System.out.println ("You are a Taurus."); 
if (month==May && day > 21) 
    System.out.println ("You are a Gemini."); 
if (month==June && day <= 21) 
    System.out.println ("You are a Gemini."); 
if (month==June && day >21) 
    System.out.println ("You are a Cancer."); 
if (month==July && day <=22) 
    System.out.println ("You are a Cancer."); 
if (month==July && day >22) 
    System.out.println ("You are a Leo."); 
if (month==August && day <=22) 
    System.out.println ("You are a Leo."); 
if (month==August && day >22) 
    System.out.println ("You are a Virgo."); 
if (month==September && day <=23) 
    System.out.println ("You are a Virgo."); 
if (month==September && day >23) 
    System.out.println ("You are a Libra."); 
if (month==October && day <=23) 
    System.out.println ("You are a Libra."); 
if (month==October && day >23) 
    System.out.println ("You are a Scorpio."); 
if (month==November && day <=22) 
    System.out.println ("You are a Scorpio."); 
if (month==November && day >22) 
    System.out.println ("You are a Sagittarius."); 
if (month==December && day <=21) 
    System.out.println ("You are a Sagittarius."); 
else 
    System.out.println ("You are a Capricorn."); 

ответ

5

Вы должны сделать ваши месяцев строки, поставив двойные кавычки вокруг них:

if (month.equals("January") && day <=20) 
System.out.println("You are a Capricorn."); 

Осознайте, что пользователь будет иметь поставить в точно «январе», поэтому «январь» не будет работать. Для этого убедитесь, что вы используете функцию toLower. Вы также можете использовать equalsIgnoreCase().

Следуйте тому же шаблон для каждого из месяцев. Каждый раз, когда вы используете строковый литерал, он должен быть в " ". Также, если вы сравниваете строки, вам нужно использовать equals(), как показано выше.

Как Луиджи указал в комментариях ниже, было бы больше смысла делать:

if ("January".equals(month) && day <=20) 

Это позволит избежать ошибок NullPointerException, которые потенциально могут возникнуть.

+4

'месяц == "январь"' не хорошая идея, 'month.equals ("январь")' будет работать лучше в Java –

+0

Спасибо, ребята. Еще рано, пока еще не был кофе;) – BlackHatSamurai

+3

@ АлексСестеров на самом деле, лучшей идеей является «Январь» .equals (month) ', чтобы избежать NPE. –

1

попробовать, как этот

if (month.equalsIgnoreCase("January") && day <=20) 
     System.out.println("You are a Capricorn."); 

, если пользователь вводит JANUARY или january будет дать и хороший результат.

0

В .equals («Месяц») является правильным, но вам нужно добавить «еще», чтобы все, если операторы, кроме первого. В противном случае ваше окончательное другое будет применено только к тому, если до того, как он сделает это proc большую часть времени.

0

Сейчас Java на самом деле не знаю, что вы имеете в виду January он думает ваш ссылаясь на какой-то переменной или ключевое слово, и она не имеет ни малейшего представления. Поставив "January" в кавычках, нравится, что ваш красноречивый Java эй это кусок текста или как компьютеры любят называть это строкой. Pro tip не сравнивается со строками с ==, который проверяет, если вы ввели тот же объект с обеих сторон. Что в некоторых ситуациях дает вам некоторые странные результаты из-за того, как строки работают на Java. Поэтому всегда используйте myString.equals(someOtherString), чтобы проверить, имеет ли две строки одинаковое содержимое.

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