私のプログラムは25のサイズの文字列配列で構成されています。私がしようとしているのは、これに要素を追加するaddメソッドを作成することです配列同じ文字列を追加しようとすると、特定のアイテムがString配列内にリストされている回数を表示するメソッドを作成します(これを行うためにハッシュマップを使用します)。プログラムは計画どおりに機能していません。新しいメソッドを追加すると、配列の次のインデックスにインクリメントするのではなく、インデックス0で再開するので(addメソッドi = 0を呼び出すたびに意味があります) 。何かが追加されたら次のインデックスに行くためにこのメソッドを変更するために私は何ができますか?ありがとう、以下のコードを参照してください:私のプログラムでちょっとした問題に遭遇しました(ArrayListは使えません)
import java.util.*;
public class Assignment1 {
public static void main(String[] args){
new Assignment1();
}
// This will act as our program switchboard
public Assignment1(){
Scanner input = new Scanner(System.in);
String[] flowerPack = new String[25];
int[] flowerCount = new int[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[]) {
// TODO: Add a flower that is specified by the user
int i = 0;
String flowerName;
Scanner flowerInput = new Scanner(System.in);
System.out.println("Please enter the name of a flower type to add:");
flowerName = flowerInput.nextLine();
flowerPack[i] = flowerName;
i++;
}
private void removeFlower(String flowerPack[]) {
// TODO: Remove a flower that is specified by the user
String flowerName;
Scanner flowerInput = new Scanner(System.in);
System.out.println("Please enter the name of a flower type to remove");
flowerName = flowerInput.nextLine();
for (int i = 0; i < flowerPack.length; i++) {
if (flowerPack[i].equals(flowerName)) {
flowerPack[i] = ""; //Will ask professor if we should set to NULL instead
}
}
}
private void sortFlowers(String flowerPack[]) {
// TODO: Sort the flowers in the pack (No need to display them here) - Use Selection or Insertion sorts
// NOTE: Special care is needed when dealing with strings! research the compareTo() method with strings
Arrays.sort(flowerPack);
}
private void searchFlowers(String flowerPack[]) {
// TODO: Search for a user specified flower
String flowerType;
Scanner flowerInput = new Scanner(System.in);
System.out.println("Please enter the name of a flower to search for:");
flowerType = flowerInput.nextLine();
for (int i = 0; i < flowerPack.length; i++) { //done in O(n) time This is a linear search
if (flowerPack[i].equals(flowerType)) {
System.out.println("Found your flower " + flowerPack[i]);
break;
} else {
System.out.println("Invalid flower type!");
break;
}
}
}
private void displayFlowers(String flowerPack[]) {
// TODO: Display only the unique flowers along with a count of any duplicates
/*
* For example it should say
* Roses - 7
* Daffodils - 3
* Violets - 5
*/
Map<String,Integer> theFlowers = new HashMap<String, Integer>();
for(int i=0;i<flowerPack.length;i++){
if(theFlowers.get(flowerPack[i])==null){
theFlowers.put(flowerPack[i],1);
}else{
theFlowers.put(flowerPack[i], theFlowers.get(flowerPack[i])+1);
}
}
System.out.println(theFlowers);
}
}
コードレビュー項目:あまりにも多くの 'Scanner'オブジェクトは必要ありません。すべてのメソッドが 'System.in'から読み込んでいるので、単一のインスタンスを使用してすべてのメソッド間で共有することができます。 –
LOL true、少し冗長です。コードレビューをありがとう。 – Linuxn00b