2017-02-21 54 views
0

Я программист первого года.Поиск массива для комбинации букв и цифр

Я пытался найти массив, в котором хранились четыре переменные с вводом.

Все примеры, которые я нашел, используют int и ищут число в списке.

Моя программа должна искать комбинацию букв и цифр. (Пример КС 2800)

import java.util.Scanner; 

public class courseInfo { 
    public static int courseInfo(int[] list, int key) { 

     Scanner input = new Scanner(System.in); 

     // Input course name 
     System.out.print("Enter course name: (Ex. COP 2800) "); 
     double courseInput = input.nextDouble(); 

     for (int i = 0; i < list.length; i++) { 
     if (key == list[i]) 
      return i; 

     } 
     return -1; 
     } 

     public static void main(String[] args) { 
     int[] list = {COP 2800, PSY 1012, EVR 2001, COP 1000}; 
     System.out.println(linearSearch(list, courseInput)); 
    } 
} 

Пожалуйста, используйте условия неспециалиста, я был только в этом классе в течение трех недель.

Если я удаляю COP, PSY, EVR и COP из строки 21, я возвращаю другую ошибку;

courseInfo.java:22: error: cannot find symbol 
     System.out.println(linearSearch(list, courseInput)); 
              ^
    symbol: variable courseInput 
    location: class courseInfo 
1 error 
+0

Основной метод не знает переменную 'courseInput', как она существует только в' методе courseInfo'. Второй вопрос заключается в том, где определен метод 'linearSearch'. Кроме того, ваш 'int []' не будет компилироваться.'COP 2800' не является целым числом. Подумайте об использовании 'String []' и используйте 'equals()' вместо '==' как 'String' - объекты. – Jyr

+0

Так много ошибок ... но начнем с: где определяется ваш метод 'linearSearch'? – azurefrog

ответ

0

Вы проверяете условие равенства на значения String с помощью courseInput, который должен быть int.

Кроме того, вы возвращаете -1 для того, что происходит в условии if. Предполагаете ли вы вернуть -1, если значение ключа не совпадает с значением в списке?

Также переменная courseInput является локальной для метода. Сделайте его глобальным, объявив его в классе как переменную-член.

+0

Да, я должен производить и ошибки, если он не может найти искомое ключевое слово. – Vykn

+0

Добавить еще о если (условие) {// код } еще { возвращение -1 } – Ronald

0

У вас есть double courseInput = input.nextDouble(), который принимает только парные разряды, а не символы. У вас также есть int[] list, который представляет собой массив целых чисел, поэтому он также не может содержать символы. Вам повезет, если вы поместите все имя курса (обе буквы и цифры) в строку. Затем вы можете сканировать всю строку и хранить ее в массиве строк.

+0

Хорошо, String будет принимать комбинацию символов и чисел? – Vykn

+0

Да, хотя имейте в виду, что целые числа не будут находиться в форме 'int'. Я предполагаю, что ваша цель - просто распечатать название курса, так что да, вы сможете распечатать «COP 2800». Если вам нужны целые числа для вычислений (например, сортировка их так, чтобы COP 1000 отображалась до 2800), вам нужно будет преобразовать их в ints – bluecanary

0

Я предлагаю вам немного поработать над базовыми типами данных Java, прежде чем пытаться это сделать. Java - это довольно strictly typed язык, что означает, что в целом (есть много исключений) вам нужно решить, какой тип значения вы храните в переменной загодя. Вы смешиваете в своем коде множество типов: целые числа, двойные и строки.

Итак, начните с определения, является ли идентификатор курса номером имени. Если это номер, вы можете использовать int для его сохранения. Если это имя, вы можете использовать String. Вы отмечаете, что предмет включает буквы и цифры. Но пока вам не нужно сравнивать номера напрямую, вы можете сохранить весь идентификатор в String. Их не нужно разделить.

Другая распространенная ловушка для новых стартеров заключается в том, что примитивные типы (такие как int) ведут себя совершенно иначе, чем объекты (например, String). Непосредственная разница - это значение ==. Для примитивных типов он сравнивает значения, в то время как для проверяемых объектов, если левая и правая стороны относятся к одному и тому же объекту.

Я подозреваю, что вы хотите, чтобы ваши субъекты были идентифицированы по имени (т. Е. String). В этом случае ваш код может выглядеть примерно так:

String[] subjects = {"COP2800", "PSY1012", "EVR2001"}; 

и

for (int i = 0; i < subjects.length; i++) { 
    if (subjects[i].equals(name)) 
     return i; 
} 
return -1;