0 / 0 / 0
Регистрация: 26.08.2019
Сообщений: 30
1

Проверка как ходит конь в шахматах

20.09.2019, 19:53. Показов 3227. Ответов 15

выдает ошибку runtime error, не могу понять, с чем связанно. в текстовом документе находится C7-D5

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
46
47
48
49
50
51
package useText;
import java.io.*;
import java.util.*;
 
 
public class Main {
    public static void main(String args[]) throws IOException {
        new Main().start();
    }
    Scanner scan;
     PrintWriter pw;
     char[] letters = {'A','B','C','D','E','F','G','H'};
     char[] numbers = {'1','2','3','4','5','6','7','8'};
     char[] printed;
     int i;
     int j;
     int k;
     int m;
     public void start() throws IOException {
         scan = new Scanner(new File("input.txt"));
         pw = new PrintWriter(new File("output.txt"));
        String line = scan.next();
        scan.close();
        if (line.matches("[A-H][1-8]-[A-H][1-8]")){
        printed = line.toCharArray();
        for ( i = 0; i<=letters.length;i++) {
            if (printed[0] == letters[i])
                break;
        }
        for ( j = 0; j<=letters.length;j++) {
            if (printed[3] == letters[j])
                break;
        }   
            for ( k = 0; k<numbers.length;k++) {
                if (printed[1] == numbers[k])
                    break;
            }
            for ( m = 0; m<numbers.length;m++) {
                if (printed[4] == numbers[m])
                    break;
        }
        if(((letters[i]==letters[j-2]||letters[i]==letters[j+2])&&((numbers[k]==numbers[m-1])||(numbers[k]==numbers[m+1])))||((letters[i]==letters[j-1]||letters[i]==letters[j+1])&&((numbers[k]==numbers[m-2])||(numbers[k]==numbers[m+2])))) {
            pw.print("yes");
        }
        else pw.print("no");
     }
        else pw.print("incorrect form");
        pw.close();
     }
     
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.09.2019, 19:53
Ответы с готовыми решениями:

Ладья и конь в шахматах
На шахматном поле есть 2 фигуры: белый конь и черная ладья. Известны их координаты (в виде двух...

Показать, как ходит ферзь в шахматах в двумерном массиве
Помогите написать программу , которая показывает как ходит ферзь. При этом ферзя нужно выбрать...

подскажите как сделать анализатор для короля в шахматах
Помогите сделать анализатор на шах, мат, пат скоро сдача курсовой и это последний элемент. Если...

объясните как ходит робот
Есть линкопомойка по адресу сайт.ру/помойка.хтмл :-? , но с самого сайта на нее ссылок нет из...

15
2405 / 1864 / 472
Регистрация: 17.02.2014
Сообщений: 9,046
20.09.2019, 20:29 2
Цитата Сообщение от eliseybg Посмотреть сообщение
не могу понять,
это поможет https://www.cyberforum.ru/java/thread2250765.html
0
1019 / 559 / 185
Регистрация: 18.08.2013
Сообщений: 2,026
Записей в блоге: 2
20.09.2019, 21:18 3
Што ты вообще хочешь сделать? Код выглядит страшно
0
0 / 0 / 0
Регистрация: 26.08.2019
Сообщений: 30
21.09.2019, 06:37  [ТС] 4
проверка, может ли шахматный конь так ходить. "начальная координата"-"конечная координата".если ввели неправильные координаты, то создается новый текстовый документ со значением no, если правильно, то yes. если неправильная форма записи, то incorrect form
0
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274
21.09.2019, 11:00 5
eliseybg,
В этой строке
Цитата Сообщение от eliseybg Посмотреть сообщение
for ( i = 0; i<=letters.length;i++) {
у Вас идет обращение к несуществующему 8-му элементу массива letters(), у которого элементы считаются от 0 до 7. Уберите знак = в условии. То же самое в цикле для j.
1
1019 / 559 / 185
Регистрация: 18.08.2013
Сообщений: 2,026
Записей в блоге: 2
21.09.2019, 11:31 6
По идее ж, если известно, что ход задан правильно (не выходит за грани доски), то шоб проверить, является ли он допустимым для коня, достаточно посчитать dx + dy, т.е. общее изменение координат. Каждый ход конь смещается либо на 1 по иксу и на 2 по игреку, либо на 2 по иксу и на 1 по игреку (направление можно не учитывать), т.е. dx + dy = 3. Ну и исходя из этого такой код должен работать нормально
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public static void main(String[] args) {
        String move = "A1-B3";
        System.out.println(isCorrectMove(move));
    }
 
    public static boolean isCorrectMove(String move) {
        if (!move.matches("[A-B][1-9]-[A-B][1-9]")) {
            return false;
        }
 
        int x = Math.abs(move.charAt(0) - move.charAt(3));
        int y = Math.abs(move.charAt(1) - move.charAt(4));
 
        return x + y == 3;
    }
Поправьте, если не прав

Добавлено через 5 минут

Не по теме:

Ну и вопрос к знатокам: почему эта регулярка не работает? "([A-B][1-9])-\\1"
то, что в первой скобке, по идее должно быть первой группой и \\1 должно захватывать то же, что и она, но чёт как-то нет

0
0 / 0 / 0
Регистрация: 26.08.2019
Сообщений: 30
22.09.2019, 16:27  [ТС] 7
Наверное не там... Как получить H и 8, если без =. Думаю, в ифе ошибка. i-2, а если I=1, то массив -1 члена

Добавлено через 1 минуту
А почему А-В? Шахматное поле же A-H и 1-8. Может для ([A-B][1-9])-\\0...?
0
1019 / 559 / 185
Регистрация: 18.08.2013
Сообщений: 2,026
Записей в блоге: 2
22.09.2019, 17:10 8
А. опечатка. Я прост не заметил
0
2405 / 1864 / 472
Регистрация: 17.02.2014
Сообщений: 9,046
22.09.2019, 21:05 9
eliseybg, вот, из кладовки)):
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
public class Helper {
 
