2016-05-05 8 views
0

Вот алгоритм, но у меня возникли трудности с процессом расшифровывать :Поиск массив для курса

set flag equal to false 
set index equal to 0 

WHILE(index is less than number of courses in array AND flag == false) 
    extract substring 
    IF(string1.equals(string2) == true) THEN //course found 
     set flag to true 
    ELSE 
     increment index 
    END IF 
END WHILE 

IF flag == false THEN 
    display message the course name was not found 
ELSE 
    course name found at position index 
END IF 

А вот мой код:

public void searchCourse(String courseName) 
{ 
    int index; 
    String extract; 
    boolean notFound = false; 
    index = 0; 
    while(index < SIZE) 
    { 
     extract = schedule[index].charAt(0,6); 
     if (courseName == extract){ 

     } 
     else { 
      index ++; 
     } 
     if (notFound == false){ 
      System.out.println("Course Not Found"); 
     } 
     else{ 
      System.out.println("Course Found at: " + index); 
     } 
    } 
}  
+0

Где вы обновляя значение NotFound? В вашем коде всегда установлено значение false, и оно никогда не изменяется. –

+0

Является '' '' '' '' '' '' '' String [] '' '? '' 'charAt''' не имеет перегрузки, которая принимает 2 целых числа. –

+0

Также смотрите: [Как сравнить строки в Java?] (Http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) –

ответ

2

Псевдокод кажется излишне сложным.

Этого будет достаточно:

public void searchCourse(String courseName) { 
    for(int i = 0; i < schedule.length; i++) { 
     if(courseName.equals(schedule[i].substring(0, 6))) { 
      System.out.println("Course Found at: " + i); 
      return; 
     } 
    } 

    System.out.println("Course Not Found"); 
} 

Несмотря на это, правильный перевод будет выглядеть следующим образом:

public void searchCourse(String courseName) {  
    boolean flag = false; 
    int index = 0; 

    while(index < schedule.length && !flag) { 
     String extract = schedule[index].substring(0,6); 
     if (courseName.equals(extract)){ 
      flag = true; 
     } else { 
      index++; 
     } 
    } 

    if (!flag){ 
     System.out.println("Course Not Found"); 
    } else { 
     System.out.println("Course Found at: " + index); 
    } 
} 
+0

Благодарим вас за разъяснение @ Джон Винни. – Cuse

1

Ваш код должен быть похож как псевдокод.

  • В псевдокоде цикл while имеет два условия, ваш код имеет только один. Вы используете & & в java, чтобы сделать AND, поэтому он будет && ! notFound
  • В вашем первом условии if вы должны установить флаг в true. Это просто притворство notFound = true

Btw, флаг должен быть found вместо notFound, но это ничего не меняет, кроме, может быть читаемости.

+0

Вот что меня путает: как написать цикл while с двумя условиями, вы используете a или a; для разделения индекса Cuse

+0

Я обновил свой ответ, поэтому у вас есть все необходимое для выполнения двух модификаций вашего кода. – FiReTiTi

+0

Спасибо @FiReTiTi – Cuse

0

Вот правильный код

public void searchCourse(String courseName) 
{ 
    int index; 
    String extract; 
    boolean notFound = false; 
    index = 0; 
    while(index < SIZE) 
    { 
     notFound = false; 
     extract = schedule[index].charAt(0,6); 
     if (courseName == extract){ 
       notFound = true; 
     }   
     if (notFound == false){ 
      System.out.println("Course Not Found"); 
     } 
     else{ 
      System.out.println("Course Found at: " + index); 
     } 
     index ++; 
    } 
} 
+0

Вы пропустили тест в цикле while. Таким образом, ваш код проходит через весь массив, а не останавливается как можно скорее. – FiReTiTi

+0

И индекс должен быть увеличен, только если строка не найдена. Таким образом, ваш индекс будет больше (всего около 1) от того, каким он должен быть. – FiReTiTi