2017-02-11 2 views
0

Я создал массив из 25 цветочных объектов. Каждый цветочный объект держит имя цветка (String), цвет цветка (String), наличие шипов (булевых) и цветочный аромат (String). Эти атрибуты обрабатываются классом «Цветок». Я вставил оба класса, если ошибка вызвана одним классом. Пользователь вводит все атрибуты цветов, когда меню запрашивает информацию. После того, как пользователь вводит все цветы, которые они хотят, мне нужно иметь возможность распечатывать весь массив и счетчик количества каждого цветка. Например, если пользователь кладет 10 цветов и есть 3 розы, 2 лилии, 3 одуванчика и 2 орхидеи, мне нужно распечатать весь массив, а затем напечатать номер, в котором присутствовал каждый цветок. Формат дисплея:Подсчет появления атрибутов внутри объектов массива Java

Цветок Имя: Цветок розы Цвет: Красный цветок имеет шипы: истинный аромат цветов: Сладкий Rose - 3 Lilly - 3 одуванчик - 3 Orchid - 2

Я способный распечатать массив, как показано, но не может заставить переменную счетчика работать правильно. Мне не нужно сортировать этот массив.

Другая проблема, которую я получаю в ошибке 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; 
    } 
} 

ответ

0
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]); 
     } 
    }