    public static void main(String[] args) {
        System.out.println(isPossibleMove("a1", "b3"));
        System.out.println(isPossibleMove("a1", "c2"));
        System.out.println(isPossibleMove("a1", "c3"));
        System.out.println(isPossibleMove("h1", "g3"));
 
    }
 
    private static boolean isPossibleMove(String from, String to) {
        if (!isValidChar(from.toUpperCase().charAt(0), 'A', 'H')) return false;
        if (!isValidChar(to.toUpperCase().charAt(0), 'A', 'H')) return false;
        if (!isValidChar(from.charAt(1), '1', '8')) return false;
        if (!isValidChar(to.charAt(1), '1', '8')) return false;
        int subsChars = Math.abs(from.toUpperCase().charAt(0) - to.toUpperCase().charAt(0));
        int subsNum = Math.abs(from.charAt(1) - to.charAt(1));
        if (subsChars == 2)
            return subsNum == 1;
        else if (subsChars == 1)
            return subsNum == 2;
        return false;
    }
 
    private static boolean isValidChar(char verifiableChar, char lower, char upper) {
        return (verifiableChar <= upper) && (verifiableChar >= lower);
    }
}
0
0 / 0 / 0
Регистрация: 26.08.2019
Сообщений: 30
25.09.2019, 17:08  [ТС] 10
может это будет проще...

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import java.io.*;
import java.util.*;
  
public class Main {
    public static void main(String args[]) throws IOException {
        new Main().start();
    }
  
