繁体   English   中英

计算Java数组对象内部属性的出现

[英]Counting occurrence of attributes inside the objects of a Java Array

我创建了一个由25个Flower对象组成的数组。 每个花朵对象都包含花朵名称(字符串),花朵颜色(字符串),荆棘(布尔值)和花朵气味(字符串)。 这些属性由“花”类处理。 我已经粘贴了两个类,以防错误是由任何一个类引起的。 当菜单提示您输入信息时,用户输入花朵的所有属性。 在用户输入了他们想要的所有花朵之后,我需要能够打印出整个数组以及每个花朵有多少的计数器。 例如,如果用户放入10朵花,并且有3朵玫瑰,2朵礼来公司,3朵蒲公英和2朵兰花,我需要打印整个数组,然后打印每朵花的编号。 显示格式为:

花名:玫瑰花颜色:红色花有刺:真实的花香:甜玫瑰-3莉莉-3蒲公英-3兰花-2

我能够打印出如图所示的数组,但无法使count变量正常工作。 我不需要对该数组进行排序。

我遇到OutOfBounds错误的另一个问题。 在遇到此错误之前,我只能放入24朵花。 第25朵花触发它。 我以为这是addFlower索引计数器所涵盖的,但是显然,我是不正确的。

此分配不允许使用ArrayList,这将使此过程更加简单。 我们也没有探索错误处理。

当前代码是:

package assignment2;
import java.util.Scanner;

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

    public Assignment2() 
    {
        Scanner input = new Scanner(System.in);
        Flower flowerPack[] = new Flower[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: Search for a flower.");
            System.out.println("4: 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:
                searchFlowers(flowerPack);
                break;
            case 4:
                displayFlowers(flowerPack);
                break;
            case 0:
                System.out.println("Thank you for using the flower pack interface. See you again soon!");
                input.close();
                System.exit(0);             
            }
        }   
    }


    private void addFlower(Flower flowerPack[]) 
    {       
        String flowerName; // Type of flower
        String flowerColor; // Color of the flower
        Boolean hasThorns = false; // Have thorns?
        String flowerScent;   // Smell of the flower

        int index = 0;
        Scanner input = new Scanner(System.in);
        System.out.println("What is the name of flower is it?");
        flowerName = input.nextLine();
        System.out.println("What color is the flower?");
        flowerColor = input.nextLine();
        System.out.println("Does the flower have thorns?");
        System.out.println("Choose 1 for yes, 2 for no");
        int thorns = input.nextInt();
        if(thorns == 1)
        {
            hasThorns = true;
        }
        input.nextLine();
        System.out.println("What scent does the flower have?");
        flowerScent = input.nextLine();        

        Flower fl1 = new Flower(flowerName, flowerColor, hasThorns, flowerScent);  

        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] = fl1;  
                break;
            }                       
        }
    }

    private void removeFlower(Flower flowerPack[]) 
    {       
        Scanner input = new Scanner(System.in);
        System.out.println("What student do you want to remove?");
        displayFlowers(flowerPack);
        System.out.println("Choose 1 for the first flower, 2 for the second, etc" );
        int index = input.nextInt();
        index = index - 1;

        for (int i = 0; i < flowerPack.length - 1; i++) 
        {
            if(flowerPack[i] != null && flowerPack[i].equals(flowerPack[index]))
            {               
                flowerPack[i] = flowerPack[i + 1];                
            }
        } 
    }

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

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

    private void displayFlowers(Flower flowerPack[])
    {
        int count = 1;

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

花类在下面。 包裹分配2;

public class Flower 
{   
    @Override
    public String toString() 
    {
        return "Flower name: " + this.getFlowerName() +  "\t" +          
               "Flower color: " + this.getFlowerColor() + "\t" +
               "Flower has thorns: " + this.getHasThorns() + "\t" +
               "Flower scent: " + this.getFlowerScent() + "\t" ;
    }   

    private String flowerName;
    private String flowerColor;
    private Boolean hasThorns;
    private String flowerScent;
    Flower(String flowerName, String flowerColor, Boolean hasThorns, String flowerScent) 
    {
        this.flowerName = flowerName;
        this.flowerColor = flowerColor;
        this.hasThorns = hasThorns;
        this.flowerScent = flowerScent;
    }   

    String getFlowerName() 
    {
        return flowerName;
    }

    private void setFlowerName(String flowerName)
    {
        this.flowerName = flowerName;
    }

    private String getFlowerColor() 
    {
        return flowerColor;
    }

    private void setFlowerColor()
    {
        this.flowerColor = flowerColor;
    }

    private Boolean getHasThorns() 
    {
        return hasThorns;
    }

    private void setHasThorns()
    {
        this.hasThorns = hasThorns;
    }

    private String getFlowerScent() 
    {
        return flowerScent;
    }

    private void setFlowerScent()
    {
        this.flowerScent = flowerScent;
    }
}
private void displayFlowers(Flower flowerPack[])
    {       
        String[] usedNames = new String[flowerPack.length];
        int[] nameCounts = new int[flowerPack.length];
        int usedNamesCount = 0;

        for (int i = 0; i < flowerPack.length; i++) 
        {
            Flower flower = flowerPack[i];
            if (flower == null) 
            { 
                continue; 
            }                
            int nameIndex = -1;
            for (int j = 0; j < usedNamesCount; j++) 
            {
                String usedName = usedNames[j];                    
                if (flower.getFlowerName().equals(usedName)) 
                {
                    nameIndex = j;
                    break;
                }
            }                
            if (nameIndex != -1) 
            {
                nameCounts[nameIndex] += 1;
            } 
            else 
            {
                usedNames[usedNamesCount] = flower.getFlowerName();
                nameCounts[usedNamesCount] += 1;
                usedNamesCount++;
            }
        }            
        for (int i = 0; i < usedNamesCount; i++) 
        {
            System.out.println(usedNames[i] + "s - " + nameCounts[i]);
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM