Java String Equals()方法和多维数组

时间:2011-11-12 17:22:59

标签: java multidimensional-array equals

以下是我要做的事情:

编写一个应用程序,该应用程序在二维数组中存储至少四个不同的课程名称和会议日期和时间。允许用户输入课程名称(例如" CS 110")并显示课程的日期和课程的持续时间(例如Th 3:30)。如果课程不存在,则显示错误消息。

这是我的代码:

import javax.swing.JOptionPane;
import java.util.Scanner;

public class Schedule {
    public static void main(String[] args) {
        //declare variables and arrays
        final int NUM_RANGES = 3;
        int sub = NUM_RANGES - 1;

        String[][] classNames = {
            {"CS 2401", "TS 5697", "UO 7896"},
            {"Tue 8:30", "Thu 7:30", "Fri 9:15" }
        };

        //get input
        String classInput = JOptionPane.showInputDialog("Please input a class name: ");

        //match to output and print
        while(sub >= 0)
            --sub;

        if (classInput.equals(classNames[0])) {
            JOptionPane.showMessageDialog(null, "Class time is: " + classNames[0][0]);
            System.exit(0);
        } else if (classInput.equals("TS 5697")) {
            JOptionPane.showMessageDialog(null, "Class time is: " + classNames[1][1]);
            System.exit(0);
        } else if (classInput.equals("UO 7896")) {
            JOptionPane.showMessageDialog(null, "Class time is: " + classNames[2][2]);
            System.exit(0);
        } else {
            JOptionPane.showMessageDialog(null, "Please enter a valid class     name.");
            System.exit(0);
        }
    }
}

正如您所看到的,我尝试在第一个IF上尝试等于equals方法,但无法弄明白。谢谢你的帮助。

5 个答案:

答案 0 :(得分:1)

您需要classNames[0][0]而不是classNames[0]

但实际上,你不应该为此使用二维数组;您应该使用Map<String, String>从课程名称映射到会议时间,或者更好的是,创建一个包含课程名称和会议时间(以及其他任何内容)的小Course课程必要信息),并使用Map<String, Course>从课程名称映射到Course的实例。

答案 1 :(得分:0)

在2d数组(arr)中,您必须指定要访问的索引的行和列(arr [row] [column])。每次。所以看起来你需要:

if (classInput.equals(classNames[0][0]))

答案 2 :(得分:0)

每个Java对象都继承自具有toString()方法的java.lang.Object。返回对象的String。每个类都可以覆盖它,因此新的toString()将返回一个理想的字符串。但是作为默认值,它会返回此Object的一些运行时代码。

总而言之,您的classNames[0]会转换为字符串。我是否理解你的怀疑?

但你在这里有一个错误:

else if (classInput.equals("UO 7896")) {
    JOptionPane.showMessageDialog(null, "Class time is: " + classNames[2][2]);
    System.exit(0); }

您没有classNames[2]

答案 3 :(得分:0)

您无法通过这种方式将StringString[]进行比较。它要求您遍历所有元素。

for(String className : classNames[0]) {
   if(className.equals(classInput)) {
      //found ... do something
   }
}

您应该使用Map<String, String>作为键值,然后代码就会很简单。此外,如果您有String个常量,则在等于"Constant string".equals(var)的左侧使用它们,这可以保证NullPointerException永远不会发生。

答案 4 :(得分:0)

Hey equals是区分大小写的尝试使用equalsIgnoreCase。还可以使用trim()修剪字符串,使其没有空格。