Как сравнить вывод со своей строкой

124
28 сентября 2019, 13:40

Есть такой код

public class MyClass {
public static void main(String args[]) {
    char password[]={'a','b','c'};
    char abc[] = new char[]{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};//множество допустимых символов
    int size = 3;//кол-во элементов
    int arr[] = new int[size];//массив для хранения текущего варианта множества
    outer: while(true){//вечный цикл
    //вывод варианта множества на экран
    for(int ndx : arr){
        System.out.print(abc[ndx]);
    }
    System.out.println();
    int i = size - 1;  //ставим курсов в самую правую ячейку
    while(arr[i] == abc.length - 1){  //движемся влево, если ячейка переполнена
        arr[i] = 0; //записываем в ячейку 0, т.к. идет перенос разряда
        i--;  //сдвиг влево
        //если перенос влево невозможен, значит перебор закончен
        if(i < 0)break outer;
}
        arr[i]++;//увеличиваем значение ячейки на единицу
    }
}}

Мне задали чтобы я сравнил мой массив password с генерацией всех символов, здесь у меня генерируются все комбинации по 3 символа, можно менять размер int size на любой нужный размер. Так вот я ввел свой массив пароля и мне нужно сравнить его со всеми комбинациями и если есть совпадения то остановить программу, и еще засечь время выполнения этого сравнения через. Уже сижу целую неделю не могу допереть. Кто нибудь знает как делать))

Answer 1

Примерно так:

public static void main(String[]args){
    char password[]={'a','d','d'};
    char abc[] = new char[]{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};//множество допустимых символов
    int size = 3;//кол-во элементов
    int arr[] = new int[size];//массив для хранения текущего варианта множества
    String varPw="";
    outer: while(true){//вечный цикл
        if(varPw.length()==size){
            if(varPw.equals(String.valueOf(password))){
                System.out.println("password = " + varPw);
                break;
            }
        }
        varPw = "";
        //вывод варианта множества на экран
        for(int ndx : arr){
            varPw += abc[ndx];
            System.out.print(abc[ndx]);
        }
        System.out.println();
        int i = size - 1;  //ставим курсов в самую правую ячейку
        while(arr[i] == abc.length - 1){  //движемся влево, если ячейка переполнена
            arr[i] = 0; //записываем в ячейку 0, т.к. идет перенос разряда
            i--;  //сдвиг влево
            //если перенос влево невозможен, значит перебор закончен
            if(i < 0)break outer;
        }
        arr[i]++;//увеличиваем значение ячейки на единицу
    }
}

READ ALSO
Использование RandomAccessFile, кодировки

Использование RandomAccessFile, кодировки

При чтении байтов из файла с использовании RandomAccessFile нормально выводится в консоль только латиницаЧтоб выводилась нормально кирилица необходимо...

138
Что такое double brace инициализация?

Что такое double brace инициализация?

Что означает синтаксис {{ }}(две двойных фигурных скобки) в Java?

143
Gradle sync failed, implementations

Gradle sync failed, implementations

Не понимаю в чём проблема"Gradle sync failed"

107