كيفية خلط الأزواج
سؤال
كيفية خلط العناصر في الأزواج؟ البرنامج أدناه ، قم بإنشاء جميع الأزواج الممكنة وخلط الأزواج لاحقًا. على سبيل المثال ، أزواج محتملة قبل خلط التجول ab,ac,ae,af
..etc خلط إلى ac,ae,af,ab
...إلخ
كيف تجعله لا يتم خلطه في أزواج فحسب ، بل داخل العناصر في الزوج نفسه؟ على سبيل المثال بدلا من ab, ac,
كيف يمكنني صنع ba, ac
?
String[] pictureFile = {"a.jpg","b.jpg","c.jpg","d.jpg","e.jpg","f.jpg","g.jpg"};
List <String> pic1= Arrays.asList(pictureFile);
...
ListGenerator pic2= new ListGenerator(pic1);
ArrayList<ArrayList<Integer>> pic2= new ArrayList<ArrayList<Integer>>();
public class ListGenerator {
public ListGenerator(List<String> pic1) {
int size = pic1.size();
// create a list of all possible combinations
for(int i = 0 ; i < size ; i++) {
for(int j = (i+1) ; j < size ; j++) {
ArrayList<Integer> temp = new ArrayList<Integer>();
temp.add(i);
temp.add(j);
pic2.add(temp);
}
}
Collections.shuffle(pic2);
}
//This method return the shuffled list
public ArrayList<ArrayList<Integer>> getList() {
return pic2;
}
}
المحلول
عليك فقط خلط temp
قائمة قبل إضافتها إلى pic2
. إليك الرمز الثابت (لاحظ أنني حولت pic2
متغير في حقل ListGenerator
الطبقة وأعيد تسميتها إلى result
)
String[] pictureFile = {"a.jpg","b.jpg","c.jpg","d.jpg","e.jpg","f.jpg","g.jpg"};
List <String> pic1= Arrays.asList(pictureFile);
...
ListGenerator pic2= new ListGenerator(pic1);
public class ListGenerator {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
public ListGenerator(List<String> pic1) {
int size = pic1.size();
// create a list of all possible combinations
for(int i = 0 ; i < size ; i++) {
for(int j = (i+1) ; j < size ; j++) {
ArrayList<Integer> temp = new ArrayList<Integer>();
temp.add(i);
temp.add(j);
Collections.shuffle(temp);
result.add(temp);
}
}
Collections.shuffle(result);
}
//This method return the shuffled list
public ArrayList<ArrayList<Integer>> getList() {
return result;
}
}
ومع ذلك ، هذه هي الخطوة الأولى نحو الحل. حاليًا ، سيحتوي كل زوج على أعداد صحيحة في النطاق [0..size-1]
لذلك تبدو أزواجك هكذا: <0,3>
, <1,2>
, ، إلخ. ما تريده هو الحصول على أزواج عبارة عن سلسلة من حرفين مثل: "ab", "dc"
, ، إلخ. في هذا الإصدار أعيد تسميته getList()
ل getPairs()
التي تنقل معناها أفضل. أيضا ، لقد صنعت مُنشئ ListGenerator
اقبل مجموعة من الأحرف حتى تحتاج فقط إلى تسميتها مع الشخصيات المطلوبة ، على النحو التالي:
List<String> pairs = new ListGenerator('a', 'b', 'c', 'd', 'e', 'f', 'g').getPairs();
وهنا ListGenerator
بحد ذاتها:
public class ListGenerator {
ArrayList<String> result = new ArrayList<String>();
public ListGenerator(char... letters) {
int size = letters.length;
// create a list of all possible combinations
for(int i = 0 ; i < size ; i++) {
for(int j = (i+1) ; j < size ; j++) {
ArrayList<Character> temp = new ArrayList<Character>();
temp.add(letters[i]);
temp.add(letters[j]);
Collections.shuffle(temp);
result.add("" + temp[0] + temp[1]);
}
}
Collections.shuffle(result);
}
//This method return the shuffled list
public ArrayList<ArrayList<Integer>> getPairs() {
return result;
}
}
نصائح أخرى
لنفترض أن لديك هذه الأشياء:
Red dress
Blue shirt
Pink panties
وتريد خلط كل من الألوان ومقالات الملابس للحصول على أشياء مثل:
Pink shirt
Blue panties
... etc
كيف يمكنك أن تفعل ذلك؟
الأمر بسيط ، حقًا: فقط خلط قائمة الألوان ومقالات الملابس بشكل منفصل ، ثم انضم إليها مرة أخرى.
Red, Blue, Pink --> Pink, Blue, Red
dress, shirt, panties --> shirt, panties, dress
------------------------ pair
Pink shirt
Blue panties
Red dress