Лексикографическое сравнение двух строк

Я пытаюсь найти лексикографически наименьшую и наибольшую подстроку длины z, которая берется из ввода. Я не знаю почему, но условие if не работает, когда я пытаюсь найти минимальную подстроку.

import java.io.*;
import java.util.*;

public class Solution {

    public static void main(String[] args) {

        Scanner ip=new Scanner(System.in);

        String s=ip.next();
        int z=ip.nextInt();
        String max="";
        String mini="";
        String x="";

        for(int i=0;i<s.length()-z;i++) {
                x=s.substring(i,i+z);
                if(x.compareTo((mini))<0) //this is not working
                    mini=x;

                if(x.compareTo((max))>0)
                    max=x;
            }
        System.out.print(mini);
        System.out.print(max);
    }
}

person Eduardo    schedule 10.06.2017    source источник
comment
Что ты спрашиваешь?   -  person Rahul Jain    schedule 10.06.2017
comment
посмотрите код, где я пытаюсь найти минимальную подстроку, он не работает   -  person Eduardo    schedule 10.06.2017
comment
вы изначально объявили mini пустой строкой, поэтому она не меняется. Вы должны инициализировать как mini, так и max как любую подстроку z-длины входной строки. mini = max = s.substring(0, z);   -  person Rahul Jain    schedule 10.06.2017
comment
@RahulJain, спасибо, чувак!   -  person Eduardo    schedule 10.06.2017


Ответы (1)


Проблема в объявлении обеих переменных mini и max

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

вы можете инициализировать их:

 mini = s.substring(0, z);
 max  = s.substring(0, z);

Изменить:

если вы попытаетесь проверить это условие:

x.compareTo(("")) он всегда будет возвращать значение больше, чем 0, поэтому mini ни в коем случае не изменится.

person Oghli    schedule 10.06.2017