2016-12-11 12 views
0

このプロジェクトの目的は、ユーザー入力によって渡されたすべてのポケモンを追加して保持するpokedexを作成することです。ユーザがポケモンに既に格納されているポケモンを入力すると、「複製」という単語がコンソールに印刷されるはずである。オブジェクト配列内に実際の複製が存在しない場合でも、duplicateという単語が出力されます。コンソールからの出力は次のとおりです。オブジェクトの配列で重複を見つける

新しいPokeDexへようこそ! あなたの地域にはポケモンの数はいくつですか?:3

あなたの新しいポケモンは3ポケモンを保持できます。それを使い始めましょう!

  1. 一覧ポケモン
  2. ポケモン
  3. チェックを追加ポケモンの統計
  4. ソートポケモン
  5. 出口

何をしますか? 2

ポケモンの種を入力してください:赤 重複

今ここに、おそらく次のクラスでは、このエラー

import java.util.Scanner; 

public class Project4 { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Welcome to your new PokeDex!"); 
     System.out.print("How many Pokemon are in your region?: "); 
     int size = input.nextInt(); 
     Pokedex pokedex = new Pokedex(size); 
     System.out.println("\nYour new Pokedex can hold " + size + " Pokemon. Let's start using it!"); 
     int choice = 0; 
     boolean done = false; 

     while (!done) { 
      System.out.println("\n1. List Pokemon\n2. Add Pokemon\n3. Check a Pokemon's Stats" + "\n4. Sort Pokemon\n5. Exit"); 
      System.out.print("\nWhat would you like to do? "); 
      choice = input.nextInt(); 

      switch (choice) { 
       case 1: 
        String[] pokemonList = pokedex.listPokemon(); 
        if (pokemonList == null) 
         System.out.println("Empty"); 
        else 
         for (int i = 0; i < pokemonList.length; i++) { 
          System.out.println((i + 1) + ". " + pokemonList[i]); 
         } 
        break; 
       case 2: 
        System.out.print("\nPlease enter the Pokemon's Species: "); 
        String species = input.next(); 
        pokedex.addPokemon(species); 
        break; 
      } 
     } 
    } 
} 

を作り、私が追加されます実際のメソッドを持ってすることができ使用されているすべてのコードがありますポケモンとPokedexのコンストラクタ

public class Pokedex { 
    Pokemon[] pokedex; 
    String pokeArray[]; 

    public Pokedex(int size) { 
     pokedex = new Pokemon[size]; 
     pokeArray = new String[size]; 
    } 

    public boolean addPokemon(String species) { 
     Pokemon stuff = new Pokemon(species); 

     for (int i = 0; i < pokedex.length; i++) { 
      if (pokedex[i] == null) { 
       pokedex[i] = stuff; 
      } 

      else if (i < pokedex.length && pokedex[i] != null) { 
       System.out.println("Max"); 
      } 

      if (pokedex[i].getSpecies().equalsIgnoreCase(species)) { 
       System.out.print("Duplicate"); 
       break; 
      } 
     } 

     return false; 
    } 
} 

大量のコードについて申し訳ありませんが、予想される結果が出ている。

+1

[宿題に関する質問と回答はどうすればいいですか?](http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions)を参照してください。 – lexicore

答えて

0

それはそれをやっている理由は、ここでのコードのこのビットは次のとおりです。

public boolean addPokemon(String species) 
{ 
    Pokemon stuff = new Pokemon(species); 
    for (int i = 0; i < pokedex.length; i++) 
    { 
     if (pokedex[i] == null) 
      pokedex[i] = stuff; 
     else if (i < pokedex.length && pokedex[i] !=null) 
      System.out.println("Max"); 
     if(pokedex[i].getSpecies().equalsIgnoreCase(species)) 
     { 
      System.out.print("Duplicate"); 
      break; 
     } 
    } 
    return false; 
} 

問題は、構文のほんの少し不足しています。ユーザー入力サイズまで、配列内のすべての要素がいっぱいの場合、あなたのforループでは、あなたは

A)は、配列

B)の空のスポットがあるかどうかを確認

とC )配列内の要素が、追加しようとしている要素と一致する場合。

問題は、Cがの代わりにelse ifであるために発生しています。 Aはインデックスがヌルであることを知るので、新しいポケモンをPokedexに割り当てます。それでCはifの代わりにifなら、あなたが新しいポケモンを割り当てた後に実行し、今追加したポケモンを見てそれが重複していると言います。これを修正するなら、それをelseに変更する。

また、Aにはbreak;が存在しないため、配列のすべての要素が最初に入力された要素に割り当てられ、それ以上の追加がMaxを呼び出す原因となります。私は、コードを編集し、これは私はそれが私のために働いていたものです:

public boolean addPokemon(String species) 
{ 
    Pokemon stuff = new Pokemon(species); 
    for (int i = 0; i < pokedex.length; i++) 
    { 
     if(pokedex[i] !=null && pokedex[i].getSpecies().equalsIgnoreCase(species)) 
     { 
      System.out.println("Duplicate"); 
      break; 
     } 
     else if (pokedex[i] == null) 
     { 
      pokedex[i] = stuff; 
      break; 
     } 
     else if(i + 1 == pokedex.length) 
     { 
      System.out.println("Max"); 
      break; 
     } 
    } 
    return false; 
} 

また、好奇心から、なぜaddPokemon()関数はbooleanですか?あなたは値を返すが(任意だが)、その値で何もしない。あなたはそれを無効にして、何も返さずに、それはまあまあうまくいくでしょう。

関連する問題