    Scanner scan;
    PrintWriter pw;
    char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' };
    char[] numbers = { '1', '2', '3', '4', '5', '6', '7', '8' };
    char[] printed;
    int i;
    int j;
    int k;
    int m;
    boolean correct = false;
    public void start() throws IOException {
        scan = new Scanner(new File("input.txt"));
        pw = new PrintWriter(new File("output.txt"));
        String line = scan.next();
        scan.close();
        if (line.matches("[A-H][1-8]-[A-H][1-8]")) {
            printed = line.toCharArray();
            for (i = 0; i < letters.length; i++) {
                if (printed[0] == letters[i])
                    break;
            }
            for (j = 0; j < letters.length; j++) {
                if (printed[3] == letters[j])
                    break;
            }
            for (k = 0; k < numbers.length; k++) {
                if (printed[1] == numbers[k])
                    break;
            }
            for (m = 0; m < numbers.length; m++) {
                if (printed[4] == numbers[m])
                    break;
            }
            if (j - 2 == i) {
                if (m - 1 == k) {
                    pw.print("YES");
                    correct = true;
                }
                if (m + 1 == k) {
                    pw.print("YES");
                    correct = true;
                }
            }
            if (j + 2 == i) {
                if (m - 1 == k) {
                    pw.print("YES");
                    correct = true;
                }
                if (m + 1 == k) {
                    pw.print("YES");
                    correct = true;
                }
            }
  
            if (j - 1 == i) {
                if (m - 2 == k) {
                    pw.print("YES");
                    correct = true;
                }
                if (m + 2 == k) {
                    pw.print("YES");
                    correct = true;
                }
            }
            if (j + 1 == i) {
                if (m - 2 == k) {
                    pw.print("YES");
                    correct = true;
                    }
                if (m + 2 == k) {
                    pw.print("YES");
                    correct = true;
                }
            }
            if(correct == false)
                pw.print("NO");
        } else
            pw.print("ERROR");
        pw.close();
  
    }
}
0
1019 / 559 / 185
Регистрация: 18.08.2013
Сообщений: 2,026
Записей в блоге: 2
25.09.2019, 17:12 11
eliseybg, ох, я так не думаю
0
Aviz__
25.09.2019, 17:18
  #12

Не по теме:

Цитата Сообщение от Gungala Посмотреть сообщение
я так не думаю
ему кажется так, тебе эдак, мне вообще по иному, а ТС выберет, что ему понятнее. заметь, все правы...

0
1019 / 559 / 185
Регистрация: 18.08.2013
Сообщений: 2,026
Записей в блоге: 2
25.09.2019, 17:38 13

Не по теме:

Aviz__, ну, в обычной ситуации эт было бы так, но если уж говорить о "простоте", то найдётся не так много людей, которые согласились бы, что его код действительно "простой"



Добавлено через 9 минут

Не по теме:

Ну и да, хочу добавить, что я не осуждаю его. Надо с чего-то начинать, не всем (никому) не дано сразу писать максимально эффективный код

0
2405 / 1864 / 472
Регистрация: 17.02.2014
Сообщений: 9,046
25.09.2019, 17:45 14

Не по теме:

Цитата Сообщение от Gungala Посмотреть сообщение
его код действительно
Бро, ну а нам - то какое дело? ему кажется и ладно! чет ты последнее время взялся судить людей?!



Добавлено через 5 минут

Не по теме:

Цитата Сообщение от Gungala Посмотреть сообщение
Надо с чего-то начинать
он и начал)) у каждого свое время понимания, что вчерашний код можно улучшить. если чел не осознает этого, он не сможет двигаться вперед, НО это его жизнь и ЕГО проблемы!

0
0 / 0 / 0
Регистрация: 26.08.2019
Сообщений: 30
25.09.2019, 20:34  [ТС] 15
а в чем недостаток моего кода?
я не так давно начал изучать джаву
0
2405 / 1864 / 472
Регистрация: 17.02.2014
Сообщений: 9,046
26.09.2019, 07:54 16
Цитата Сообщение от eliseybg Посмотреть сообщение
а в чем недостаток моего кода?
вот, через пару месяцев ты нам и ответишь на этот вопрос)). если же не сможешь, значит за это время ты ничего не усвоил (очень хороший тест, к стати).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2019, 07:54
Помогаю со студенческими работами здесь

А как к вам ходит бот в последнии дни?
Товарищи, а с какой интенсивностью к вам стал ходить бот яши в последнии деньки? У меня почти...

Почему персонаж не ходит? В чем ошибка? Напишите подробно как исправить
using System.Collections; using System.Collections.Generic; using UnityEngine; public class...

Как написать сетевой клиент, который ходит через proxy/firewall?
Не сталкивался ли кто-нибудь - как написать сетевой клиент, который ходит через proxy/firewall?...

Рокировка в шахматах
мне нужно сделать рокировку в шахматах как это можно реализовать ребята очень нужно я не понимаю...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru