2016-03-31 20 views
0

Bu sorunu yaklaşık beş saat boyunca bu hedefe ulaşmak için pek çok farklı yol üzerinde çalışıyorum, ama hiçbir şey işe yaramıyor gibi görünüyor. Artık daha fazla düşünemediğim noktadayım, bu yüzden buraya gönderiyorum.2d dizisi ve dizi dizisinin alt kümesini karşılaştır

Bir dize alan bir paylaşılan tercihim var. Bu dize bir dizi dizisine dönüştürülür. Dizine ayarlı dört diziyle 2d dizim var. 2d dizisiyle döngü yapmak ve dizi dizilimimi karşılaştırmak istiyorum. Dize dizimde her 2d dizi dizininin içeriği varsa, doğru, yanlış, yanlış yazdırın.

final SharedPreferences sharedPref = CocktailsFrag.this.getActivity().getPreferences(Activity.MODE_PRIVATE); 
//recall stored ingredients 
String arrayString = sharedPref.getString("myIngredients", null); 

if(arrayString ==null) { 
    //do nothing 
} else { 
    String str1 = arrayString.replace("[", ""); 
    String str2 = str1.replace("]", ""); 
    String[] strValues = str2.split(","); 

    String drink1[] = {"Ale", "Brandy"}; 
    String drink2[] = {"Vodka", "Tobasco Sauce"}; 
    String drink3[] = {"Lager", "Stout"}; 
    String drink4[] = {"Guiness", "Champagne"}; 
    String[][] arrays = {drink1, drink2, drink3, drink4}; 

    for(int i=0; i<arrays.length-1;i++) { 
     String[] indexValue = arrays[i]; 
     if(strValues[i].contains(indexValue[i])) { 
      Toast.makeText(getActivity().getApplicationContext(), indexValue[i]+ "", Toast.LENGTH_LONG).show(); 
     } else { 
      Toast.makeText(getActivity().getApplicationContext(), "false", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

Bunu nasıl gerçekleştireceğinizle ilgili herhangi bir düşünce var mı?

+0

do içindekiler 'String [] 'tercihler 2d dizideki tüm diziler değerlerle aynı veya 2d dizi içinde tek bir dizi için gereken mi? –

+0

Hayır, dizilerden sadece biri. 2d dizilerinden biri paylaşılan tercih dizisinde bulunursa, doğru yazdırılmasını istiyorum. Eğer değilse (yani bir değer eksikse) yanlış yazdırır. Umarım bu mantıklıdır. –

+0

Diziler yerine Listeler'i ve yalnızca dizileri kullanan başka bir seçeneği kullanarak bir yanıt ekledim. –

cevap

0

Bu kod, yalnızca diziler üzerinde yineleme kadar etkili değildir, ancak öğe sayısı ile önemli değildir ve okunması daha kolaydır.

final SharedPreferences sharedPref = CocktailsFrag.this.getActivity().getPreferences(Activity.MODE_PRIVATE); 
//recall stored ingredients 
String arrayString = sharedPref.getString("myIngredients", null); 

if(arrayString ==null) { 
    //do nothing 
} else { 
    String str1 = arrayString.replace("[", "").replace("]", ""); 
    List<String> strValues2 = Arrays.asList(str1.split(",")); 

    String drink1[] = {"Ale", "Brandy"}; 
    String drink2[] = {"Vodka", "Tobasco Sauce"}; 
    String drink3[] = {"Lager", "Stout"}; 
    String drink4[] = {"Guiness", "Champagne"}; 
    String[][] arrays = {drink1, drink2, drink3, drink4}; 

    for(String[] drinkArr : arrays){ 
     if(strValues2.containsAll(Arrays.asList(drinkArr))) { 
      Toast.makeText(getActivity().getApplicationContext(), "true", Toast.LENGTH_LONG).show(); 
     } else { 
      Toast.makeText(getActivity().getApplicationContext(), "false", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

Dizilerle bunu yapmak isterseniz, yalnızca bir seçenek aşağıdadır. açıklamak için

for(String[] drinkArr : arrays) { 
    boolean allDrinksFound = true; 
    for(int i = 0; i < drinkArr.length; i++) { 
     boolean drinkFound = false; 
     for(int j = 0; j < strValues.length; j++) { 
      if(drinkArr[i].equals(strValues[j])) { 
       drinkFound = true; 
       break; 
      } 
     } 
     allDrinksFound = allDrinksFound && drinkFound; 
    } 

    if(allDrinksFound) { 
     Toast.makeText(getActivity().getApplicationContext(), "true", Toast.LENGTH_LONG).show(); 
    } else { 
     Toast.makeText(getActivity().getApplicationContext(), "false", Toast.LENGTH_LONG).show(); 
    } 
} 
+0

Teşekkürler. Bana harika bir giriş verdiniz ve kesinlikle doğru yönde bana işaret ediyor! :) –

İlgili konular