2014-11-26 4 views
0

Я пытаюсь применить двоичный поиск в строке, содержащей целые числа. Это мой кодПреобразование из char в int

public class abcd { 
public static void main(String[] args){ 
    Scanner input = new Scanner(System.in); 
    String num=""; 
    for(int i=0;i<5;i++){ 
     num += input.next(); 
    } 
    if(bs(5,num)) 
     System.out.println("Yep"); 
    else 
     System.out.println("Nope"); 
} 
public static boolean bs(int key,String N){ 
    int low=0,high=N.length()-1,mid; 
    while(high>=low){ 
     mid = (high+low)/2; 
     if(N.charAt(mid) == key) 
      return true; 
     else if(N.charAt(mid) < key) 
      low = mid+1; 
     else 
      high = low-1; 
    } 
    return false; 
} 
} 

bs - метод двоичного поиска. Мой вход уже отсортирован. Теперь я хочу найти, было ли введено 5, но даже если 5 входит в качестве ввода, я всегда получаю «Nope» в качестве вывода, что означает, что bs всегда возвращает false.

Я понимаю, что charAt возвращает символ, и вот в чем проблема. Но если я хочу преобразовать этот символ в int, что мне делать? Например, как мне преобразовать '4' в 4?

+2

строки не содержат целые числа. Они могут содержать цифры ... Кроме того, что более важно, бинарный поиск работает только на отсортированных наборах ... –

+1

int four = 4 + '0'; – BevynQ

+0

@MitchWheat Я даю отсортированный вход – tofu

ответ

1

Да, вы пытаетесь сравнить символы с Интс, которые не работает. Как насчет использования символов?

public static boolean bs(char key,String N){ 

и вызвать

bs('5', '25789'); 
1

Вы могли бы сделать

int intValue = N.charAt(mid) - 0x30; 

Или

int intValue = Integer.parseInt(String.valueOf(N.charAt(mid))); 
2

Преобразовать ключ к полукоксу первого использования Character.forDigit()

public static boolean bs(int intkey,String N){ 
    char key = Character.forDigit(intkey,10); 

    int low=0,high=N.length()-1,mid; 
    //... 
    //the rest of your function should stay the same 
    //... 
} 
Смежные вопросы