【问题标题】:error: class, interface, or enum expected [closed]错误:需要类、接口或枚举 [关闭]
【发布时间】:2014-08-17 23:59:46
【问题描述】:

我有以下代码,我正在尝试为我所在班级的一个项目工作。我还将包括要求

设计并实现在程序中实现星期几的 Day 类。类 Day 应该存储日期,例如 Sun 代表星期日。该程序应该能够对 Day 类型的对象执行以下操作:

A.确定日期。

B.打印当天。

C.返回当天。

D.次日返回。

E.返回前一天。

F。通过将某些天添加到当前日期来计算并返回日期。例如,如果当前日期是星期一,我们添加四天,则要返回的日期是星期五。同样,如果今天是星期二,我们加上 13 天,则返回的日期是星期一。

G.添加适当的构造函数。

H.编写实现类 Day 操作的方法的定义,如 A 到 G 中定义的那样。

我。写一个程序来测试上课日的各种操作。

代码如下:

`import java.util.*;


class Day {
private int dayValue;
private static final int INVALID = -1;
public Day() { this.dayValue = INVALID; }
public Day(String day) { setDay(day); }
public Day(int day) { this.dayValue = (day<0 || day>6) ? INVALID : day; }
public void setDay(String day) {
    if(day.equals("sunday") || day.equals("Sun")) {
        this.dayValue = 0;
    } else if(day.equal("monday") || day.equals("Mon")) {
        this.dayValue = 1;
    } else if(day.equals("tuesday") || day.equals("Tues")) {
        this.dayValue = 2;
    } else if(day.equal("wednesday") || day.equals("Wed")) {
        this.dayValue = 3;
    } else if(day.equals("thursday") || day.equals("Thurs")) {
        this.dayValue = 4;
    } else if(day.equal("friday") || day.equals("Fri")) {
        this.dayValue = 5;
    } else if(day.equal("saturday") || day.equals("Sat")) {
        this.dayValue = 6;
    } else {
        this.dayValue = INVALID;
    }
}

public String getDay() {
    if (dayValue==0) { return "Sunday"; }
    if (dayValue==1) { return "Monday"; }
    if (dayValue==2) { return "Tuesday"; }
    if (dayValue==3) { return "Wednesday"; }
    if (dayValue==4) { return "Thursday"; }
    if (dayValue==5) { return "Friday"; }
    if (dayValue==6) { return "Saturday"; }

    return "\"I don't know what day it is!\"";

}
public void printDay() {
    System.out.println("When printing, your day is " + getDay()); //displays the day at the time of printing.
}
// Next Day
public String getNextDay()
  {
     // the compareTo() method allows us to set saturday as Sat, Sunday to Sun, etc
     if((day.compareTo("sunday") == 0) || (day.compareTo("Sun") == 0))
        return ("Monday");
     else if((day.compareTo("monday") == 0) || (day.compareTo("Mon") == 0))
        return ("Tuesday");
     else if((day.compareTo("tuesday") == 0) || (day.compareTo("Tue") == 0))
        return ("Wednesday");
     else if((day.compareTo("wednesday") == 0) || (day.compareTo("Wed") == 0))
        return ("Thursday");
     else if((day.compareTo("thursday") == 0) || (day.compareTo("Thu") == 0))
        return ("Friday");
     else if((day.compareTo("friday") == 0) || (day.compareTo("Fri") == 0))
        return ("Saturday");
     else if((day.compareTo("saturday") == 0) || (day.compareTo("Sat") == 0))
        return ("Sunday");
     else
        return ("\"I don't know what day it is!\"");
  }
  // Previous day
  public String getPreDay()
  {
     if((day.compareTo("sunday") == 0) || (day.compareTo("Sun") == 0))
        return ("Saturday");
     else if((day.compareTo("saturday") == 0) || (day.compareTo("Sat") == 0))
        return ("Friday");
     else if((day.compareTo("friday") == 0) || (day.compareTo("Fri") == 0))
        return ("Thursday");
     else if((day.compareTo("thursday") == 0) || (day.compareTo("Thu") == 0))
        return ("Wednesday");
     else if((day.compareTo("wednesday") == 0) || (day.compareTo("Wed") == 0))
        return ("Tuesday");
     else if((day.compareTo("tuesday") == 0) || (day.compareTo("Tue") == 0))
        return ("Monday");
     else if((day.compareTo("monday") == 0) || (day.compareTo("Mon") == 0))
        return ("Sunday");
        return ("\"I don't know what day it is!\"");
  }
public Day calcDay(int offset) { /* your code here */ }
// extra good for printin
public String toString() { return getDay(); }
}


  // main execution point
 public static void main (String args[]) {
  {
   // One of its weakness is the case sensitive: sun, Sunday, sunday, SuNdAy...
   // need more codes to avoid this case sensitiveness...

   // instantiate testday object of type MyDay class
     // with "Sun" as initial value....
     Day testday = new Day("Sun");
     // prompt user to set his/her day
     System.out.print("Enter day to set your day: ");
     // read and store user's day
     String storeday = readinput.nextLine().toLowerCase(); //Changes input into all lowercase to deal with variations
     // invoke setDay() method to set a day defined by user
     testday.setDay(storeday);
     // invoke getDay() method to get a day
     System.out.println("Your day is " + testday.getDay());
     // test printing by invoking printDay() method
     testday.printDay();
     // invoke getPreDay() method to get the previous day
     System.out.println("Your previous day is " + testday.getPreDay());
     // invoke getNextDay() method to get the next day
     System.out.println("Your next day is " + testday.getNextDay());

     System.out.println("How many Days would you like to add? " + testday.calcNextDay());
  }


}`

