#java
#java
Вопрос:
У меня есть задание попросить людей ввести код и выяснить, является ли это високосным годом. Каким бы ни был результат, он спрашивает пользователя, не хотят ли они попробовать новый ввод. Если пользователь отвечает утвердительно, он просит вас ввести новый год. Если пользователь говорит «нет», он подписывает код, печатая прощание.
Единственным требованием является использование цикла while или do-while . Я застрял.
import java.util.Scanner;
public class homework7 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter a year: ");
int year = scan.nextInt();
//while (yes==1) {
do {
/**System.out.print("Enter a year: "); //prompting the user to enter information
int year = scan.nextInt();*/
if (year % 4==0) {
System.out.println(year " is a leap year");
System.out.println("Would you like to check another year? Enter 1 for yes, 0 for no");
int yes = scan.nextInt();
}
else {
System.out.println(year " is not a leap year");
}
}
while(year % 4==0);
}
}
PS. Самое главное, что я застрял на выяснении, как снова запустить цикл, потому что я могу узнать, високосный это год или нет, но когда меня просят продолжить, я не уверен, как снова запустить ввод и попросить пользователей о новом году!
Комментарии:
1. Мне жаль слышать, что вы застряли, но вам трудно помочь, если вы не скажете нам, где вы застряли. Вам нужно немного покопаться самостоятельно и выяснить, с чем именно вам нужна помощь, а затем спросить об этом. Если бы мы просто написали программу для вас, вы бы не узнали никаких новых концепций, и тогда вы бы еще больше застряли на своем следующем задании.
2. Нам сказали просто использовать простое (число % 4 == 0), чтобы определить, является ли это високосным годом или нет.
3. Самое главное, что я застрял на выяснении, как снова запустить цикл, потому что я могу узнать, високосный это год или нет, но когда меня просят продолжить, я не уверен, как снова запустить ввод и попросить пользователей о новом году!
4. Вы задаете пользователю вопрос и записываете ответ в переменную
yes
, а затем никогда не используете его ни для чего. Как пользователь, я бы очень разозлился на вашу программу за игнорирование моего ответа.5. Что касается проверки високосного года, полная логика проверки високосного года выглядит примерно так
((year % 400 == 0) || (year % 4 == 0 amp;amp; year % 100 != 0))
Ответ №1:
Попробуйте это. Ваша логика неверна. Попробуйте сравнить и понять.
Если ваш цикл while зависит от пользовательского ввода (1 или 0), то почему вы проверяете год% 4 == 0?
Несколько советов: Во-первых: визуализируйте свой код и нарисуйте блок-схему. Не просто читайте проблему и пишите код. Подумайте, визуализируйте, а затем напишите
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int yes=1;
while(yes == 1){
System.out.println("Enter a year: ");
int year = scan.nextInt();
if (year % 4==0) {
if( year % 100 == 0){
// year is divisible by 400, hence the year is a leap year
if ( year % 400 == 0)
System.out.println(year " is a leap year");
else
System.out.println(year " is not a leap year");
}
else{
System.out.println(year " is a leap year");
}
else {
System.out.println(year " is not a leap year");
}
System.out.println("Would you like to check another year? Enter 1 for yes, 0 for no");
yes = scan.nextInt(); //IF USER ENTERS ANY OTHER NUMBER OTHER THAN 0 amp; 1, IT WILL STILL EXIT. Leaving upto you
}
}
Комментарии:
1. Большое вам спасибо! Я вижу, где я ошибся, позволит ли мне изменить цикл while на цикл do-while, чтобы я мог создать сообщение, предлагающее отключить пользователя с помощью чего-то вроде
System.out.println("Have a good one!");
EDIT: Я понял это, мне удалось просто добавить простоеif (yes==0)
в конце, и это устранило мою проблему.2. 1900, 2100 — это не високосный год
3. Логическое значение, считывающее Y / y против N / n, может быть лучшим / более распространенным способом сделать это. Кроме того, как указал @RajeevRanjan, високосный год проводится не каждый 4-й год, а каждый 4-й год, за исключением каждых 100 лет, когда year / 100 не делится на 4, на самом деле 97/400 лет.
4. @RajeevRanjan исправил это. На самом деле я сосредоточился на его логике while и оставил ему вход в систему leap. В любом случае, измените его.
5. @AharonK исправил это. На самом деле я сосредоточился на его логике while и оставил ему вход в систему leap. В любом случае, измените его.
Ответ №2:
для високосного года требуется это условие: year % 4 == 0 amp;amp; (year % 100 == 0 amp;amp; year % 400 == 0)
.
Scanner scan = new Scanner(System.in);
int year = -1;
while (year != 0) {
System.out.println("Enter a year or 0 to end: ");
year = scan.nextInt();
if (year != 0) {
if (year % 4 == 0 amp;amp; (year % 100 == 0 amp;amp; year % 400 == 0)) {
System.out.println(year " is a leap year");
} else {
System.out.println(year " is not a leap year");
}
}
}