2013-12-19 2 views
0

Я создаю окончательную программу для моего вводного курса программирования Java, и мне нужна какая-то помощь. Значения текущего дня и следующего дня неправильно печатаются. Я прочитал мой код снова и снова, но я не могу окунуться в голову, почему это не работает должным образом. Любая помощь/совет ВЕЛИКОЕ оценили!Создание Java-программы для возврата Предыдущий, текущий и следующий день

В руководстве я должен следовать за это задание программы заключается в следующем:

A. Установите день.

B. Печатать день.

C. Верните день.

D. Вернитесь на следующий день.

E. Возврат на предыдущий день.

F. Рассчитайте и верните день, добавив определенные дни на текущий день. Например, если текущий день - понедельник, и мы добавим четыре дня, день, который будет возвращен, - пятница. Точно так же, если сегодня вторник, и мы добавим 13 дней, день, который будет возвращен, - понедельник.

G. Добавьте соответствующие конструкторы.

H. Написать определения методов для осуществления операций на День класса, как это определено в А через G.

I. Напишите программу для проверки различных операций на день класса.

* EDIT *** Этот новый код, который я написал отлично работает, пока я не установить день в понедельник. Проблема, с которой я сталкиваюсь, находится в методе previousDay. Я пытаюсь добавить оператор if/else, но я не могу его правильно скомпилировать, не получив ошибку outOfBounds Exception. Каков хороший способ выполнить это в массиве String?

обновленный код я написал в попытке выполнить эту программу задачу:

public class Day { 


int index; 

static String[] days = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}; 


public Day(String currentDay) 
{ 

    for(int i = 0; i < days.length; i++) 
    { 

     if(currentDay.equals(days[i])) 
     { 

      index = i; 

      return; 
     } 

    } 

    System.out.println("Days is invalid"); 

} 

public void printDay() 
{ 
    System.out.println("The Day is " + days[index]); 

} 


public String returnDay() 
{ 
    return days[index]; 

} 


public String returnNextDay() 
{ 
    return days[(index + 1)% days.length]; 

} 


public String returnPreviousDay() 
{ 

if (days.length <= 1) 

    return days[index + 6]; 


else return days[(index - 1)%days.length]; 
} 


public String whatDayIs(int i) 
{ 
    return days[(index + i)%days.length]; 

} 


public static void main(String[] args) 
{ 
    Day day = new Day("Mon"); 

    day.printDay(); 

    System.out.println("Return Day: " + day.returnDay()); 

    System.out.println("Next Day: " + day.returnNextDay()); 

    System.out.println("Previous Day: " + day.returnPreviousDay()); 

    System.out.println(day.whatDayIs(7)); 

} 

}

Спасибо за ваше время!

Адам

+0

Что напечатано на дни и что вы ожидаете в результате? –

+0

Извините, если код грязный, я редактировал снова и снова. На текущий день я получаю «нуль», а на следующий день получаю то, что должно быть в текущий день «Солнце». – LearningJava101

+0