我收到以下错误:

Day.java:92: error: class, interface, or enum expected
     public static void main () {

                   ^
Day.java:101: error: class, interface, or enum expected
         System.out.print("Enter day to set your day: ");

         ^
Day.java:103: error: class, interface, or enum expected
         String storeday = readinput.nextLine().toLowerCase(); //Changes input into all lowercase to deal with variations
         ^
Day.java:105: error: class, interface, or enum expected
         testday.setDay(storeday);
         ^
Day.java:107: error: class, interface, or enum expected
         System.out.println("Your day is " + testday.getDay());
         ^
Day.java:109: error: class, interface, or enum expected
         testday.printDay();
         ^
Day.java:111: error: class, interface, or enum expected
         System.out.println("Your previous day is " + testday.getPreDay());
         ^
Day.java:113: error: class, interface, or enum expected
         System.out.println("Your next day is " + testday.getNextDay());
         ^
Day.java:115: error: class, interface, or enum expected
         System.out.println("How many Days would you like to add? " + testday.calcNextDay());
         ^
Day.java:116: error: class, interface, or enum expected
      }
      ^
10 errors

原来我的代码是这样的

public class Day { static Scanner readinput = new Scanner(System.in);
String day; public Day(String day) { day = "Sunday"; } // set the day public void setDay(String theDay) { day = theDay; } public String getDay() { return day; } public void printDay() { System.out.println("When printing, your day is " + day); }

【问题讨论】:

