Если два имени совпадают, программа выдаст ошибку

ОшибкаМои коды

Я сделал программу, которая запрашивает полное имя, адрес и т. д., Я хочу, чтобы программа определяла, совпадают ли два полных имени. У меня уже есть оператор if else, который определяет, совпадает ли полное имя, но я продолжаю получать ошибку в возвращаемой части. Я хочу снова вернуться в процесс ввода имени, но программа продолжает переходить к нужному мне адресу.

пример вывода

1.Ваше имя: Джерико

1.Ваше второе имя: Манаранг

1.Ваша фамилия: Наварро

ввод барангай .... и т. д.

2.Ваше имя: Джерико

2.Ваше второе имя: Манаранг

2. Ваша фамилия: Наварро

(ошибка, попробуйте еще раз)

2. Ваше имя:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("How many names do you like to enter? ");
    int user = input.nextInt();
    String DATA[][][] = new String[user][4][3];

    for(int x=0;x<user;x++){
        System.out.print("\n" + (x+1) +".Enter your first name: ");
        DATA[x][0][0] = new Scanner(System.in).nextLine();
        System.out.print((x+1) +".Enter your midle name: ");
        DATA[x][0][1] = new Scanner(System.in).nextLine();
        System.out.print((x+1) +".Enter your last name: ");
        DATA[x][0][2] = new Scanner(System.in).nextLine();
        for(int y=0;y<user;y++){
                if (x == y){
                }
                else if (DATA[x][0][0].equals(DATA[y][y][0]) && DATA[x][0][1].equals(DATA[y][y][1]) && DATA[x][0][2].equals(DATA[y][y][2])){
                    System.out.println("Ops! Your name is already inputed.");
                    System.out.println("Please Try again.");
                    x-=1;
                    break;

            }
        }

        System.out.print("\n" +(x+1) +".Enter your barangay: ");
        DATA[x][1][0] = new Scanner(System.in).nextLine();
        System.out.print((x+1) +".Enter your city: ");
        DATA[x][1][1] = new Scanner(System.in).nextLine();
        System.out.print((x+1) +".Enter your province: ");
        DATA[x][1][2] = new Scanner(System.in).nextLine();
        System.out.print("\n" +(x+1) +".Enter your mailing address: ");
        DATA[x][2][0] = new Scanner(System.in).nextLine();
        System.out.print((x+1) +".Enter your contact number: ");
        DATA[x][2][1] = new Scanner(System.in).nextLine();
        System.out.print((x+1) +".Enter your email address: ");
        DATA[x][2][2] = new Scanner(System.in).nextLine();
        System.out.print("\n" +(x+1) +".Enter your elementary school: ");
        DATA[x][3][0] = new Scanner(System.in).nextLine();
        System.out.print((x+1) +".Enter your secondary school: ");
        DATA[x][3][1] = new Scanner(System.in).nextLine();
        System.out.print((x+1) +".Enter your tertiary: ");
        DATA[x][3][2] = new Scanner(System.in).nextLine();


    }
}

}

Здесь так много всего плохого. Во-первых: именование ... имена переменных переходят в camelCase в java. ДАННЫЕ были бы какими-то постоянными. Это тоже имя, которое ничего не говорит. Скорее назовите его userData. Затем: ваши счетчики цикла должны называться i, j ... x и y подразумевают (по соглашению), что они являются значениями float / double. i / j - счетчики петель. Давай с этим. Затем: создайте пользователя класс, который имеет эти свойства как поля. Использование ТАБЛИЦЫ, где каждая строка представляет пользователя, противоположно тому, что вы делаете в ООП. А затем вместо того, чтобы иметь многослойную таблицу строк и столбцов, просто создайте массив User[] users. Сделанный.

GhostCat 21.11.2018 10:41

Затем прочтите минимальный воспроизводимый пример и объясните нам Какие, как выглядит ошибка. «Я получаю сообщение об ошибке» - это ничем, с чем мы не можем помочь.

GhostCat 21.11.2018 10:41

И напоследок: используйте только теги соответствующие. Для вашего вопроса совершенно не имеет значения, что вы использовали netbeans для редактирования исходного кода. У вас есть проблема с Java, простая и понятная.

GhostCat 21.11.2018 10:42

DATA[y][y][0] - это опечатка?

Mark Jeronimus 21.11.2018 10:42

Сэр, я знаю только основы, этот код - наша деятельность в нашей школе. нам разрешено использовать только основы, такие как оператор if, цикл for, массив

Jerico M Navarro 21.11.2018 10:45

Конечно. Но все же: например, вы все равно можете использовать более качественное именование.

GhostCat 21.11.2018 11:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
75
2

Ответы 2

В этом коде много проблем. И это совсем не лучший способ сделать это. Но поскольку вы новичок в этом и все еще играете с java, сейчас вы можете внести подобное изменение в свой код и заставить его работать.

import java.util.Scanner;

public class Main {

    static boolean flag;

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("How many names do you like to enter? ");
        int user = input.nextInt();
        String DATA[][][] = new String[user][4][3];

