Краткая история: это называется маскировкой ошибок. Если у вас есть код, который не работает хорошо и бросает исключения (или вы передаете неверный ввод на этот фрагмент кода), и вы просто закрываете глаза, ловя все возможные исключения, вы на самом деле никогда не обнаружите ошибку и не исправите ее.
Вопрос дает вам дни от 0 до 6, вместо 1-7 (обычные). Например, если сегодня день равен 1 (понедельник), а дни, прошедшие с сегодняшнего дня, равны 3, то день должен быть в четверг. Поскольку этот вопрос имеет начальный день включительно, итоговый день будет после 1 (понедельник), 2,3 (среда) прошел, то есть четверг.
Давайте возьмем пример и применим его к коду ниже.
day = 1;
daysElased = 3;
else if (день> 0 & amp; день & lt; 7), который является case
{
sum = 1 (день) + 3 (daysElapsed); // sum = 4
}
Если сумма находится в диапазоне от 0 до 6, каждый случай может быть создан, соответствующий каждому дню. В приведенном выше случае сумма меньше 6, поэтому она будет иметь свой собственный if-предложение. Если бы сумма была больше, например, дни = 1 и daysElapsed = 6, то sum = 1 (days) + 6 (daysElapsed) = 7.
В этом случае он будет соответствовать предложению if (sum > 6), то сумма = сумма% 7 = 7% 7 = 0 = воскресенье. Это означает, что дни с 1 (понедельник) до 6 (суббота) истекли, поэтому день будет в воскресенье (0).
if(day == 0) // If the present day entered is Zero(0 is for Sunday)
{
sum = daysElapsed; // daysElapsed will be entered by the user
}
else if(day > 0 && day < 7) // If the present day is > 0 but < 7 (1 - 6 days)
{
sum = day + daysElapsed; //
}
if(sum>6) // if 0<= sum <=6 , 6 if cases can be created. If sum > 6 :
{
sum = sum % 7;
}
if(sum == 0)
{
System.out.println("Day is Sunday.");
}
.
.
.
.
else if(sum == 6)
{
System.out.println("Day is Saturday.");
}
Вы можете сделать это лучше, используя массив для хранения имен дней.
String[] dayNames = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
Теперь вы можете использовать пользовательский ввод как индекс
int nameIndex = //... get input
//validate input
//dayNames[nameIndex] is the day of the week
Now получить вход для количества дней, чтобы добавить
int numDays = //...get input
. Затем просто добавьте, что много дней, чтобы вычислить индекс для будущего дня недели
int futureNameIndex = nameIndex; //start with entered day of week index
for(int i=0; i<numDays; i++) {
futureNameIndex++; //increment by 1 for numDays times
if(futureNameIndex == dayNames.length) { //if the index reaches lenght of the array
futureNameIndex = 0; //reset it to 0
}
}
Я думаю, вы обнаружите, что один легче понять. Наконец
//dayNames[futureNameIndex] is the future day of week.
Как вам нужно, чтобы день-номер в дневную строку дважды, поместите его в отдельную функцию. Я хочу показать вам несколько возможных подходов. Версия 1, базовая, простая и аккуратная:
// isolate the daynumber --> daystring in a function, that's tidier
String dayFor (int daynumber) {
String dayAsString = "ERROR"; // the default return value
switch(dayNumber) {
case 0 :
dayAsString = "Sunday";
break;
case 1 :
dayAsString = "Monday";
break;
// and so on, until
case 6 :
dayAsString = "Saturday";
break;
}
return dayAsString;
}
Более короткая версия, которая использует массив вместо оператора switch:
String dayFor (int daynumber) {
String dayStrings[] = new String[]{"Sunday","Monday", .... "Saturday"};
// notice that daynumber's modulo is used here, to avoid index out of
// bound errors caused by erroneous daynumbers:
return dayStrings[daynumber % 7];
}
Возможно, соблазн попробовать что-то вдоль линий следующей функции, где каждый случай возвращается немедленно, но наличие нескольких операторов возврата не рекомендуется. Просто покажите это здесь, потому что это технически возможно, и вы столкнетесь с ним иногда
String dayFor (int daynumber) {
switch(dayNumber) {
case 0 :
return "Sunday";
case 1 :
return "Monday";
// and so on, until
case 6 :
return "Saturday";
}
// normally not reached but you need it because the compiler will
// complain otherwise anyways.
return "ERROR";
}
. После этого довольно длительного ввода основная функция становится коротким и простым. После ввода вам просто нужно:
// present day + elapsed modulo 7 = the future day
int future = (day + elapsed) % 7;
System.out.print("Today is " + dayFor(day) + " and the future day is " + dayFor(future) );
Не забудьте добавить код, чтобы проверить свои входы!
Вопрос из книги под названием « Введение в Java-программирование » Ю. Даниэля Ляна. Помимо использования строкового типа типа , который, как я полагаю, рассматривается в следующей главе; решение, которое я написал для этого упражнения, использует только то, чему вас научили до сих пор.
import java.util.Scanner;
public class Exercise_03_06 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter today's day: ");
int todaysDay = input.nextInt();
System.out.print("Enter the number of days elapsed since today: ");
int elapsedDays = input.nextInt();
int futureDay = (todaysDay + elapsedDays) % 7;
String day_of_week = "";
switch (todaysDay) {
case 0: day_of_week = "Sunday"; break;
case 1: day_of_week = "Monday"; break;
case 2: day_of_week = "Tuesday"; break;
case 3: day_of_week = "Wednesday"; break;
case 4: day_of_week = "Thursday"; break;
case 5: day_of_week = "Friday"; break;
case 6: day_of_week = "Saturday";
}
switch (futureDay) {
case 0:
System.out.println("Today is " + day_of_week + " and the future day is Sunday."); break;
case 1:
System.out.println("Today is " + day_of_week + " and the future day is Monday."); break;
case 2:
System.out.println("Today is " + day_of_week + " and the future day is Tuesday."); break;
case 3:
System.out.println("Today is " + day_of_week + " and the future day is Wednesday."); break;
case 4:
System.out.println("Today is " + day_of_week + " and the future day is Thursday."); break;
case 5:
System.out.println("Today is " + day_of_week + " and the future day is Friday."); break;
case 6:
System.out.println("Today is " + day_of_week + " and the future day is Saturday.");
}
}
}
Выход:
Enter today's day: 0
Enter the number of days elapsed since today: 31
Today is Sunday and the future day is Wednesday.
Примечания:
package javaapplication2;
import java.util.Scanner;
public class JavaApplication2 {
public static void main(String[] args) {
int day, eday, fday;
String str, str1;
Scanner S = new Scanner(System.in);
System.out.println("Enter today's day: ");
day = S.nextInt();
System.out.println("Enter the number of days elapsed since today: ");
eday = S.nextInt();
if (day == 0) {
str = "Sunday";
System.out.print("Today is " +str + " and ");
}
else if (day == 1) {
str = "Monday";
System.out.print("Today is " +str + " and ");
}
else if (day == 2) {
str = "Tuesday";
System.out.print("Today is " +str + " and ");
}
else if (day == 3) {
str = "Wednesday";
System.out.print("Today is " +str + " and ");
}
else if (day == 4) {
str = "Thursday";
System.out.print("Today is " +str + " and ");
}
else if (day == 5) {
str = "Friday";
System.out.print("Today is " +str + " and ");
}
else if (day == 6) {
str = "Saturday";
System.out.print("Today is " +str + " and ");
}
fday = day + eday;
if (fday % 7 == 0) {
str1 = "Sunday";
System.out.print("Future day is " +str1);
}
else if (fday % 7 == 1) {
str1 = "Monday";
System.out.print("Future day is " +str1);
}
else if (fday % 7 == 2) {
str1 = "Tuesday";
System.out.print("Future day is " +str1);
}
else if (fday % 7 == 3) {
str1 = "Wednesday";
System.out.print("Future day is " +str1);
}
else if (fday % 7 == 4) {
str1 = "Thursday";
System.out.print("Future day is " +str1);
}
else if (fday % 7 == 5) {
str1 = "Friday";
System.out.print("Future day is " +str1);
}
else if (fday % 7 == 6) {
str1 = "Saturday";
System.out.print("Future day is " +str1);
}
}