Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Eugen167
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 115
#1

Не понимаю почему не работает

23.02.2016, 12:06. Просмотров 254. Ответов 6
Метки нет (Все метки)

Нужно что бы при прибавлении числа, если он доходит до указанного предел начинал считать с нуля
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class Ciphers
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String s = reader.readLine();
        char[] m = s.toCharArray();
 
        int x = Integer.parseInt(reader.readLine());
 
        String s2 = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
        char[] m1 = s2.toCharArray();
 
        ArrayList<Integer> s1 = new ArrayList<Integer>();
        int z;
 
        System.out.println(" ");
        System.out.println(" ");
        //Шифровка и вывод на экран
        for (int i = 0; i < m.length; i++)
        {
            for (int r = 0; r < m1.length; r++)
            {
                if (m[i] == m1[r])
                {
                   //здесь предел 32, тогда 20+21=8, но почему-то не работает((
                    z = (r+x)%32;
                    System.out.print(m1[z]);
                    s1.add(z);
                }
            }
        }
        System.out.println(" ");
        System.out.println(" ");
        //расшифровка
        for (int i = 0; i < s1.size(); i++)
        {
 
                //System.out.print(m1[33 - (x - s1.get(i))]);
                System.out.print(m1[(s1.get(i)- x)%32]);
 
        }
 
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2016, 12:06
Ответы с готовыми решениями:

Не понимаю, почему в выделенных строках возвращается только одна цифра, а не две?
Есть правильно написанная программа. public class Alg2 { public static...

Не понимаю как работает программа
Только изучаю программирование. В общем, try/catch, судя по всему, прога просто...

Почему не работает?
Ошибок не выдает, двигать не хочет. Помогите плз. public boolean onTouch(View...

Почему не работает If
Проблема следующая, есть метод public void run() { // Нужно...

Почему не работает?
Не понимаю почему не работает программа. Проблема вот в чем: я ввожу первое...

6
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
23.02.2016, 12:23 #2
Цитата Сообщение от Eugen167 Посмотреть сообщение
тогда 20+21=8
(20 + 21) % 32 == 9

Добавлено через 5 минут
При делении по модулю на n результатом будет число в диапазоне от 0 до n-1.
0
Doctor_
236 / 235 / 142
Регистрация: 03.02.2011
Сообщений: 1,436
23.02.2016, 12:45 #3
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class Ciphers {
    public static void main(String[] args) {
        String s2 = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
        String word = "привет";
        int step = 20;
 
        char[] alphabetChars = s2.toCharArray();
        char[] wordChars = word.toCharArray();
        char[] newWord = new char[wordChars.length];
 
        for (int i = 0; i < wordChars.length; i++) {
            int index = getCharIndex(wordChars[i], alphabetChars);
            int newIndex = index + step;
            if (newIndex > alphabetChars.length) {
                newWord[i] = alphabetChars[newIndex - alphabetChars.length];
            } else {
                newWord[i] = alphabetChars[newIndex];
            }
        }
        System.out.println("Шифровка: " + new String(newWord));
 
        wordChars = new String(newWord).toCharArray();
        newWord = new char[wordChars.length];
        for (int i = 0; i < wordChars.length; i++) {
            int index = getCharIndex(wordChars[i], alphabetChars);
            int newIndex = index - step;
            if (newIndex < 0) {
                newWord[i] = alphabetChars[alphabetChars.length + newIndex];
            } else {
                newWord[i] = alphabetChars[newIndex];
            }
        }
        System.out.println("Дешифровка: " + new String(newWord));
    }
 
    private static int getCharIndex(char ch, char[] arr) {
        int index = 0;
        for (int i = 0; i < arr.length; i++) {
            if (ch == arr[i])
                index = i;
        }
        return index;
    }
}
Добавлено через 14 минут
Не учёл что шаг сдвига может быть большим.
Исправил:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class Ciphers {
    public static void main(String[] args) {
        String s2 = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
        String word = "привет";
        int step = 1000000;
 
        char[] alphabetChars = s2.toCharArray();
        char[] wordChars = word.toCharArray();
        char[] newWord = new char[wordChars.length];
 
        for (int i = 0; i < wordChars.length; i++) {
            int index = getCharIndex(wordChars[i], alphabetChars);
            int newIndex = index + step;
            while (newIndex > alphabetChars.length) {
                newIndex -= alphabetChars.length;
            }
            newWord[i] = alphabetChars[newIndex];
        }
        System.out.println("Шифровка: " + new String(newWord));
 
        wordChars = new String(newWord).toCharArray();
        for (int i = 0; i < wordChars.length; i++) {
            int index = getCharIndex(wordChars[i], alphabetChars);
            int newIndex = index - step;
            while (newIndex < 0) {
                newIndex += alphabetChars.length;
            }
            newWord[i] = alphabetChars[newIndex];
        }
        System.out.println("Дешифровка: " + new String(newWord));
    }
 
    private static int getCharIndex(char ch, char[] arr) {
        int index = 0;
        for (int i = 0; i < arr.length; i++) {
            if (ch == arr[i])
                index = i;
        }
        return index;
    }
}
1
Eugen167
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 115
23.02.2016, 14:48  [ТС] #4
А как сделать, что бы так же, только в обратную сторону?

Добавлено через 1 минуту
Спасибо, но мне кажется ваше решение слишком мудреное, вроде можно проще...
0
Doctor_
236 / 235 / 142
Регистрация: 03.02.2011
Сообщений: 1,436
23.02.2016, 14:58 #5
Хозяин — Барин.
1
Eugen167
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 115
23.02.2016, 15:05  [ТС] #6
В моей программе шифровка работает, я просто не могу понять, как расшифровку сделать, что бы было как деление по модулю, только в обратном направлении считало.

Простите если обидел.
0
Doctor_
236 / 235 / 142
Регистрация: 03.02.2011
Сообщений: 1,436
23.02.2016, 15:30 #7
Мне кажется это нельзя сделать.

Добавлено через 4 минуты
Хотя, вроде можно, только от негативных элементов надо избавляться
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
String word = "привет";
        char[] wordChars = word.toCharArray();
        int step = 23452342;
        String alphabet = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
        char[] alphabetChars = alphabet.toCharArray();
        ArrayList<Integer> indexList = new ArrayList<Integer>();
        int newIndex;
        for (int i = 0; i < wordChars.length; i++) {
            for (int j = 0; j < alphabetChars.length; j++) {
                if (wordChars[i] == alphabetChars[j]) {
                    newIndex = (j + step) % 32;
                    indexList.add(newIndex);
                    System.out.print(alphabetChars[newIndex]);
                }
            }
        }
        System.out.println();
        for (int index : indexList) {
            while (index - step < 0) {
                index += alphabetChars.length - 1;
            }
            System.out.print(alphabetChars[(index - step) % 32]);
        }
0
23.02.2016, 15:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2016, 15:30

Почему не работает?
class MorskoyBoy { public static void main(String args) { int Sait =...

Почему не работает?
Программа class MyClass { int x;} public class My1 { public static...

Почему не работает?
public static void main(String args) { int arr = {1,2,3,4,5}; for...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru