简体   繁体   中英

Cannot find symbol // variable in other class

So this is my first time posting here so hopefully you guys will be able to help me, anyways here's my code:

    System.out.println("Would you like to run? (enter y to run): ");
    Scanner scan = new Scanner(System.in);
    char response = scan.next().charAt(0);
    if(response == 'y' || response == 'Y'){
        MyCalendar test1 = new MyCalendar();
        System.out.println("Enter year, month, and day, separated by space: ");
        int year = scan.nextInt();
        int month = scan.nextInt();
        int day = scan.nextInt();

        if(MyCalendar.isValidDate(year,month, day)){
            System.out.println("The above date is a valid date.");
            System.out.println("Day of that day in its week: "+ MyCalendar.dayOfWeek);
            System.out.println("Day of the date in its year: "+ MyCalendar.dayOfYear);
            return;
        }
        else{
            System.out.println("The above date is not valid.");
            return;
        }

    }
}

}

On the line where I put MyCalendar.dayOfWeek and MyCalendar.dayOfYear it says it cannot find the variable, it's in another class.

How would I properly reference this method?

MyCalendar class:

/**
 * Check for validity of a date 
 * 
 * @param   year      int (>= 1900 and <= 2100)
 * @param   month     int
 * @param   day       int
 * @return  booolean  true if valid date; false, otherwise
 */

public static boolean isValidDate(int year, int month, int day){
    return(year > 1900 && year <= 2100 && month > 0 && month < 13 && day > 0 
&& day < 32);
}

/**
 * Check for leap year
 * 
 * @param   year     int (>= 1900 and <= 2100)
 * @return  boolean  true if leap year; false, otherwise
 */

 private boolean isLeapYear(int year){
    return(year % 4 == 0 && year % 100 !=0 || year % 400 == 0);
}

/**
 * Compute the number of days in a valid month of a valid year  
 * 
 * @param   year   int (>= 1900 and <= 2100)
 * @param   month  int (range 1-12)
 * @return  int    the number of days in the given month of the year
 */
private int numDays(int year, int month, int day){
    int daysInMonth = 0;
    switch (month){
        case 1: daysInMonth = 31; break;
        case 2: if(isLeapYear(year))
            daysInMonth = 29; 
        else
            daysInMonth = 28;
        break;
        case 3: daysInMonth = 31; break;
        case 4: daysInMonth = 30; break;
        case 5: daysInMonth = 31; break;
        case 6: daysInMonth = 30; break;
        case 7: daysInMonth = 31; break;
        case 8: daysInMonth = 31; break;
        case 9: daysInMonth = 30; break;
        case 10: daysInMonth = 31; break;
        case 11: daysInMonth = 30; break;
        case 12: daysInMonth = 31; break;
    }
    return daysInMonth;
}

/**
 * Compute the day of the year for a valid date  
 * 
 * @param   year   int (>= 1900 and <= 2100)
 * @param   month  int (range 1-12)
 * @param   day    int (range 1-numDays(year, month))
 * @return  int    the day of the year
 */    
public int dayOfYear(int year,int month,int day){
    int dayOfYear = day;
    if(isLeapYear(year)){
        switch (month){
            case 1:
            dayOfYear = day; break;
            case 2:
            dayOfYear += 31; break;
            case 3:
            dayOfYear += 60; break;
            case 4:
            dayOfYear += 91; break;
            case 5:
            dayOfYear += 121; break;
            case 6:
            dayOfYear += 152; break;
            case 7:
            dayOfYear += 182; break;
            case 8:
            dayOfYear += 213; break;
            case 9:
            dayOfYear += 244; break;
            case 10:
            dayOfYear += 274; break;
            case 11:
            dayOfYear += 305; break;
            case 12:
            dayOfYear += 335; break;
        }}
    else{ 
        switch (month){
            case 1:
            dayOfYear = day; break;
            case 2:
            dayOfYear += 31; break;
            case 3:
            dayOfYear += 59; break;
            case 4:
            dayOfYear += 90; break;
            case 5:
            dayOfYear += 120; break;
            case 6:
            dayOfYear += 151; break;
            case 7:
            dayOfYear += 181; break;
            case 8:
            dayOfYear += 212; break;
            case 9:
            dayOfYear += 243; break;
            case 10:
            dayOfYear += 273; break;
            case 11:
            dayOfYear += 304; break;
            case 12:
            dayOfYear += 334; break;
        }}
    return dayOfYear;
}

/**
 * Compute the day of the week for a valid date  
 * 
 * @param   year    int (>= 1900 and <= 2100)
 * @param   month   int (range 1-12)
 * @param   day     int (range 1-numDays(year, month))
 * @return  String  the day of the week
 */        
public String dayOfWeek(int year, int month, int day, String t){
    int m=month;
    int y=year;
    int d=day;
    if (month > 3){
        m += 12;
        y -= 1;
    }
    int y0 = y - (14 - m) / 12;
    int x = y0 + y0/4 - y0/100 + y0/400;
    int m0 = m + 12 * ((14 - m) / 12) - 2;
    int dayOfWeek = (d + x + (31*m0)/12) % 7;

    switch (dayOfWeek) {
        case 0: 
        t = "Sunday";
        case 1:
        t = "Monday";
        case 2:
        t = "Tuesday";
        case 3:
        t = "Wednesday";
        case 4:
        t = "Thursday";
        case 5:
        t = "Friday";
        case 6:
        t = "Saturday";

    }
    return t;
}

}

Edit: Excuse me for the sloppy code, I'm taking a beginners computer science class. Thank you all for the responses!

If it's a method then you should write MyCalendar.dayOfWeek() and MyCalendar.dayOfYear(), shouldn't you? If they are variables then check if they are public in MyCalendar.

Edit: Also you probably want to do something like test1.dayOfWeek() since you created instance of MyCalendar. As someone wrote in a comment, it would be better if you showed us MyCalendar class as well.

I don't know how your MyCalender class looks like but I am pretty sure you don't have a static variable dayOfWeek in it. You probably need to use an object of that class.

System.out.println("Day of that day in its week: "+ test1.dayOfWeek(year, month, day));
System.out.println("Day of the date in its year: "+ test1.dayOfYear(year, month, day));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM