2016-03-25 18 views
-2

Bir diziyi doldurmak için girişler almam gerekir. Benim problemim de, girişteki değer zaten dizide mevcut olup olmadığını kontrol etmem gerekiyor. Varsa kötü not yazan bir mesaj göstermem gerekiyor. Arama döngüsünde sıkıştığımı ve diziye değer atamadığımı düşünüyorum.lineer arama Diziler kontrol değerleri

String[] course = new String[9]; 
int index = 0; 

if (menu == 1) { 
    boolean found = true; 
    do { 
     value = (JOptionPane.showInputDialog("Enter course " + (index + 1))); 
     int pos = 0; 
     while (pos< course.length&& !found) { 
      if (value == course[index]) { 
       found = true; 
      } else { 
       pos++; 
      }  
     } // while 

     if(found == true) { 
      course[index] = value; 
     } else { 
      course[index]=""; 
     } 

     if (course[index].equals("")) { 
      JOptionPane.showMessageDialog(null, "Bad Course Name"); 
     } else{ 
      course[index] = (JOptionPane.showInputDialog("Enter course " + (index + 1))); 
     } 
    } while(course[index].equals("")); //last 
} 

cevap

1

uygulamanızda bir sorun foundtrue ayarlandığında kez sen false geri sıfırlamak asla olmasıdır: Bir tek yönlü sokak. Bu nedenle, ilk çoğaltma değerinin girilmesi, diğer çoğaltılmamış değerlerin girilmesini engeller.

Bu sorunu, found bildirgesini/ilkesini do/while döngüsünüzün içine taşıyarak düzeltebilirsiniz. yinelenen bulunursa Ancak, daha iyi bir yaklaşım belirli bir konuma kadar sizin için diziyi arar ve true döndüren bir yardımcı yöntemini tanımlayan olacaktır:

private static boolean isDuplicate(String[] course, int maxIndex, String entry) { 
    ... 
} 

Şimdi çiftleri için arama döngü boyunca gizli olacak sonucu gösteren değişken ile. Kod da daha okunabilir hale gelir, çünkü yöntemin adı okuyucuya içinde neler olduğunu anlatır.

Tabii ki, dize karşılaştırma düzeltmek gerekir: kodunuzu the way it is done in Java değil == kullanır.

+0

Teşekkür ederiz. Bulunan do/while döngüsünün içinde hareket ettim ama yine de aynı sonucu elde ettim. Metot yaklaşımı daha iyi ses çıkarır ancak yöntemleri kullanarak çözemiyorum. Yardım için teşekkürler. –

+0

@JoeSegway "Yöntemleri kullanarak bunu çözemeyebilir" derken ne demek istiyorsun? Öğrencileri dizilere sınırlandırmayı anlayabiliyorum, ancak yardımcı yöntemler kullanmalarına izin vermemek benim için hiçbir anlam ifade etmiyor: Aslında bu, cesaretlendirecek bir şey! – dasblinkenlight

+0

Biliyorum. Daha sonra sadece –

İlgili konular