Замена позиции в массиве среди других методов - PullRequest
0 голосов
/ 16 июня 2020

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

Я только что выполнил большое задание в конце серии Java 101 видео. Задача состоит в том, чтобы разработать метод списка гостей (как в ресторане или на вечеринке) и некоторые функции вместе с ним. Это действительно первый раз, когда я написал что-либо с использованием нескольких методов.

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

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

import java.util.Scanner;
import java.io.*;
import java.lang.*;
import java.util.*;

public class GuestList_Edited {
    public static void main(String[] args) {
        // Setup for array, setup for scanner
        String[] guests = new String[11];
        Scanner scanner = new Scanner(System.in);

        // A method to put these here so we don't always have to add guests. This method automatically inserts five guests into the guest list. 
        InsertNames(guests);

        // Do-while loop to make sure that this menu screen shows up every time asking us what we want to do.
        // It also makes certain that the menu shows up when we initially run the program.
        do {
            displayMenu(guests);

            // This must remain in main for the rest of the program to reference it.
            int option = getOption();

            // If loop that will allow people to add guests
            if (option == 1) {
                addGuest(guests);

            } else if (option == 2) {
                RemoveGuest(guests);

            } else if (option == 3) {
                RenameGuest(guests);

            } else if (option == 4) {
                insertGuest(guests);

            } else if (option == 5) {
                System.out.println("Exiting...");
                break;
            }

        } while (true);
    }

    // This displays the starting menu
    public static void displayMenu(String SentArr[]) {
        System.out.println("-------------");
        System.out.println(" - Guests & Menu - ");
        System.out.println();
        GuestsMethod(SentArr); // Makes all null values equal to --
        System.out.println();
        System.out.println("1 - Add Guest");
        System.out.println("2 - Remove Guest");
        System.out.println("3 - Rename guest");
        System.out.println("4 - Insert new guest at certain position");
        System.out.println("5 - Exit");
        System.out.println();
    }

    // This prints all the guests on the guest list and also adjusts the guest list when a guest is removed
    public static void GuestsMethod(String RecievedArr[]) {
        // If loop which prints out all guests on the list.
        // "Null" will be printed out for all empty slots.

        for (int i = 0; i < RecievedArr.length - 1; i++) {

            // Make all null values and values after the first null value shift up in the array.
            if (RecievedArr[i] == null) {
                RecievedArr[i] = RecievedArr[i + 1];
                RecievedArr[i + 1] = null;
            }

            // Make all null's equal to a string value.
            if (RecievedArr[i] == null) {
                RecievedArr[i] = " ";
            }

            // If values are not equal to a blank string value, assign a number.
            if (RecievedArr[i] != " ") {
                System.out.println((i + 1) + ". " + RecievedArr[i]);
            }

            // If the first value is a blank string value, then print the provided line.
            if (RecievedArr[0] == " ") {
                System.out.println("The guest list is empty.");
                break;
            }
        }
    }

    // I've really got no idea what this does or why I need a method but the course I'm taking said to create a method for this. 
        // It gets the desired option from the user, as in to add a guest, remove a guest, etc. 
    static int getOption() {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Option: ");
        int Option = scanner.nextInt();

        return Option;
    }

    // Allows users to add guests 
    public static String[] addGuest(String AddArr[]) {

        Scanner scanner = new Scanner(System.in);

        for (int i = 0; i < AddArr.length; i++) {
            // The below if statement allows the program to only ask for a name when a given space is "null", meaning empty.
            if (AddArr[i] == " ") {
                // so the loop runs until it hits a null value.
                System.out.print("Name: ");
                AddArr[i] = scanner.nextLine();
                // Then that same value which was null will be replaced by the user's input
                break;
            }
        }
        return AddArr;
    }

    public static String[] RemoveGuest(String RemoveArr[]) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Number of guest: ");
        int input = scanner.nextInt();
        int number = input - 1;

        // While loop to look for numbers that fit within array's range
        while (number < -1 || number > 9) {
            System.out.println("Trying to pull a fast one? No more funny games, give me a real number to work with.");
            System.out.println(" ");
            System.out.println("What is the number of the guest");
            input = scanner.nextInt();
            number = input - 1;
        }

        for (int i = 0; i < RemoveArr.length; i++) {

            if (RemoveArr[number] != null) {
                RemoveArr[number] = null;
                break;
            }
        }
        return RemoveArr;
    }

    // This inserts names into the array so we don't have to add guests everytime. 
    public static String[] InsertNames(String InsertNames[]) {

        InsertNames[0] = "Jacob";
        InsertNames[1] = "Edward";
        InsertNames[2] = "Rose";
        InsertNames[3] = "Molly";
        InsertNames[4] = "Christopher";
//      guests[5] = "Daniel";
//      guests[6] = "Timblomothy";
//      guests[7] = "Sablantha";
//      guests[8] = "Tagranthra";

        return InsertNames;
    }

    public static String[] RenameGuest(String RenamedGuests[]) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Number of guest: ");
        int input = scanner.nextInt();
        int number = input - 1;

        // While loop to look for numbers that fit within array's range
        while (number < -1 || number > 9) {
            System.out.println("Trying to pull a fast one? No more funny games, give me a real number to work with.");
            System.out.println(" ");
            System.out.println("What is the number of the guest");
            input = scanner.nextInt();
            number = input - 1;
        }

        for (int i = 0; i < RenamedGuests.length; i++) {

            if (RenamedGuests[number] != null) {
                RenamedGuests[number] = null;
                System.out.println("What would you like the guest's name to be?");
                String NewName = scanner.next();
                RenamedGuests[number] = NewName;
                break;
            }
        }
        return RenamedGuests;
    }

    // The final method which I am struggling with. 
    public static String[] insertGuest(String NewPositionArray[]) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Number: ");
        int num = scanner.nextInt();
        scanner.nextLine();

        if (num >= 1 && num <= 10 && NewPositionArray[num - 1] != null)
            System.out.print("Name: ");
            String name = scanner.nextLine();

        for (int i = 10; i > num - 1; i--) {
            NewPositionArray[i] = NewPositionArray[i - 1];
            NewPositionArray[num - 1] = name;
        }

        if (num < 0 || num > 10) {
            System.out.println("\nError: There is no guest with that number.");
        }

        return NewPositionArray;
    }
}

Еще раз спасибо. Я понимаю, что, вероятно, сделал 1000 ошибок здесь. Я ценю ваше внимание.

1 Ответ

0 голосов
/ 16 июня 2020

Я рекомендую вам объявить объект ArrayList вместо обычного объявления массива; чтобы избежать тяжелой работы над кодом, где вы можете добавить элемент в объект ArrayList с помощью предопределенного метода добавления (позиция int, элемент с вашим типом данных) в указанной c позиции, и ArrayList автоматически переместит остальные элементы в право на это. и по нескольким причинам. для получения дополнительной информации о ArrayList в Java, пожалуйста, посмотрите: -

Array vs ArrayList в Java

Что быстрее среди массивов и ArrayList?

Вот пример метода add (); который вставляет элемент в указанную c позицию: - Java .util.ArrayList.add () Метод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...