我必须按照这些指南编写程序。我不知道我在做什么。我已经尝试过它,但似乎无法弄清楚如何让输入与子字符串相关联。
编写一个程序,将1,2,3 ... 12转换为1月,2月的相应月份...制作一个很长的字符串" 1月2月3月......"在其中添加空格,使每个月的名称具有相同的长度。然后使用子字符串来提取所需的月份。
有人可以就此给我一些指导吗?
我们还没有使用数组或if语句,所以我不相信我应该使用其中的任何一个。 -
好的,到目前为止我已经拥有了。
public class MonthIdentifier
{
private String monthNames = "January February March April May June July August September October November December ";
private int monthNumber;
public MonthIdentifier(int month)
{
month = monthNumber;
}
public String getMonth()
{
int monthNameLength = 10;
int end = monthNumber * monthNameLength;
int start = end - monthNameLength;
return monthNames.substring(start, end);
}
}
这是主要的
import java.util.Scanner;
public class ChooseMonth
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.print("Enter Number 1-12: ");
int month = input.nextInt();
MonthIdentifier newMonth = new MonthIdentifier(month);
newMonth.getMonth();
String monthName = newMonth.getMonth();
System.out.println(month + " : " + monthName);
}
}
我已将代码更新到目前为止的内容。我收到一个错误:
线程中的异常主字符串索引超出范围:-10
此外,我忘了提及我必须接受用户输入1-12,并将其与该月的子字符串相关联。
答案 0 :(得分:1)
你非常接近,让我们带你的String monthName
并重命名monthNames
。然后,我们可以在mm
1 - 12
之间获得任意一个月(monthNames
),
int monthNameLength = 10
int end = mm * monthNameLength; // the length is constant, so we have 12 equal parts.
int start = end - monthNameLength;
return monthNames.substring(start, end);
我将留给您添加适当的错误处理并将其解压缩为一个不错的方法。请注意,您实际上只需要传入int
。
修改强>
让我们getMonth()
静止并传入monthNumber
并使用范围检查,
public static String getMonth(int monthNumber)
{
if (monthNumber < 1 || monthNumber > 12) {
return "ERROR " + monthNumber + " is less then 1 (or greater then 12)";
}
int monthNameLength = 10;
int end = monthNumber * monthNameLength;
int start = end - monthNameLength;
return monthNames.substring(start, end);
}