В вашем коде слишком много проблем, чтобы реально помочь вам здесь. Я настоятельно рекомендую вам снова прочитать весь документ, который вы, возможно, получили в классе, и следуйте [java соглашениям об именах] (http://www.oracle.com/technetwork/java/codeconv-138413.html) –

ответ

-1

Вы пытаетесь заново изобретать то, что уже существует, и это делает жизнь сложнее.

Просто сохраните данные в объекте «Календарь». Используйте dateAdd для добавления и удаления дней, прочтите результат.

+2

OP сказал, что это вступительный класс, так что он просто пытается изучить основы. –

+2

'Я создаю окончательную программу для своего вводного курса программирования Java. – GGrec

+0

Согласитесь и +1 от меня. – Alex

2

Прежде всего, используйте соглашения об именах java. Это делает код более понятным и понятным.

У вас есть какая-то ошибка в коде:

public Day setNameDay(String Day) { 
    Day = Days; 
    return this; 
} 

Что вы делаете здесь экономия Days значение параметра метода Day, который на самом деле ничего не делает.

public void nextDay() { 
    Day++; 

    if (Day <8) 
     Day = 1; 
    setDay(Day); 
} 

Зачем нужен день, если он меньше 8? Вы должны использовать:

if (Day >8) { 
     Day = 1; 
    } 
2

«Текущий день и значения на следующий день не правильно печатать.»

nextDay() не о печати

public void nextDay() 
{ 
    Day++; 

    if (Day <8) 
     Day = 1; 
    setDay(Day); 
    } 

И вы на самом деле нужно вызвать setDay() до того дня имеет значение;

Day myDay = new Day(); 
myDay.setDay(1); 
myDay.printDay(); 

И тот факт, что у вас есть класс Day и INT Day и строка Days совершенно запутанным для тех, кто читает код. Я удивлен, что ты даже способен следовать за ним. Рассмотрим соглашение о присвоении имен Java: имена переменных начинаются с нижнего регистра.

+1

+1 и как будто этого недостаточно, также параметры параметров обычно называются 'Day' или' Days' – Ingo

2

Ваш код полна проблем, проблем, которые возникают из-за глубокого непонимания Java.

Например, посмотрите на это:

public Day setNameDay(String Day) { 
    Day = Days; 
    return this; 
} 

Это не только называние, что это плохо. Как вы думаете, на самом деле этот метод?

Я настоятельно рекомендую вам пройти курс снова и обратить внимание, когда появляются темы, такие как передача параметров и т. Д.

0

Вы можете использовать API календаря с датой. попробуйте под кодом.

import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class CameoWebServiceClient { 
public enum day { 
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY 
} 

public static void main(String[] args) { 

    // read day 

    int lDay = 5; 
    SimpleDateFormat date_format = new SimpleDateFormat("yyyyMMdd"); 
    System.out.println(date_format.format(new Date())); 
    Calendar cal1 = date_format.getCalendar(); 

    cal1.set(Calendar.DAY_OF_WEEK, lDay); 

    cal1 = setDay(cal1, lDay); 
    System.out.println(""+curDay(cal1)); 
    System.out.println(""+nextDay(cal1)); 
    System.out.println(""+prevDay(cal1)); 


} 

public static Calendar setDay(Calendar cal1, int lDay) { 
    cal1.set(Calendar.DAY_OF_WEEK, (lDay)); 
    return cal1; 
} 

public static String curDay(Calendar cal1) { 
    int i = cal1.get(Calendar.DAY_OF_WEEK)-1 ; 
    i = i < 0 ? 6:i; 
    return day.values()[i]+""; 



} 

public static String nextDay(Calendar cal1) { 
    int i = cal1.get(Calendar.DAY_OF_WEEK); 
    i = i > 6 ? 0:i; 
    return day.values()[i]+""; 

} 

public static String prevDay(Calendar cal1) { 
    int i = cal1.get(Calendar.DAY_OF_WEEK)-2; 
    i = i < 0 ? 6:i; 
    return day.values()[i]+""; 

} 
} 
-1

import java.util.*;
import java.lang.*;
import java.io.*;
class Main {
public static void main(String[] args) {
Day day = new Day();
day.setDay(2);
day.printDay();
day.returnDay1(13);
day.returnDay();
day.nextDay();
day.previousDay(); }}

class Day {

int setday = 0; 
int returnday=0; 
String x,y; 
static String[] days = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; 

void printDay() {

if(setday < 7) { 
    System.out.println("The Day is " + days[setday]); } 

else 
System.out.println("Invalid set of day"); } 

void setDay(int dayset) {

setday = dayset; }

void returnDay1(int returnday1) {

returnday = returnday1; }

void returnDay() {

if(setday < 7) { 
    x = days[(setday + returnday)% days.length]; 
    System.out.println("Return Day after "+String.valueOf(returnday)+ " days is " + x); } 

else 

System.out.println(" "); } 

void nextDay() {

if(setday < 7) { 

    y = days[(setday + returnday + 1)% days.length]; 
    System.out.println("Next Day is " + y); } 

else 

System.out.println(" "); } 

void previousDay() {

if(setday < 7) { 

    y = days[(setday + returnday - 1)% days.length]; 
    System.out.println("Previous Day is " + y); } 

else 

System.out.println(" "); } } 
0

Попробуйте обновить свой метод, как:

public String returnPreviousDay() { 
    return days[(index + days.length - 1) % days.length]; 
} 

Здесь, вместо того, чтобы двигаться в обратном направлении до 0 индекса, я двигался вперед по п - 1 дней, чтобы получить в предыдущий день.

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