  • 您的代码存在重大问题
  • 你想做什么?你搞错了
  • 一些问题:“day.equal”应该是“day.equals”。 getNextDay() 和 getPreDay() 方法可能需要字符串参数 day(类似于 setDay(String) 方法)?
  • 您遇到的第一个大错误是 main 需要在 Day 类中。在您的toString 定义下,有一行带有右花括号。这被编译器视为 Day 类的结尾,因此 main 是任何类之外的方法,这将导致大量编译时错误,不一定告诉你什么真正的问题是。先解决这个问题。 IE。摆脱那个花括号。
  • 对不起,无意贬低你或批评你,但你的代码和你的逻辑很乱

标签: java enums


【解决方案1】:

为什么不使用数组?

使用数组,您可以以更简洁和简单的方式处理事情。

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

String[] dayOfWeekLongNames = new String[] {
    "Sunday", "Monday", "Wednesday", "Thursday", "Friday", "Saturday"
};

然后,只需验证传入参数的值是否正确。

public void setDay(String dayOfWeek) {
    if (dayOfWeek == null || (0 < dayOfWeek.length() && dayOfWeek.trim().length() == 0))
        throw new IllegalArgumentException("dayOfWeek cannot be null or white space.");
    
    for (int i = 0; i < dayOfWeek.length(); i++)
        if (dayOfWeek.charAt(i).isDigit()) 
            throw new IllegalArgumentException("dayOfWeek cannot be numeric.");

    if (dayOfWeek.length() < 3) // for short names
        throw new IllegalArgumentException("dayOfWeek must be at least 3 characters long.");

    for (int i = 0; i < dayOfWeekShortNames.length && i < dayOfWeekLongNames.length; i++)
        if (dayOfWeekShortNames[i].toLowerCase() == dayOfWeek.ToLowerCase()
            || dayOfWeekLongNames[i].toLowerCase() == dayOfWeek.ToLowerCase()) {
            dayValue = i;
            return;
        }        

    throw new IllegalArgumentException(
        "Day of week: " + dayOfWeek + " could not be found.");
}

这只是一个简单的例子。

为什么不使用 Program 类?

与其只是随便写一个可能导致多个编译时错误的main() 方法,不如将你的main 方法定位在Program 类中,使其成为成员一个类,编译器不再抱怨。此外,这样做的好处是,至少在某种程度上,您的程序入口点在那里是显而易见的。这个Program 类应该只包含main() 方法。

public class Program {
    public static void main(String args[]) {
        // You code here...
    }
}

至于用户输入,可能使用Console 类...这是一个如何使用它的示例。

免责声明

我没有测试过这段代码,仅出于示例目的按原样提供。我不是 Java 专家,我竭尽全力提供帮助。

编辑

我没有使用数组,因为我想将值存储为字符串而不是索引。

事实上,您问题中的代码示例按照这一行将星期几存储在整数值中:

private int dayValue;

因此,当您设置日期时的分配如下:

public void setDay(String day) {
    if (day == "sunday" || day == "Sun")
        dayValue = 0;
    else if (day == "monday" || day == "Mon")
        dayValue = 1;
    ...
}

上面实际上以整数格式存储星期几,这将满足大多数将使用星期几的系统。另外,您不能保证用户输入的字符串的确切语法,因此即使您比较day == "sunday"day == "Sun",您也必须根据您在setDay() 中所期望的字符串调整您的大小写函数,在我看来没有意义。

这种行为的最常见做法是使用具有适当预期大小写的数组,然后将输入值与大写或小写值进行比较,输入和来自数组(只有这样才能保证完美匹​​配),然后你可以将索引存储在你的dayValue私有成员中。然后,当通过getDay() 函数检索星期几时,您只需编写一行代码即可确保您完美地工作,因为您在通过setDay() 方法设置输入时捕获了任何潜在错误。

public String getDay() { return dayOfWeekLongNames[dayValue]; }

您将获得先前设置的星期几的名称,而不必一遍又一遍地写if statements

【讨论】:

  • 我没有使用数组,因为我想将值存储为字符串而不是索引。
【解决方案2】:

解决问题的另一种方法是使用枚举来表示一周中的几天。这里提供了一个工作示例来展示总体思路:

public class Day
{
    enum DAY {
        MONDAY("Monday"), TUESDAY("Tuesday"), WEDNESDAY("Wednesday"), THURSDAY("Thursday"), FRIDAY("Friday"), SATURDAY(
            "Saturday"), SUNDAY("Sunday");

        public static DAY parse(final String value)
        {
            for (final DAY day : values())
            {
                if (day.description.equalsIgnoreCase(value) || day.description.substring(0, 3).equalsIgnoreCase(value))
                {
                    return day;
                }
            }
            return null;
        }

        private String description;

        private DAY(final String description)
        {
            this.description = description;
        }

        @Override
        public String toString()
        {
            return description;
        }
    }

    public static void main(final String args[])
    {
        Day myDay;

        myDay = new Day(DAY.SUNDAY);

        System.out.println(myDay);
        System.out.println(myDay.getPreviousDay());
        System.out.println(myDay.getNextDay());

        myDay = new Day("monday");

        System.out.println(myDay);
        System.out.println(myDay.getPreviousDay());
        System.out.println(myDay.getNextDay());

        myDay = new Day("wed");

        System.out.println(myDay);
        System.out.println(myDay.getPreviousDay());
        System.out.println(myDay.getNextDay());
    }

    private final DAY day;

    public Day(final DAY day)
    {
        this.day = day;
    }

    public Day(final String day)
    {
        this.day = DAY.parse(day);
    }

    public DAY getNextDay()
    {
        final DAY[] days = DAY.values();
        return days[(day.ordinal() + 1) % days.length];
    }

    public DAY getPreviousDay()
    {
        final DAY[] days = DAY.values();
        return days[((day.ordinal() - 1) + days.length) % days.length];
    }

    @Override
    public String toString()
    {
        return day.toString();
    }
}

【讨论】:

    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多