Я пишу функцию, которая получает 2 строки. каждая строка представляет собой версию чего-либо.

Например:

Строка var1 = "1.1.1";

Строка var2 = "1.1.2";

И возвращает, какая строка является более новой версией.

Мой код:

   public  void main(String var1, String var2) {

    String[] arrayA = var1.split("\\.");

    String[] arrayB = var2.split("\\.");

    for (int i = 0; i < arrayA.length; i++) {

            Integer number1 = Integer.parseInt(arrayA[i]);

            Integer number2 = Integer.parseInt(arrayB[i]);

            if (number1.equals(number2)) {

                textView.setText("arrays equal");

            } else if (number1 > number2) {

                textView.setText("array A newer version");

                break;

            } else if (number2 > number1) {

                textView.setText("array B newer version");

                break;
            }  
    }

До сих пор все работает нормально.

Моя проблема начинается, когда массивы имеют разную длину

(Я всегда выбираю shorterArray на longArray)

Если я кемпер var1 = "2.3"; to var2 = "3.3.3"; я получаю правильный ответ.

Но если я кемпер var1 = "2.3"; to var2 = "2.3.1";

Я всегда получаю «равный».

Есть предложения, как с этим бороться?

0
sollo 25 Май 2016 в 13:10

3 ответа

Лучший ответ

Пожалуйста, попробуйте следующее:

public  void main(String var1, String var2) {

    String[] arrayA = var1.split("\\.");

    String[] arrayB = var2.split("\\.");
    int length = 0;
    if (arrayA.length > arrayB.length) {
        length = arrayA.length;
    } else {
        length = arrayB.length;
    }
    int check = 0;
    for (int i = 0; i < length; i++) {
        Integer number1 = 0, number2 = 0;
        if (arrayA.length > i) {
            number1 = Integer.parseInt(arrayA[i]);
        }
        if (arrayB.length > i) {
            number2 = Integer.parseInt(arrayB[i]);
        }
        if (number1.equals(number2)) {
            check = 0;
        } else if (number1 > number2) {
            check = 1;
            break;

        } else if (number2 > number1) {
            check = 2;
            break;
        }
    }
    switch (check) {
    case 0:
        System.out.println("arrays equal");
        break;
    case 1:
        System.out.println("array A newer version");
        break;
    case 2:
        System.out.println("array B newer version");
        break;
    }

}
0
Erika Kay 25 Май 2016 в 10:33

Вы можете добавить свои вары в список и просто использовать метод сортировки из java.util.Collections, который будет выполнять сравнение за вас. пример

public static void main(String var1, String var2){ 

    List<String> varList = new ArrayList<String>();
    varList.add(var1); 
    varList.add(var2); 

    java.util.Collections.sort(varList);
    System.out.println("designation of newer version is: " + varList.get(1));
}
0
Eritrean 25 Май 2016 в 10:47
int length = Math.min(arrayA.length, arrayB.length);
for (int i = 0; i < length; i++) {
0
tak3shi 25 Май 2016 в 10:33