java - 字符串数组操作

标签 java arrays

该数组创建时包含 25 个可能的元素,并且仅当用户输入要放入数组中的字符串时才会填充该数组。除方法内的主体之外的所有代码都是 provided .

据我所知

  • addFlower方法运行正常
  • sortFlowers方法运行正常
  • searchFlowers方法运行正常

removeFlower方法让我完全困惑。任何有关前往这里的方向的帮助将不胜感激。

displayFlowers方法是目前的问题。

我得到的输出位于底部。我不明白为什么输出是这样的。

import java.util.Scanner;

public class Assignment01Driver 
{
    public static void main(String[] args) 
    {
        new Assignment01Driver();
    }

    // This will act as our program switchboard
    public Assignment01Driver() 
    {
        Scanner input = new Scanner(System.in);
        String[] flowerPack = new String[25];

        System.out.println("Welcome to my flower pack interface.");
        System.out.println("Please select a number from the options below");
        System.out.println("");

        while (true) 
        {
            // Give the user a list of their options
            System.out.println("1: Add an item to the pack.");
            System.out.println("2: Remove an item from the pack.");
            System.out.println("3: Sort the contents of the pack.");
            System.out.println("4: Search for a flower.");
            System.out.println("5: Display the flowers in the pack.");
            System.out.println("0: Exit the flower pack interfact.");

            // Get the user input
            int userChoice = input.nextInt();           

            switch (userChoice) 
            {
            case 1:
                addFlower(flowerPack);
                break;
            case 2:
                removeFlower(flowerPack);
                break;
            case 3:
                sortFlowers(flowerPack);
                break;
            case 4:
                searchFlowers(flowerPack);
                break;
            case 5:
                displayFlowers(flowerPack);
                break;
            case 0:
                System.out.println("Thank you for using the flower pack interface. See you again soon!");
                System.exit(0);
            }           
        }       
    }

    private void addFlower(String flowerPack[]) 
    {
        String str;
        int index = 0;
        Scanner input = new Scanner(System.in);
        System.out.println("What type of flower are you adding?");
        str = input.nextLine();

        for (int i = 0; i < flowerPack.length; i++) 
        {
            if (flowerPack[i] != null) 
            {
                index++;
                if (index == flowerPack.length) 
                {
                    System.out.println("The pack is full");
                }
            } else 
            {
                flowerPack[i] = str;
                System.out.println("Added: " + str + " at index " + i);
                break;
            }
        }       
    }

    private void removeFlower(String flowerPack[]) 
    {
        String flr;
        Scanner input = new Scanner(System.in);
        System.out.println("What flower do you want to remove?");
        flr = input.nextLine();

        for (int i = 0; i < flowerPack.length - 1; i++) 
        {
            if (flr.equalsIgnoreCase(flowerPack[i])) 
            {
                flowerPack[i] = flowerPack[i + 1];
            }
        }       
    }

    private void sortFlowers(String flowerPack[]) 
    {
        for (int i = 0; i < flowerPack.length; i++) 
        {
            String currentMin = flowerPack[i];
            int currentMinIndex = i;

            for (int j = i; j < flowerPack.length; j++) 
            {
                if (flowerPack[j] != null) 
                {
                    if (currentMin.compareToIgnoreCase(flowerPack[j]) > 0) 
                    {
                        currentMin = flowerPack[j];
                        currentMinIndex = j;
                    }
                }
            }
            if (currentMinIndex != i) {
                flowerPack[currentMinIndex] = flowerPack[i];
                flowerPack[i] = currentMin;
            }
        }
    }   

    private void searchFlowers(String flowerPack[]) 
    {
        Scanner input = new Scanner(System.in);
        String str;
        System.out.println("What flower would you like to search for?");
        str = input.nextLine();     
        boolean found = false;

        for (int i = 0; i < flowerPack.length; i++) {
            if (flowerPack[i] != null && flowerPack[i].equalsIgnoreCase(str)) 
            {
                found = true;
                break;
            }
        }
        if (found) 
        {
            System.out.println("We found your flower.");
        } 
        else 
        {
            System.out.println("That flower was not found.");
        }       
    }

    private void displayFlowers(String flowerPack[]) 
    {
        sortFlowers(flowerPack); 
        int count = 1;                          
        for (int i = 0; i < flowerPack.length - 1; i++) 
        {       
            if (flowerPack[i] != null)
            {           
                if (flowerPack[i].equalsIgnoreCase(flowerPack[i+1]))
                {               
                    count++;
                }   
            }
            else
            {
                if (flowerPack[i] == null)
                {
                    break;  
                }
            }
        System.out.println(flowerPack[i] + "s - " + count);
        count = 1;
        }
    }
}


Input:
1 <enter>, "Lilly" <enter"
1 <enter>, "Lilly" <enter>
1 <enter>, "Rose" <enter>
5 <enter>

Output:
Lillys - 2
Lillys - 1
Roses - 1

最佳答案

您必须在 for 循环之外声明 i

int count = 1;
for (int i = 0; i < flowerPack.length - 1; i++) 
{       
    if (flowerPack[i] != null)
    {           
        if (flowerPack[i].equalsIgnoreCase(flowerPack[i+1]))
        {               
            count++;
        }   
        else
        {
            System.out.println(flowerPack[i] + "s - " + count);
            count = 1;
        }
    }
    else
    {
        if (flowerPack[i] == null)
        {
            break;  
        }
    }
 }

关于java - 字符串数组操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35175376/

相关文章:

java - java 中的 Arrays.copyOfRange 方法抛出不正确的异常

php - 编写干净的多维数组

java - 在 JFrame 上拖动圆圈

java - 无法编译 JNI 程序 rJava

java - 如何在android项目中包含sqlite4java

php - 获取 json 编码数组会耗尽内存

java - 将字符连接到字符串数组时获取 'null'

java - android应用程序内计费错误IInAppBillingService.aidl

ios - 从数组返回的属性创建常量

java - java中二维数组如何按字母顺序排序