这是一个程序,允许用户制定高中课程表。我想在我的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中的方法,但似乎无法弄清楚。
当我复制您发布的类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
,但group
是int
。因此该行应更改为:
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...");
}
如果day
和momentOfDay
和group
都是方法addClass()
的参数,为什么要求用户在方法addClass()
中输入这些值?另外,该方法中永远不会使用其他方法参数name
。
我认为您需要创建三种单独的方法。一个从用户那里获取day
,另一个从用户那里获取momentOfDay
,另一个从用户那里获取group
。
[我建议您阅读Simon Harrer,JörgLenhard,Linus Dietz的著作Java by Comparison