2017-09-24 1 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에 익숙하지 만 (현재 Java 박사가 운영 중입니다) 디버거 사용에 익숙하지 않았습니다. – sly

+0

그 부분은 강사가 제공하고 제공 한 것입니다. 아니, ArrayLists를 배웠다. – sly

답변

1

이 정말 추한 코드이며 확실히 디버거에서 실행해야하지만 오류가 함께 나에게 분명 줄

newSize = newSize - 1; 

이렇게하면 바깥 쪽 for 루프에서 사용되는 변수가 감소합니다. 여섯 개 요소 중 네 개 요소 만 통과했다면 두 요소에 대해 else 절이 입력되었음을 의미합니다. 아마 size을 줄이려고하셨습니까?

여기에서 원하는 것을 생각해보십시오. 디버거를 사용하여 예상치 못한 방식으로 문제가 발생하는 곳을 확인하십시오. 그들을 정정하십시오.

+0

LOL. 가능한 오류 옆에 기교의 부족을 강조해 주셔서 감사합니다. 가독성 향상을 위해 노력하겠습니다. 피드백을 주셔서 감사합니다 – sly

1

먼저 코드는 읽기/이해하기가 쉽지 않으며 오류가 발생하기 쉽습니다. 클래스를 사용하고지도 및 목록과 같은 데이터 형식으로 작성했습니다.

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

다른 방법에 대한 감사. 프로그래밍에 대한 소개 수업을 시작하고 사용했던지도 및 목록 클래스를 배우지 못했지만 확실히 읽을 수 있습니다. 나는 너희들이 못생긴 코딩을하는 것을 볼 수있다. XD 도움과 조언에 감사드립니다. – sly

관련 문제