2017-02-11 38 views
0

我創建了一個包含25個Flower對象的數組。每個花對象都包含花名(String),花色(String),荊棘(布爾)和花香(String)。這些屬性由'Flower'類處理。如果錯誤是由任何一類造成的,我粘貼了兩個類。當菜單提示輸入信息時,用戶輸入花的所有屬性。用戶輸入他們想要的所有花後,我需要能夠打印出整個陣列以及每個花的數量。例如,如果用戶放入10朵花,並且有3朵玫瑰,2朵禮來,3朵蒲公英和2朵蘭花,我需要打印整個陣列,然後打印每朵花出現的數字。爲顯示格式爲:計算Java Array對象內屬性的出現

花的名字:玫瑰花朵顏色:紅色的花有刺:真花的香味:甜 玫瑰 - 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; 
       } 
      } 
     }   
    } 
} 

花卉類如下。 package assignment2;

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