        for (int x = 0; x < user; x++) {
            flag = false;
            System.out.print("\n" + (x + 1) + ".Enter your first name: ");
            DATA[x][0][0] = new Scanner(System.in).nextLine();
            System.out.print((x + 1) + ".Enter your midle name: ");
            DATA[x][0][1] = new Scanner(System.in).nextLine();
            System.out.print((x + 1) + ".Enter your last name: ");
            DATA[x][0][2] = new Scanner(System.in).nextLine();
            for (int y = 0; y < user; y++) {
                if (x == y) {
                } else if (DATA[x][0][0].equals(DATA[y][y][0]) && DATA[x][0][1].equals(DATA[y][y][1]) && DATA[x][0][2].equals(DATA[y][y][2])) {
                    System.out.println("Ops! Your name is already inputed.");
                    System.out.println("Please Try again.");
                    x -= 1;
                    flag = true;
                    break;
                }
            }

            if (flag){
                continue;
            }

            System.out.print("\n" + (x + 1) + ".Enter your barangay: ");
            DATA[x][1][0] = new Scanner(System.in).nextLine();
            System.out.print((x + 1) + ".Enter your city: ");
            DATA[x][1][1] = new Scanner(System.in).nextLine();
            System.out.print((x + 1) + ".Enter your province: ");
            DATA[x][1][2] = new Scanner(System.in).nextLine();
            System.out.print("\n" + (x + 1) + ".Enter your mailing address: ");
            DATA[x][2][0] = new Scanner(System.in).nextLine();
            System.out.print((x + 1) + ".Enter your contact number: ");
            DATA[x][2][1] = new Scanner(System.in).nextLine();
            System.out.print((x + 1) + ".Enter your email address: ");
            DATA[x][2][2] = new Scanner(System.in).nextLine();
            System.out.print("\n" + (x + 1) + ".Enter your elementary school: ");
            DATA[x][3][0] = new Scanner(System.in).nextLine();
            System.out.print((x + 1) + ".Enter your secondary school: ");
            DATA[x][3][1] = new Scanner(System.in).nextLine();
            System.out.print((x + 1) + ".Enter your tertiary: ");
            DATA[x][3][2] = new Scanner(System.in).nextLine();


        }
    }
}

Опять же, это всего лишь небольшой прием для работы с этим кодом. Это неправильный путь. Вам необходимо провести рефакторинг всего кода, чтобы все было сделано правильно. :)

@JericoMNavarro Тогда не забудьте принять ответ, чтобы

GhostCat 21.11.2018 11:21

Согласитесь с Песок. Для меня лучше использовать альтернативный подход, потому что читать ваше решение действительно сложно. Это мое предложение. Думаю, вам могло быть понятнее. P.S. За более чем 15 лет разработки я пару раз сталкивался с массивами более 2D. Используйте класс вместо 3D ... массивов.

private static final class User {

    private final String firstName;
    private final String middleName;
    private final String lastName;

    private String barangay;
    private String city;
    private String province;
    private String mailingAddress;
    private String contactNumber;
    private String email;
    private String elementarySchool;
    private String secondarySchool;
    private String tertiary;

    public User(String firstName, String middleName, String lastName) {
        this.firstName = firstName;
        this.middleName = middleName;
        this.lastName = lastName;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (!(obj instanceof User))
            return false;
        User user = (User)obj;
        return Objects.equals(firstName, user.firstName) && Objects.equals(middleName, user.middleName)
                && Objects.equals(lastName, user.lastName);
    }

    @Override
    public int hashCode() {
        return Objects.hash(firstName, middleName, lastName);
    }
}

private static User getUser(Scanner scan, int i) {
    System.out.print("\n" + i + ". Enter your first name: ");
    String firstName = scan.next();

    System.out.print(i + ". Enter your middle name: ");
    String middleName = scan.next();

    System.out.print(i + ". Enter your last name: ");
    String lastName = scan.next();

    return new User(firstName, middleName, lastName);
}

private static User getUserAdditionalInfo(User user, Scanner scan, int i) {
    System.out.print("\n" + i + ". Enter your barangay: ");
    user.barangay = scan.nextLine();

    System.out.print(i + ". Enter your city: ");
    user.city = scan.nextLine();

    System.out.print(i + ". Enter your province: ");
    user.province = scan.nextLine();

    System.out.print("\n" + i + ". Enter your mailing address: ");
    user.mailingAddress = scan.nextLine();

    System.out.print(i + ". Enter your contact number: ");
    user.contactNumber = scan.nextLine();

    System.out.print(i + ". Enter your email address: ");
    user.email = scan.nextLine();

    System.out.print("\n" + i + ". Enter your elementary school: ");
    user.elementarySchool = scan.nextLine();

    System.out.print(i + ". Enter your secondary school: ");
    user.secondarySchool = scan.nextLine();

    System.out.print((i + 1) + ".Enter your tertiary: ");
    user.tertiary = scan.nextLine();

    return user;
}

private static Set<User> getUsers() {
    try (Scanner scan = new Scanner(System.in)) {
        System.out.print("How many names do you like to enter? ");
        Set<User> users = new LinkedHashSet<>();

        for (int i = 1, total = scan.nextInt(); i <= total; ) {
            User user = getUser(scan, i);

            if (users.contains(user)) {
                System.out.println("Ops! Your name is already inputed.");
                System.out.println("Please Try again.");
            } else {
                users.add(getUserAdditionalInfo(user, scan, i));
                i++;
            }
        }

        return Collections.unmodifiableSet(users);
    }
}

public static void main(String[] args) {
    Set<User> users = getUsers();
}

Другие вопросы по теме