2011-11-12 3 views
1

내가 할 노력하고있어입니다() 메소드와 다차원 배열 같음. 사용자가 코스 이름 (예 : "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 메소드를 할 노력하고있어 있지만 그것을 알아낼 수 없습니다. 도와 줘서 고마워.

+0

무엇이 실제로 잘못됩니까? – Egor

+0

나는이 질문에 '숙제'라고 태그를 달았습니다. 분명히 ... – home

+1

부수적으로,'sub' 변수가 중복되어 제거 될 수있는 것처럼 보입니다. -1 (while (sub> = 0) 루프가 완료된 후) -1 값이 할당되고 다시 사용되지 않습니다. – matsev

답변

0

2 차원 배열 (arr)에서 액세스하려는 인덱스의 행과 열 (arr [row] [column])을 지정해야합니다. 매번 그래서 당신이 필요로하는 다음과 같습니다

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

당신은 오히려 베어 classNames[0]보다 classNames[0][0]이 필요합니다.

하지만 실제로는 2 차원 배열을 사용해서는 안됩니다. Map<String, String>을 사용하여 코스 이름에서 회의 시간으로 매핑하거나 코스 이름과 모임 시간 (및 기타 필요한 정보)이 모두 포함 된 작은 Course 클래스를 만들고 Map<String, Course>을 사용해야합니다. 코스 이름에서 Course의 인스턴스로 매핑 할 수 있습니다.

0

모든 Java 객체는 toString() 메소드를 갖는 java.lang.Object에서 상속받습니다. 개체의 String을 반환합니다. 모든 클래스가이를 오버라이드하여 새로운 toString()이 바람직한 문자열을 반환합니다. 그러나 기본적으로이 객체의 런타임 코드를 반환합니다.

모두 classNames[0]은 String으로 변환됩니다. 나는 당신의 의혹을 파악합니까?

하지만 여기에 오류가 있습니다

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

당신은 classNames[2]이 없습니다.

0

StringString[]을 이렇게 비교할 수 없습니다. 모든 요소를 ​​반복해야합니다.

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

키 - 값으로 Map<String, String>을 사용해야하며 코드는 간단합니다. 또한 String 상수가 왼쪽에있는 경우 "Constant string".equals(var)을 사용하면 NullPointerException이 발생하지 않습니다.

0

등호는 대소 문자를 구분합니다. equalsIgnoreCase를 사용해보세요. 또한 trim()을 사용하여 문자열을 잘라내어 공백이 없도록하십시오.