2017-01-07 3 views
1

私はプログラミングに関しては助けを求めていました。私のプログラムは、ユーザーによって入力された名前や年齢などの異なる属性を持つdogオブジェクトのArrayList(dogRegister)を持っています。ArrayList、forループとif文に関する問題 - リスト内の各項目の行を出力します

プログラムは、犬の年齢を更新して、リストから犬を削除することができるはずです。ユーザーは削除する犬の名前を入力するように求められ、入力された名前がリストにあれば犬は削除されます。名前がリストに含まれていない場合、プログラムは「Dog not found」と表示します。年齢コマンドにも同じ名前が付けられていれば、犬は1歳になるでしょう。そうでない場合 - 「犬が見つかりません」。

私はifステートメントとその条件に苦しんでいます。私のコードと戦略は機能しません。なぜなら、正しいものが見つかるまでリストのすべての項目に「見つからない」というメッセージが表示されるからです。私はそれを一度印刷して、そのアイテムが見つかったかどうかだけを伝えたいだけです。どのようにそれを修正するための任意のアイデア?

私のコードをもっと見る必要があるかどうか教えてください。

public void deleteDog(){ 
    System.out.print("Enter name of dog to delete: "); 
    String nameOfDogToDelete = readString(); //returns the nextLine(); 

    for (Dog dl : dogRegister) { 
     if (dl.getName().contains(nameOfDogToDelete)) { 
      dogRegister.remove(dl); 
      System.out.println("Dog deleted."); 
     } 
     else if (!dl.getName().contains(nameOfDogToDelete)) { 
      System.out.println("Dog not found."); 
     } 
    } 
} 

public void editAge(){ 
    System.out.print("Enter name of aging dog: "); 
    String nameOfAgingDog = readString(); //returns the nextLine(); 

     for (Dog a : dogRegister) { 
      if (a.getName().contains(nameOfAgingDog)) { 
       a.updateAge(); //method returning the dog's age++ 
       System.out.println("Dog's age updated."); 
      } 
      else if (!a.getName().contains(nameOfAgingDog)) { 
       System.out.println("Dog not found."); 
      } 
     } 
    } 

答えて

1

つの提案:できるだけ早くさらなる反復がチェックされないようにあなたは、エントリを削除すると、ループのうち

  1. ブレイク。

  2. 「見つからない」ケースがその時点まで印刷されないようにするには、「見つからない」ケースの印刷を含めないでください。リスト全体を確認し、エントリがまだ見つからない場合は、「見つからない」と印刷します。ブール変数を使ってこれを追跡することができます。

if条件でチェックを行い、もう一度同じ条件をチェックしてelse条件をチェックします。だから、削除する犬の名前が見つかると、それを削除し、ループ内の他の反復をチェックインするためにさらに進みます。だからあなたが犬が削除され、それを削除するとすぐに、ループから抜け出す。

public void deleteDog(){ 
    System.out.print("Enter name of dog to delete: "); 
    String nameOfDogToDelete = readString(); //returns the nextLine(); 
    boolean isFound = false; //To keep track of whether the dog is found or not 
    for (Dog dl : dogRegister) { 
     if (dl.getName().contains(nameOfDogToDelete)) { 
      dogRegister.remove(dl); 
      System.out.println("Dog deleted."); 
      isFound = true; 
      break;//Break out of the loop as soon as you find it 
     } 
     // else //no need to check the negation of the above condition again 
     // System.out.println("Dog not found."); 
     // } 
    } 
    if (!isFound) 
     System.out.println("Dog not found."); 
} 
+0

忍耐、男を..見つからない..私は説明を入力して、あなたが – SoulRayder

+0

をコメントとして、私は私のダウンの投票を撤回したが、これはまだ動作しません。例えば、 'nameOfDogToDelete'がリスト内の最初の犬でないとどうなるか考えてみてください... –

+0

説明を更新しました – SoulRayder

1

ループが行われている間に、犬が見つかったかどうかをチェックし、見つかったブール値フィールドをtrueとマークします。見つからない場合は、ときループ終了、印刷downvoteに簡単

public void deleteDog(){ 
    System.out.print("Enter name of dog to delete: "); 
    String nameOfDogToDelete = readString(); //returns the nextLine(); 
    boolean found =false; 

    for (Dog dl : dogRegister) { 
     if (dl.getName().contains(nameOfDogToDelete)) { 
      dogRegister.remove(dl); 
      System.out.println("Dog deleted."); 
      found =true; 
      break; 
     } 
    } 
    if(!found){ 
    System.out.println("Dog not found."); 
    } 
} 
+0

そのコードの外にいくつかの説明を含めることができます。 –

+0

追加して、あなたはいつもあなたがコードで理解できなかったことを尋ねることができます。 – khetanrajesh

+1

私はオペレーションではありません、私はあなたのコードをうまく理解しますが、説明のないコードは通常本当に役立つものではありません。 –

関連する問題