Java - ошибка в подсказках [дубликат]

Краткая история: это называется маскировкой ошибок. Если у вас есть код, который не работает хорошо и бросает исключения (или вы передаете неверный ввод на этот фрагмент кода), и вы просто закрываете глаза, ловя все возможные исключения, вы на самом деле никогда не обнаружите ошибку и не исправите ее.

-1
задан sehe 21 October 2012 в 00:58
поделиться

6 ответов

Вопрос дает вам дни от 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.");
}
1
ответ дан AnandFrancis 1 September 2018 в 10:20
поделиться

Вы можете сделать это лучше, используя массив для хранения имен дней.

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.
0
ответ дан Bhesh Gurung 1 September 2018 в 10:20
поделиться

Как вам нужно, чтобы день-номер в дневную строку дважды, поместите его в отдельную функцию. Я хочу показать вам несколько возможных подходов. Версия 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) );

Не забудьте добавить код, чтобы проверить свои входы!

1
ответ дан fvu 1 September 2018 в 10:20
поделиться
0
ответ дан Haggra 1 September 2018 в 10:20
поделиться

Вопрос из книги под названием « Введение в 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.

Примечания:

  • Первый оператор switch присваивает день строки типа переменной day_of_week , которая позже используется для печати «сегодняшнего дня».
  • Чтобы получить следующий день, вы должны найти остаток суммы сегодняшнего дня и количество прошедших дней, деленное на 7.
  • Последний оператор switch «соответствует» номеру случая, который идентичен номеру, хранящемуся в futureDay (которая получается при выполнении указанной выше математической операции).
1
ответ дан j.doe 1 September 2018 в 10:20
поделиться
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);
        }

    }
0
ответ дан Martin Tournoij 1 September 2018 в 10:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: