2015-03-16 1 views
0

Я пытаюсь написать программу, которая должна сортировать две строки в алфавитном порядке, а если s1 предшествует s2, верните -1, если s1 появится после s2, return 1, и если это одно и то же слово, напечатайте 0. Итак, для s1 = "king" и s2 = "kink", он должен печатать -1. Мне удалось реализовать это для слов, которые не начинаются с одного и того же письма, но для слов, которые этого не делают, например, «king» и «kink», я сталкиваюсь с трудностями.Программа, которая сортирует строки по алфавиту без сравнения. To (Java)

public static int compare(String a, String b) 
    { 

int comparison = 0; 
int c1, c2; 
for(int i = 0; i < a.length() && i < b.length(); i++) 
{ 
    c1 = (int) a.toLowerCase().charAt(i); 
    c2 = (int) b.toLowerCase().charAt(i); 
    comparison = c1 - c2; 

    if(comparison == 0) 
    { 
     if(a.length() > b.length())  
     return 1; 
     else if (a.length() < b.length()) 
     return -1; 
     else 
     return 0; 
    } 
    else if (comparison > 0) 
     return 1; 
    else 
     return -1; 

} 

return comparison; 
} 

Я чувствую, что вопрос с моей за цикл, что я не позволяя ему пройти через всю строку, но я не уверен, как это исправить.

+0

Вместо возврата '0', когда' сравнение' равно '0' - вы должны попробовать использовать' continue'. – Tirath

+0

Я думаю, вам лучше использовать значения часов для каждого цикла, чтобы вы могли определить, что вы получаете в каждом цикле. или вы можете распечатать значения c1 и c2 в каждом цикле, чтобы вы могли найти, получаете ли вы ожидаемый результат. –

+0

@ Тират благодарит за помощь, теперь он может в алфавитном порядке «король» и «король» и т. д. соответственно. Похоже, что он не распознает пробелы, хотя, например, «привет» и «привет» возвращает 0, когда требуется вернуть -1. Есть идеи? – jofl

ответ

1
public static int compare(String a, String b) { 
    if (a == null) { 
     return b == null ? 0 : -1; 
    } else if (b == null) { 
     return 1; 
    } 
    String alow = a.toLowerCase(); 
    String blow = b.toLowerCase(); 
    int len = Math.min(a.length(), b.length()); 
    for (int i = 0; i < len; i++) { 
     int d = alow.charAt(i) - blow.charAt(i); 
     if (d != 0) { 
      return d < 0 ? -1 : 1; 
     } 
    } 
    int diff = a.length() - len; 
    if (diff != 0) { 
     return diff < 0 ? -1 : 1; 
    } 
    return 0; 
} 
Смежные вопросы