2016-04-05 6 views
0

Я написал весь код, но что-то не хватает. Это два класса, которые работают вместе для вывода конкретных дней недели. Я знаю, что я делаю что-то глупое, любая помощь будет оцененаJAVA: Возврат неверного ответа

В принципе, 2 выхода правильны и 2 неверны. Два, которые неверны в предыдущий день и следующий день, вместо того, чтобы правильный ответ, я получаю, скажем, Monday1 или Tuesday6:

import java.util.*; 

public class DaysOfTheWeek 
{ 

static Scanner console = new Scanner(System.in); 

public static void main(String[] args) 
{ 

    String currentDayOfTheWeek; 
    String dayOfTheWeek; 

    int dayToFind; 

    System.out.println("Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday"); 
    System.out.print("Enter a day of the week: "); 

    currentDayOfTheWeek = console.nextLine(); 

    Day newDay = new Day(currentDayOfTheWeek); 

    newDay.printTheDay(); 

    dayOfTheWeek = newDay.getThePreviousDay(currentDayOfTheWeek); 

    System.out.println(); 
    System.out.print("The PREVIOUS day from '" + currentDayOfTheWeek + "' "); 
    System.out.print("is '" + dayOfTheWeek + "' \n"); 

    dayOfTheWeek = newDay.getTheNextDay(currentDayOfTheWeek); 

    System.out.println(); 
    System.out.print("The NEXT day from '" + currentDayOfTheWeek + "' "); 
    System.out.print("is '" + dayOfTheWeek + "' \n"); 

    System.out.println(); 
    System.out.println("How many days in the future from '" + currentDayOfTheWeek +"' \n"); 
    System.out.print("Do you want (0 - 31)?: "); 

    dayToFind = console.nextInt(); 

    if (validateDay(dayToFind) == true) 
    {  
    dayOfTheWeek = newDay.getTheFutureDay(currentDayOfTheWeek, dayToFind); 

    System.out.println(); 
    System.out.print(dayToFind + " days from '" + currentDayOfTheWeek + "' "); 
    System.out.print("is '" + dayOfTheWeek + "' \n");     
    } 
    else { 
    System.out.println(); 
    System.out.println("Invalid Day '" + dayToFind + "'. Entered day must be between 0 and 31"); 
    } 
} 

public static boolean validateDay(int dayToFind) 
{ 
    boolean validDay; 

    if ((dayToFind < 0) || (dayToFind > 31)) 
    validDay = false; 
    else 
    validDay = true; 

    return validDay; 
    } 
    public class day { 
    } 
    } 

Что вызывает в этом классе:

public class Day 
{ 
private String[] daysArray = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}; 
private String dayOfTheWeek; 

public Day() 
{ 
    dayOfTheWeek = ""; 
} 

public Day(String whichDay) 
{ 
    setTheDay(whichDay); 
} 

public void setTheDay(String whichDay) 
{ 
    dayOfTheWeek = whichDay; 
} 
public void printTheDay() 
{ 
    System.out.println(); 
    System.out.println("Day of the week entered is: " + dayOfTheWeek); 
} 

public String getTheFutureDay(String currentDayString, int futureDay) 
{  
    int todayArrayPos = -1; 

    for (int i = 0; i < daysArray.length; i++) 
    { 
     if (daysArray[i].equalsIgnoreCase(currentDayString)) 
     { 
     todayArrayPos = i; 
     break; 
     } 
    } 

    if (todayArrayPos == -1) 
    { 
     return "Invalid Day " + futureDay; 
    } 

    boolean bailOut = false; 

    int newFutureDay = 0; 
    int j = todayArrayPos; 

    while (newFutureDay != futureDay) 
    { 
    while (j < daysArray.length) 
    { 
     if (newFutureDay == futureDay) 
     { 
      bailOut = true; 
      break; 
     } 

     j += 1; 
     newFutureDay += 1; 
    } 

    if (bailOut == true) 
    { 
     break; 
    } 

    j = 0; 
    } 

    return daysArray[j];   
} 

public String getTheNextDay(String currentDayString) 
{ 

    String nextDayString = (dayOfTheWeek) + 1; 
return nextDayString; 
} 

public String getThePreviousDay(String currentDayString) 
{ 


    String previousDayString = (dayOfTheWeek) + 6; 
return previousDayString; 
} 
} 

Любая помощь будет принята с благодарностью! Заранее спасибо

Марк

+0

Вам определенно необходимо предоставить более описательную задачу. Как бы то ни было, мы знаем, что ваш код генерирует дни недели, но мы не знаем конкретно, что он делает или какие дни он должен генерировать. – nhouser9

+0

В основном он загружает дни недели в массив. Попросит пользователя выбрать начальный день, затем вернется в день, предыдущий день, на следующий день, затем попросит добавить от 0 до 31 дня, чтобы вернуть правильный ответ. В настоящее время он возвращает правильный начальный день и правильный день после добавления X дней, просто не вернусь к предыдущему и следующему дням, вместо того, чтобы переместить массив в следующий элемент или 6 элементов позже, он возвращает день1 или день6. Это более полезно понять, что я спрашиваю? – markus242005

+0

да очень полезно, см. Мой ответ, теперь, когда вы уточнили – nhouser9

ответ

0

Итак, ваша проблема в том, что вы добавляете 1 к бечевкам в следующем методе дня.

public String getTheNextDay(String currentDayString) 
{ 
    String nextDayString = (dayOfTheWeek) + 1; 
    return nextDayString; 
} 

Это будет приводить к конкатенации - программа не понимает, что, когда вы попросите его сделать «вторник» + 1, что вы хотите сказать, «среда».

Вам нужно сделать что-то похожее на ваш получить в будущем метода дня:

int todayArrayPos = -1; 
for (int i = 0; i < daysArray.length; i++) 
{ 
if (daysArray[i].equalsIgnoreCase(currentDayString)) 
{ 
    todayArrayPos = i; 
    break; 
} 
} 
int nextDayIndex = i + 1; 
//roll over to the first day of the week if the old day was the last day of the week 
if (nextDayIndex == daysArray.length) { 
nextDayIndex = 0; 
} 
return daysArray[nextDayIndex]; 

попробовать что-то подобное для вашего предыдущего дня, а также.

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