使用子字符串将数字输入与字符串相关联?

时间:2014-06-27 02:39:18

标签: java

我必须按照这些指南编写程序。我不知道我在做什么。我已经尝试过它,但似乎无法弄清楚如何让输入与子字符串相关联。

编写一个程序,将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,并将其与该月的子字符串相关联。

1 个答案:

答案 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);
}