Java 编程任务月';年度最佳
我正在进行一些编程练习,这一次让我忙了很长一段时间。它说: 您的工作是将数字1,2,3,…,12转换为相应的月份名称一月、二月、三月,十二月。实现一个类Month,其构造函数参数为月数,其getName方法返回月名。提示:制作一个很长的字符串“一月-二月-三月…”,在其中添加空格,使每个月的名称具有相同的长度。然后使用子字符串提取所需月份 不幸的是,我并不是每个月都有相同数量的空间,但如果我仔细考虑这些数字的话,这应该不会是一个问题Java 编程任务月';年度最佳,java,substring,variable-assignment,Java,Substring,Variable Assignment,我正在进行一些编程练习,这一次让我忙了很长一段时间。它说: 您的工作是将数字1,2,3,…,12转换为相应的月份名称一月、二月、三月,十二月。实现一个类Month,其构造函数参数为月数,其getName方法返回月名。提示:制作一个很长的字符串“一月-二月-三月…”,在其中添加空格,使每个月的名称具有相同的长度。然后使用子字符串提取所需月份 不幸的是,我并不是每个月都有相同数量的空间,但如果我仔细考虑这些数字的话,这应该不会是一个问题 目前我还没有使用switch语句。我将在不久的将来了解它。让这
目前我还没有使用switch语句。我将在不久的将来了解它。让这个赋值有点棘手的是,我不能使用数组、开关、if/for循环。请记住,我必须遵循课文中的提示。我不能简单地使用文本,但需要生成1个大字符串并返回月份的子字符串 问题是:如何将数字连接到特定的子字符串?谢谢你的帮助 这是我的代码:
public class Month
{
private int number;
private String month;
public Month(int theNumber)
{
number = theNumber;
}
public String getName()
{
String month = "January February March April May June July August September October November December";
String january = month.substring(0,7);//January
String february = month.substring(8,16);//February
String march = month.substring(17,22);//March
String april = month.substring(23,28);//April
String may = month.substring(29,32);//May
String june = month.substring(33,37);//June
String july = month.substring(38,42);//July
String august = month.substring(43,49);//August
String september = month.substring(50,59);//September
String october = month.substring(60,67);//October
String november = month.substring(68,76);//November
String december = month.substring(77,84);//December
return month;
}
}
如果将月份名称存储在单独的对象(字符串)中,则不需要行:
String month = "January February March April May June July August September October November December";
要返回月份名称,只需使用switch语句:{
switch(number){
case 1: return january;
case 2: return february;
//etc
default : throw new RuntimeException("Invalid month number: " + number);
}
编辑:正如nhgrif
建议的那样,您可以简单地返回字符串文本:返回“一月”
EDIT2:您可以为每个月名称使用固定数量的字符:
String months=“一月| | | | | | | |……”
其中|
是sapace,因此所有名称的长度相等。然后,要获取月份名称,可以使用:
String name=months.substring(number*nameLength,number*nameLength+nameLength).trim();
如果将月份名称存储在单独的对象(字符串)中,则不需要行:
String month = "January February March April May June July August September October November December";
要返回月份名称,只需使用switch语句:{
switch(number){
case 1: return january;
case 2: return february;
//etc
default : throw new RuntimeException("Invalid month number: " + number);
}
编辑:正如nhgrif
建议的那样,您可以简单地返回字符串文本:返回“一月”
EDIT2:您可以为每个月名称使用固定数量的字符:
String months=“一月| | | | | | | |……”
其中|
是sapace,因此所有名称的长度相等。然后,要获取月份名称,可以使用:
String name=months.substring(number*nameLength,number*nameLength+nameLength).trim();
但是现在您应该修改您的构造函数
public Month(int m) {
number = m;
month = // logic to set the value of the string variable month, whether you use my array or a switch or whatever
}
理想情况下,您的月份(int m)
构造函数应该只调用一个setter
,该setter在同一方法调用中同时设置了number
和month
。在该setter
中直接获取该逻辑,然后在需要设置/更改月号/名称的任何时候调用该setter。这将保持月号和月名同步(应该这样做)
这里的要点是,您的getName()
方法不应超过returnmonth;
和month
应该在这个类的其他地方设置和维护
注意:作为最后一个,最后一个注意事项…如果你真的,真的必须使用子字符串(我不打算写那段代码,因为在这种情况下,它实际上是不切实际的,只对做作业有用…)我将计数到第n个大写字母,并将该索引中的子字符串返回到其后第一个空格字符的索引中
区分大写字母和小写字母很容易,而且每个月份都没有空格。这是一个以空格分隔的月份名称索引
把它想象成“jfmamajaasnd”。想要第8个月吗?“jfmamaja”。你找到了第8个大写字母,它将有任何索引。因此,返回该索引和在该字符后找到的第一个空格的索引之间的字符。在这种情况下,你将返回“August”
但是现在您应该修改您的构造函数
public Month(int m) {
number = m;
month = // logic to set the value of the string variable month, whether you use my array or a switch or whatever
}
理想情况下,您的月份(int m)
构造函数应该只调用一个setter
,该setter在同一方法调用中同时设置了number
和month
。在该setter
中直接获取该逻辑,然后在需要设置/更改月号/名称的任何时候调用该setter。这将保持月号和月名同步(应该这样做)
这里的要点是,您的getName()
方法不应超过returnmonth;
和month
应该在这个类的其他地方设置和维护
注意:作为最后一个,最后一个注意事项…如果你真的,真的必须使用子字符串(我不打算写那段代码,因为在这种情况下,它实际上是不切实际的,只对做作业有用…)我将计数到第n个大写字母,并将该索引中的子字符串返回到其后第一个空格字符的索引中
区分大写字母和小写字母很容易,而且每个月份都没有空格。这是一个以空格分隔的月份名称索引
把它想象成“jfmamajaasnd”。想要第8个月吗?“jfmamaja”。你找到了第8个大写字母,它将有任何索引。因此,返回该索引和在该字符后找到的第一个空格的索引之间的字符。在这种情况下,你将返回“August”.由于类的方法不是静态的,因此我假设每个
月都有实例,您将其作为构造函数参数提供,即每个月的数量
如果您还没有学习JavaHashMap
类,那么这将是一个很好的起点。我鼓励您学习如何使用它以及它是如何工作的
本质上,HashMap
映射键/值对。您可以将其视为字典。每个单词都是键,与之关联的值就是定义。例如,“computer”一词是进入
public class Month {
private static final String ALLMONTHS = "January February March April May June July August September October November December";
private String myMonth;
/**
* Constructor for objects of class Month
*/
public Month(int monthNumber) {
switch(monthNumber) {
case 1: myMonth = ALLMONTHS.substring(0,7); break;
case 2: myMonth = ALLMONTHS..substring(8,16); break;
//
// Continue cases 3,4,5...default
//
}
}
public String getName() {
return myMonth;
}
number = 0 = January
number = 1 = February
number = 11 = December
substring(number*9, number*9+9)