首页 > 解决方案 > 在其他方法中替换数组中的位置

问题描述

首先 - 我感谢任何花时间实际查看此内容的人,因为我觉得这是一个相当烦人的请求。

我刚刚在一系列 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 件事。感谢您的考虑。

标签: javaarraysinputmethods

解决方案


我建议你声明 ArrayList 对象而不是普通的数组声明;为了避免代码上的繁重工作,您可以在特定位置使用预定义的 add(int position, an element with your data type) 方法将元素添加到 ArrayList 对象中,并且 ArrayList 会自动将其余元素移动到它的右侧. 并且有几个原因。有关 Java 中 ArrayList 的更多信息,请查看:-

Java中的数组与数组列表

Array 和 ArrayList 哪个更快?

这里是 add() 方法的一个例子;在特定位置插入元素: - Java.util.ArrayList.add() 方法


推荐阅读