📄 testwithsortedqueue.java
字号:
package tomato;
//不定时的会出现数组超界!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
public class TestWithSortedQueue extends TestbyIncreament {
//再一种新的测试,失败者要排队,(首先按到BS的距离排,如相同则)按照从BS到Center再到失败者的距离之和的大小递增排列,则添加失败者时不是一次全部加入,而是试探的从头开始加一个,如不行则加两个,依次增加。
//另外产生相同坐标点的购买者不能无限制
//bug!!!!!!!!!!!!!!!!!
public static void RandomTest(Bookstore bookstore,Book book,int maxper,double perKmFreight){ //递增测试。失败者进入记录,后来递增失败时与前面的记录一起再测试一次,若失败则一起加进记录中。
Purchaser[] pArr = new Purchaser[1000];
Location Alliancelocation = new Location(0,0);
Alliance cTest = new Alliance(Alliancelocation,book,0);
int count = 0;
boolean isContinue = true;
while (isContinue){
SetRandomPurchasers(book,maxper,count,pArr);
for (int i = 0; i < Alliance.incrementNumber; i++){
cTest.Add(pArr[count+i]);
}
cTest.EstablishAlliance(bookstore,perKmFreight);
System.out.println();
if ( cTest.IsAllianceReasonable(bookstore,perKmFreight) ){
count += Alliance.incrementNumber;
System.out.println();
System.out.println("The Alliance is reasonable!");
cTest.Display(bookstore,perKmFreight);
}
else {
System.out.println("The Alliance is NOT reasonable!");
for (int i = 0; i < Alliance.incrementNumber; i++){
cTest.Remove(pArr[count+i]);
if ( Alliance.d_wantjoinmember.size() != 0){
int wantjoinmembersize = Alliance.d_wantjoinmember.size();
for(int index = 0; index < wantjoinmembersize ; index++){ //多了层循环
int joinnumber = index + 1;
for(int index_i = 0; index_i < joinnumber; index_i++){ //变化处
cTest.Add((Purchaser)Alliance.d_wantjoinmember.elementAt(index_i));
}
cTest.Add(pArr[count+i]);
cTest.EstablishAlliance(bookstore,perKmFreight);
System.out.println("Try to join the previous failer!");
if ( cTest.IsAllianceReasonable(bookstore,perKmFreight) ){
count += Alliance.incrementNumber;
count += Alliance.d_wantjoinmember.size();
for(int index_i = 0; index_i < joinnumber; index_i++){ //变化处
Alliance.d_wantjoinmember.removeElement((Purchaser)Alliance.d_wantjoinmember.elementAt(index_i));
}
System.out.println();
System.out.println("The Alliance is reasonable!");
cTest.Display(bookstore,perKmFreight);
break;
}
else {
cTest.Remove(pArr[count+i]);
for(int index_i = 0; index_i < joinnumber; index_i++){ //变化处
cTest.Remove((Purchaser)Alliance.d_wantjoinmember.elementAt(index_i));
}
for(int index_i = 0; index_i < joinnumber; index_i++){ //变化处
double everyoneToBSdistance = ((Purchaser)Alliance.d_wantjoinmember.elementAt(index_i)).GetLocation().CalculateDistance(bookstore.GetLocation());
double pArrToBSdistance = pArr[count+i].GetLocation().CalculateDistance(bookstore.GetLocation());
if (pArrToBSdistance > everyoneToBSdistance){
Alliance.d_wantjoinmember.addElement(pArr[count+i]);
}
}
}
}
}
else
Alliance.d_wantjoinmember.addElement(pArr[count+i]);
}
System.out.println("The join is failed!");
}
System.out.println();
}
}
public static void Test(){
Alliance.SetMapBound();
Alliance.SetBookstore();
RandomTest(Alliance.d_bookstore,Alliance.d_bookstore.SelectBook(Alliance.SettargetBook()),Alliance.Setmaxper(),Bookstore.SetperKmFreight());
}
public static void main(String[]args){
Test();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -