Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编程任务月';年度最佳_Java_Substring_Variable Assignment - Fatal编程技术网

Java 编程任务月';年度最佳

Java 编程任务月';年度最佳,java,substring,variable-assignment,Java,Substring,Variable Assignment,我正在进行一些编程练习,这一次让我忙了很长一段时间。它说: 您的工作是将数字1,2,3,…,12转换为相应的月份名称一月、二月、三月,十二月。实现一个类Month,其构造函数参数为月数,其getName方法返回月名。提示:制作一个很长的字符串“一月-二月-三月…”,在其中添加空格,使每个月的名称具有相同的长度。然后使用子字符串提取所需月份 不幸的是,我并不是每个月都有相同数量的空间,但如果我仔细考虑这些数字的话,这应该不会是一个问题 目前我还没有使用switch语句。我将在不久的将来了解它。让这

我正在进行一些编程练习,这一次让我忙了很长一段时间。它说:

您的工作是将数字1,2,3,…,12转换为相应的月份名称一月、二月、三月,十二月。实现一个类Month,其构造函数参数为月数,其getName方法返回月名。提示:制作一个很长的字符串“一月-二月-三月…”,在其中添加空格,使每个月的名称具有相同的长度。然后使用子字符串提取所需月份

不幸的是,我并不是每个月都有相同数量的空间,但如果我仔细考虑这些数字的话,这应该不会是一个问题


目前我还没有使用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”.

由于类的方法不是静态的,因此我假设每个
月都有实例,您将其作为构造函数参数提供,即每个月的数量

如果您还没有学习Java
HashMap
类,那么这将是一个很好的起点。我鼓励您学习如何使用它以及它是如何工作的

本质上,
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)