Java String Equals () метод и многомерный массив - PullRequest
1 голос
/ 12 ноября 2011

Вот что я пытаюсь сделать:

Напишите приложение, которое хранит как минимум четыре разных названия курса, а также дни и время встречи в двумерном массиве.Разрешите пользователю вводить название курса (например, «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);
        }
    }
}

Как видите, я пытаюсь выполнить метод equals для первого IF, но не могу понять это.Спасибо за вашу помощь.

Ответы [ 5 ]

1 голос
/ 12 ноября 2011

Вам нужно classNames[0][0], а не голый classNames[0].

Но на самом деле вам не следует использовать двумерный массив для этого;вы должны либо использовать Map<String, String> для отображения названий курсов на время встреч, или, что еще лучше, создать небольшой класс Course, который содержит как название курса, так и время встречи (и любую другую необходимую информацию)и используйте Map<String, Course> для сопоставления названий курсов с экземплярами Course.

0 голосов
/ 12 ноября 2011

Эй, равно, чувствительна к регистру, попробуйте использовать equalsIgnoreCase. Также используйте trim () для обрезки строки, чтобы в ней не было пробелов.

0 голосов
/ 12 ноября 2011

Вы не можете сравнить String с String[] таким образом. Требуется, чтобы вы перебрали все элементы.

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

Вы должны использовать Map<String, String> для Key-Value, тогда код будет простым. Также, если у вас есть String константы, используйте их слева от равных "Constant string".equals(var), это гарантирует, что NullPointerException никогда не произойдет.

0 голосов
/ 12 ноября 2011

Каждый объект Java наследуется от java.lang.Object, который имеет метод toString(). Который возвращает String объекта. каждый класс может переопределить его, поэтому новый toString() вернет желаемую строку. Но по умолчанию он возвращает некоторый код времени выполнения этого объекта.

В целом ваш classNames[0] преобразуется в строку. Я улавливаю ваши сомнения?

Но у вас есть ошибка здесь:

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

У вас нет classNames[2].

0 голосов
/ 12 ноября 2011

В двумерном массиве (arr) вы должны указать строку и столбец индекса, к которому хотите получить доступ (arr [row] [column]). Каждый раз. Похоже, вам нужно:

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