2015-07-03 44 views
5

Yaz java kursu için basit bir ödev üzerinde çalışıyorum ve sadece koduma bir göz atabileceğinizi ve yaptığım yöntemin en iyi yol olup olmadığını görmeyi umuyordum. Amaç, en az 25 eleman içeren basit bir int dizisi oluşturmak ve onu geçmek ve tüm elemanları eklemek için bir döngü kullanmaktır. Bazı sorunlarım vardı ama işe yaramış gibi görünüyor. Çalıştıktan sonra, biraz araştırma yaptım ve insanların bir Her For döngüsü (gelişmiş döngü) kullandığı bazı benzer şeyler gördüm. Bu daha iyi bir seçenek olur mu? Normal bir döngü için karşıtlığı kullanmanın en iyi yollarını karıştırdım.Bir dizideki elemanların toplamı

Neyse, daha iyi bir programcı olmam için bana yardımcı olan yorumlar veya eleştiriler!

public class Traversals { 

    public static void main(String[] args) { 

     int absenceTotal = 0; 
     // initialize array with 30 days of absences. 
     int absencesArr[] = { 1, 3, 0, 9, 8, 23, 1, 
       11, 23, 5, 6, 7, 10, 1, 5, 
       14, 2, 4, 0, 0, 1, 3, 2, 1, 
       1, 0, 0, 1, 3, 7, 2 }; 

     for (int i = 0; i < absencesArr.length; i++) { 
      absencesArr[i] += absenceTotal; 
      absenceTotal = absencesArr[i]; 
     } 
     System.out.println("There were " + absenceTotal + " absences that day."); 
    } 
} 
+8

İleride söz bu tür codereview.stackexchange.com için daha uygun olacaktır. –

+1

Bu soru buna benziyor mu? https://stackoverflow.com/questions/4550662/how-do-you-find-the-sum-of-all-the-numbers-in-an-array-in-java –

+2

Ana sayfanızı – Quill

cevap

7

Diziyi değiştirmeyin. for-each loop'u tercih ederim. Ve çok fazla sayıda öğrenci olabileceğini düşünmelisiniz, bu yüzden muhtemelen sum için long kullanırım. Ve biçimlendirilmiş çıktı. diğer güzel katkıların yanı sıra

long sum = 0; 
for(int i : absencesArr) {  
    sum += i; 
} 
// System.out.println("There were " + sum + " absences that day."); 
System.out.printf("There were %d absences that day.%n", sum); 
+0

Dürüstçe böyle bir şey denedim, ancak sadece indeksleri ekledim, bu yüzden yukarıda sahip olduğum şeye kadar etrafta karıştırdım. Tekrar deneyeceğim, çünkü sadece ödeve baktım ve tahmin ettiğim diziyi değiştirdiğim için onu elde edemeyeceğim öğeleri basmak için ek bir döngü istiyor. – NoobCoderChick

+0

Uzun süre kullanabiliyorum çünkü int ve long'un bazı platformlarda aynı boyuta sahip olabileceğini düşünüyorum. – ggrr

+0

@amuse Java'da değil ve Java'da uzun bir uzun süre yok. Ayrıca bakınız [JLS-4.2. İlkel Tipler ve Değerler] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2). –

4
public class Traversals { 

    public static void main(String[] args) { 

     int absenceTotal = 0; 
     // initialize array with 30 days of absences. 
     int absencesArr[] = { 1, 3, 0, 9, 8, 23, 1, 
       11, 23, 5, 6, 7, 10, 1, 5, 
       14, 2, 4, 0, 0, 1, 3, 2, 1, 
       1, 0, 0, 1, 3, 7, 2 }; 

     for (int i = 0; i < absencesArr.length; i++) { 
      // remove this 
      //absencesArr[i] += absenceTotal; 
      absenceTotal += absencesArr[i]; //add this 
     } 
     System.out.println("There were " + absenceTotal + " absences that day."); 
    } 
} 
2

gibi bir şey de ekledik, ben for-each loop ait hayranıyım ve tek satırda bunu tipik olacaktır. Benim nesne boyutu/boy/sayımı üzerinde kontrol sahibi olmak istiyorum

for(int i : absencesArr) absenceTotal += i; 
System.out.printf("There were %d absences that day.", absenceTotal); 

Ancak bazı durumlarda

, şu örnekte olduğu gibi for loop kullanacağız:

for (int i = 0; i < absencesArr.length; i++) absenceTotal += absencesArr[i]; 
System.out.printf("There were %d absences that day.", absenceTotal); 

Ve ben bir daha sonra olması gerekiyorsa for loop veya kodlarının içindeki satırların satırlarını daha sonra { more than one line of code } küme parantez içine koyacağım.

0

Java 8 size akışı api kullanabilirsiniz:

public class Traversals { 
    public static void main(String[] args) { 

     int absenceTotal = 0; 
     // initialize array with 30 days of absences. 

     int absencesArr[] = { 1, 3, 0, 9, 8, 23, 1, 
       11, 23, 5, 6, 7, 10, 1, 5, 
       14, 2, 4, 0, 0, 1, 3, 2, 1, 
       1, 0, 0, 1, 3, 7, 2 }; 

     absenceTotal = IntStream.of(array).sum(); 

     System.out.println("There were " + absenceTotal + " absences that day."); 
    } 
}