字符串的值为整数?

时间:2016-01-29 00:25:51

标签: java string integer

首先,我是初学程序员,只有大约7周的编程经验。其次,这是一项家庭作业。这是我被困住的地方。

String curDay;
String curDaylow;
int sunday;
int monday;
int tuesday;
int wednesday;
int thursday;
int friday;
int saturday;
sunday = 0;
monday = 1;
tuesday = 2;
wednesday = 3;
thursday = 4;
friday = 5;
saturday = 6;
int dayNum;

curDay = console.next();
curDaylow = curDay.toLowerCase();
dayNum = valueOf.curDaylow;

我要做的是让变量dayNum等于字符串的值。例。如果用户进入星期一,则程序将其减少到全部小写星期一,然后dayNum应该= 1.我已经将Sun-Sat声明为值INT并且每个实例都以SUN = 0开始并向下移动到SAT = 6.

由于这是家庭作业,我不希望有人为我这样做,但也许可以推动我到哪里学习如何实现这一目标。或者也许告诉我这个操作会被调用,所以我知道要研究它。 感谢。

3 个答案:

答案 0 :(得分:2)

enum Day {
    sunday(0),monday(1),tuesday(2),wednesday(3),thursday(4),
    friday(5),saturday(6);

    private final int value;

    Day(int value) {
        this.value = value;
    }

    int getValue() {
        return value;
    }
}

现在你可以使用:

Day m = Day.valueOf(curDay.toLowerCase());
int dayNum = m.getValue();

答案 1 :(得分:2)

抱歉,但你做错了。

首先,你解释错误的事情。你说你想要“dayNum等于字符串的值”,但是在例子中“dayNum应该= 1” - 其中1不是“字符串的值”。我理解你的意思,但解释错误。虽然这不是很重要。

重要的是你期望Java没有一定程度的元编程。也就是说,您希望对局部变量的名称进行操作。当某个其他局部变量的值为“星期一”时,程序应读取局部变量int monday的值。 Java没有那个。如果int monday是一个类的字段而不是一个局部变量,你可以用反射做到这一点,但是这里出现了另一个问题 - 你做错了。

有很多方法可以实现这一点,但你当然不应该做的是变量,其名称是几周的名称。

执行此操作的一种方法是使用包含天数(小写)的字符串数组:

String[] days = new String[] { 'sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday' }

然后你可以修剪和小写你的输入 - curDay = console.next().trim().toLowerCase() - 然后循环数组以找到匹配的值,并且值匹配的索引将是答案:

int dayNum = -1;
for(int i=0; i<days.length; i++) {
    if(days[i].equals(curDay) {
        dayNum = i;
        break;
    }
}

另一种解决方案更容易实现,工作更快,但也许更难理解是使用Map(最难理解的部分是Map实现如何工作的内部 - 但你并不一定需要这个使用它们:

Map<String, Integer> daysOfWeek = new HashMap<String, Integer>();
daysOfWeek.put("sunday", 0);
...
daysOfWeek.put("saturday", 6);

String curDay = console.next().trim().toLowerCase();
int dayNum = daysOfWeek.get(curDay); // Will throw null-pointer exception if value of curDay is not in the map.

执行此操作的正确方法是使用Java API来操作日期 - java.util.Calendar(嗯,而不是java.text.DateFormatSymbols) - 获取特定区域设置的星期几的名称。请参阅此答案,了解如何执行此操作: In Java, how to get strings of days of week (Sun, Mon, ..., Sat) with system's default Locale (language)

答案 2 :(得分:0)

Buddy你做了一些错误,就像你已经将int变量定义为星期日,星期一,星期二......当用户输入字符串值时,你期望从该字符串中提取整数值。不可能你可以做的是使用switch case,如果你使用java 1.7,你可以将你的输入字符串传递给那个开关然后你可以定义 case“sunday”:dayNum = 0; break ;同样输入所有日期以防万一。希望能帮助到你。

int dayNum;
    String curDay;
    String curDaylow;
    curDay = console.next();
    curDaylow = curDay.toLowerCase();
    switch (curDaylow) {
    case "sunday":
        dayNum = 0;
        break;
    case "monday":
        dayNum = 1;
        break;
    // Similarly write all cases for remaining days
    }