2015-11-30 3 views
-1

Я борюсь с небольшим количеством домашней работы. Я исправил все свои проблемы, за исключением этого. После очистки сайта я решил просто задать свой вопрос.Метод binarySearch (ArrayList <String>, int, int, String) не определен для типа ArrayList <String>?

Код предназначен для создания небольшого меню, которое запрашивает у пользователя, хотят ли они ввести электронное письмо в базу данных, выполнить поиск ранее введенного письма или выйти.

Моя проблема возникает, когда я пытаюсь выполнить двоичный поиск, чтобы определить, находится ли электронное письмо в базе данных.

Ошибка во второй строке метода addNewEmail (последний). Заранее спасибо за помощь.

import java.util.Scanner; 
import java.util.ArrayList; 
import java.util.Collections; 

public class project14_Brady { 

    private static final int ADD = 1; 
    private static final int SEARCH = 2; 
    private static final int QUIT = 3; 

    public static void main(String[] args) 
    { 

     ArrayList<String> emailAddresses = new ArrayList<String>(); 
     int size = 0; 

     Scanner input = new Scanner(System.in); 

     // Priming read 
     int menu = menuChoice(input); 
     while(menu != QUIT) 
     { 
      if (menu == ADD) 
      { 
       System.out.println("Enter the email address"); 
       String email = input.nextLine(); 
       size = addNewEmail(emailAddresses, size, email); 
      } 
      else if (menu == SEARCH) 
      { 
       String email = autoComplete(emailAddresses, size, input); 
       if (email != null) 
        System.out.println("Found: " + email); 
       else 
        System.out.println("No matching email was found"); 
      } 
      else 
      { 
       System.out.println("Unanticipated case"); 
      } 

      // priming read 
      menu = menuChoice(input); 

     } // end while 

    } 

    public static String autoComplete(ArrayList<String> data, int size, Scanner input) 
    { 
     System.out.println("Enter the first letters, one at a time"); 
     String start = ""; 

     while (true) 
     { 
      String read = input.nextLine(); 
      start += read; 

      System.out.println("DEBUG: " + start); 

      int count=0; 
      String result=""; 

      for (int i=0; i<size; ++i) 
      { 
       System.out.println("DEBUG: " + data.get(i)); 
       if (data.get(i).startsWith(start)) 
       { 
        result = data.get(i); // keep just the last one 
        System.out.println(data.get(i)); 
        ++count; 
       } 

      } 

      if (count == 1) 
       return result; 

      if (count == 0) 
       return null; 

     } 
    } 

    public static int menuChoice(Scanner keyboard) 
    { 
     System.out.println("Please choose from the following menu of choices:"); 
     System.out.println("1. Enter a new email address"); 
     System.out.println("2. Find an existing email address"); 
     System.out.println("3. Quit."); 
     System.out.println("What is your choice?"); 

     int choice = keyboard.nextInt(); 
     keyboard.nextLine(); // get rid of newline 

     // Allow the user to re-enter data 
     while (choice < ADD || choice > QUIT) 
     { 
      System.out.println("You must choose a value between 1 and 3"); 
      System.out.println("Please re-enter your choice"); 
      choice = keyboard.nextInt(); 
      keyboard.nextLine(); 
     } 

     return choice; 
    } 

    public static int addNewEmail(ArrayList<String> data, int size, String insertMe) 
    { 
     if (data.binarySearch(data, 0, size, insertMe) > 0) 
     { 
      System.out.println("That email address has already been inserted"); 
      return size; // already in array 
     } 

     if (size == data.size()) 
     { 
      System.out.println("Too many addresses are stored"); 
      return size; // the array is full already 
     } 

     // This is essentially one inner loop of insertion sort 
     int index; 
     for (index = size; index > 0 && data.get(index-1).compareTo(insertMe) > 0; --index) 
     { 
      data.add(index, data.get(index-1)); 
     } 

     data.add(index, insertMe); 

     return size+1; 
    } 

}

+3

Где вы нашли этот метод 'binarySearch'? –

+0

Не сбрасывайте весь файл, просто разместите соответствующие части – Coderchu

+0

'ArrayList' не имеет метода' binarySearch'. Существуют бинарные методы поиска в другом месте, которые могут быть применены к 'ArrayList', но не ясно, собираетесь ли вы использовать их? –

ответ

1

ArrayList не имеет метод binarySearch. Вы можете попробовать это вместо

if (Collections.binarySearch(data, insertMe) > 0) 

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

+1

Это, кажется, работает великолепно. Спасибо. – BJustice

Смежные вопросы