验证整数

问题描述 投票:2回答:1

这是一个程序,允许用户制定高中课程表。我想在我的String方法中验证一个整数作为高中班级数字。这是带有参数的方法的名称。

public static String addClass(String name, String day, String momentOfDay, int group){

用户必须输入整数作为学校课程编号的值。该数字必须根据上课的日期以一个特定的数字开头。下表说明了所需的验证

上课日|有效组


[星期一|组的第一个数字必须以1开头(例如10、14 ...)


[星期二|该组的第一个数字必须以2开头(例如20、22 ...)______________________________________________________________________________星期三|组的第一个数字必须以3开头(例如30、31 ...)______________________________________________________________________________星期四|该组的第一个数字必须以4开头(例如40、31 ...)______________________________________________________________________________星期五|组的第一个数字必须以5开头(例如50、56 ...)

这是输出的外观(粗体字是用户输入的值):

**********************
ADD CLASS TO SCHEDULE 
**********************

Name of class : **INF1120**
Day of class : **Monday**
Moment of the day of the class : **PM**
Group of class : **12**

我正在使用扫描仪,以允许用户输入所需的整数。我完成了班级的名称,白天和一天中的时刻。

但是,我很难根据表中的日期来验证组整数的第一个数字。这是我的代码:

  import java.util.Scanner;

public class schedule {

    public static String addClass(String name, String day, String momentOfDay, int group) {
 Scanner keyboard = new Scanner(System.in);

System.out.print("day of class: ");

        day = keyboard.nextLine();

        if( day != "monday" || day != "tuesday" || day != "wednesday"
                || day != "thursday" || day != "friday" ) {
            System.out.print("Error, the day has to be either : monday, tuesday, wednesday, thursday, or friday...");
        }   
        else if(day = "monday" || day = "tuesday" || day = "wednesday"
                || day = "thursday" || day = "friday" ) {

        return day;
        }    


System.out.print("Moment of day: ");

            momentOfDay = keyboard.nextLine();

            if(momentOfDay != "am" || momentOfDay != "pm" || momentOfDay != "night") {
                System.out.print("Error, the moment of the day has to be : am, pm, or evening...");

            }
            else if(momentOfDay == "am" || momentOfDay == "pm" || momentOfDay == "evening") {

                return momentOfDay;
            }
                System.out.print("Class group");

                group = keyboard.nextInt();

                while(day == "monday" || day == "tuesday" || day == "wednesday"
                || day == "thursday" || day == "friday"){

                   if (String.valueOf(Math.abs(int(group)).charAt(0) == 1){
                           return group;  
             }    
                else {
                       System.out.print("Error, group number is invalid");
         }   
    }
}
}

但是,由于返回值不能是必需的int,因此不会编译。这是错误。

   Type mismatch: cannot convert from int to String

它是要求我将返回类型更改为int或将组的类型更改为String。

是否应该更改参数中组的类型?我做错了什么?

我试图研究this link中的方法,但似乎无法弄清楚。

java methods
1个回答
0
投票

当我复制您发布的类schedule的代码时,此行出现编译错误:

if (String.valueOf(Math.abs(int(group)).charAt(0) == 1){

int应该被删除。 group是方法addClass()的参数,并且是int。因此,代码行应为:

if (String.valueOf(Math.abs(group)).charAt(0) == 1){

校正该行之后,其后的行会导致编译错误。该行是:

return group;

方法addClass()被声明为返回String,但groupint。因此该行应更改为:

return String.valueOf(group);

更正了这一行代码后,我又遇到了另一个编译错误,即该方法未返回值。这是方法while中的addClass()循环:

while (day == "monday" || day == "tuesday" || day == "wednesday" || day == "thursday"
            || day == "friday") {

如果day是“星期日”,则循环终止。 return循环之后需要有一个while语句。

但是即使修复了所有编译错误,由于逻辑错误,您的代码也将无法工作。我只是向您展示了while循环中的那些错误之一。同样,此if语句不会执行您想要的操作。

if (day != "monday" || day != "tuesday" || day != "wednesday" || day != "thursday"
            || day != "friday")

除了您需要使用方法equals()检查两个字符串是否相等这一事实之外,如果day为“星期二”,则第一个条件,即day != "monday"为true。如果要确保用户输入有效日期,则需要以下内容:

if ("monday".equals(day) ||
    "tuesday".equals(day) ||
    "wednesday".equals(day) ||
    "thursday".equals(day) ||
    "friday".equals(day)) {
    return day;
}
else {
    System.out.print(
                    "Error, the day has to be either : monday, tuesday, wednesday, thursday, or friday...");
}

如果daymomentOfDaygroup都是方法addClass()的参数,为什么要求用户在方法addClass()中输入这些值?另外,该方法中永远不会使用其他方法参数name

我认为您需要创建三种单独的方法。一个从用户那里获取day,另一个从用户那里获取momentOfDay,另一个从用户那里获取group

[我建议您阅读Simon Harrer,JörgLenhard,Linus Dietz的著作Java by Comparison

© www.soinside.com 2019 - 2024. All rights reserved.