2017-09-24 27 views
1

私は、データ内のすべての電話番号(つまり、発信者IDに似ている)の全期間を合計する方法が必要な練習に取り組んでいます。私は期間を合計することに成功しましたが、すべてのデータが印刷されているわけではありません。私はこれがなぜであるのかを考えようとしてきましたが、私はそれの周りに私の頭を包むことはできません。どんな助けでも大歓迎です。以下 はコードです:ループが最後まで実行されていませんか?

//initial code provided 
    public static void main(String[] args) { 
      String[] phoneNumbers = new String[100]; 
      int[] callDurations = new int[phoneNumbers.length]; 
      int size = 0; 

      size = addCall(phoneNumbers, callDurations, size, "555-555-5555", 137); 
      size = addCall(phoneNumbers, callDurations, size, "555-555-0000", 12); 
      size = addCall(phoneNumbers, callDurations, size, "555-555-1234", 26); 
      size = addCall(phoneNumbers, callDurations, size, "555-555-8888", 10); 
      size = addCall(phoneNumbers, callDurations, size, "555-555-8888", 10); 
      size = addCall(phoneNumbers, callDurations, size, "555-555-7777", 10); 

     } 


     public static int addCall(String[] phoneNumbers, int[] callDurations, int size, String newNumber, int newDuration) { 
      if (size >= phoneNumbers.length) { 
      System.out.println("Error adding " + newNumber + ": array capacity exceeded."); 
      } else { 
      phoneNumbers[size] = newNumber; 
      callDurations[size] = newDuration; 
      size++; 
      } 

      return size; 
     } 

//the portion of code that I'm trying to write 

     public static void totalDurations(String[] phoneNumbers, int[] 
     callDurations, int size) { 
      String[] copyNum = new String[phoneNumbers.length]; 
      int[] copyDur = new int[phoneNumbers.length]; 
      int newSize = size; 
      int pos = 1; //counter for next available empty cell 
      copyNum[0] = phoneNumbers[0]; 
      copyDur[0] = callDurations[0]; 

      for (int i = 0; i < newSize; i++){ 
       for (int j = 1; j < size; j++){ 
       if (copyNum[i] != phoneNumbers[j]){ 
        copyNum[i+pos] = phoneNumbers[j]; 
        pos++; 
       } 
       else { 
        copyDur[i] += callDurations[j]; 
        newSize = newSize -1; 
       } 
       }   
      System.out.println(copyNum[i] + ":" + copyDur[i]+ "s"); 
      } 
      } 

私の現在の出力

Total Durations: 
555-555-5555:137s 
555-555-0000:12s 
555-555-1234:26s 
555-555-8888:20s 
+3

IDEのデバッグ機能に精通していますか? –

+0

いいえ。私はJava(現在はDr Javaを実行しています)に少し慣れていて、デバッガの使用に慣れていません。 – sly

+0

その部分は働き、インストラクターによって提供されました。いいえ、私はArrayListsを学んでいません。 – sly

答えて

1

これは、いくつかの本当に醜いコードであり、あなたは間違いなく、デバッガでそれを実行する必要があるが、それはエラーがでているように私には明らかですライン

newSize = newSize - 1; 

これは、外側のforループで使用されている変数をデクリメントします。 6つの要素のうち4つのみを取得した場合は、2つの要素にelse句が入力されたことを意味します。おそらく、代わりにsizeを減らすことを意図しましたか?

あなたがここでやりたいことを考えてください。デバッガを使用して、期待していない方法でどこがうまくいかないかを確認します。それらを訂正しなさい。

+0

LOL。可能性のあるエラーの横に沿って私のフィネスの欠如を強調してくれてありがとう。私は読みやすさの向上に取り組んでいきます。フィードバックありがとう – sly

1

まず、コードは読みにくく、エラーが発生しやすいです。私はクラスを使用し、MapやListのようなデータ型を構築しました。

public static class CallDuration { 
    String phoneNumber; 
    int duration; 

    public CallDuration(String phoneNumber, int duration) { 
     this.phoneNumber = phoneNumber; 
     this.duration = duration; 
    } 
} 

public static void main(String[] args) { 
    List<CallDuration> callDurations = new ArrayList<>(); 
    callDurations.add(new CallDuration("555-555-5555", 137)); 
    callDurations.add(new CallDuration("555-555-0000", 12)); 
    callDurations.add(new CallDuration("555-555-1234", 26)); 
    callDurations.add(new CallDuration("555-555-8888", 10)); 
    callDurations.add(new CallDuration("555-555-8888", 10)); 
    callDurations.add(new CallDuration("555-555-7777", 10)); 

    printCallDuration(callDurations); 
} 

private static void printCallDuration(List<CallDuration> callDurations) { 
    Map<String, Integer> totalCallDurationMap = new HashMap<>(); 
    for (CallDuration callDuration : callDurations) { 
     Integer value = totalCallDurationMap.computeIfAbsent(callDuration.phoneNumber, x -> 0); 
     totalCallDurationMap.put(callDuration.phoneNumber, value + callDuration.duration); 
    } 

    for (Map.Entry<String, Integer> entry : totalCallDurationMap.entrySet()) { 
     System.out.println(entry.getKey() + " - " + entry.getValue()); 
    } 
} 
+0

代わりの方法をありがとう。私はプログラミングのイントロクラスを開始し、あなたが使用したMapクラスとListクラスを学習していませんが、読みやすくなりました。私はあなたの人が醜いコーディングによって意味するものを見ることができます。 XDヘルプとアドバイスをありがとう。 – sly

関連する問題