//接上篇 //否则传进来的参数是在4--7号第2组中,即在天平的右边
else
{
System.out.println("\n第三次称量开始,方法是:");
System.out.print("    先记录下称量前天平的状态,即左边是重还是轻的状态,");
System.out.print("再恢复到第二次\n    称量前的状态,");
System.out.print("将天平左右两边的两个小组整体进行一次位置互换,");
System.out.print("将 5\n    号小球从天平左边取下来,换上下面任意一个标准的小球,");
System.out.print("再把天平右边\n    的任意一个小球和左边的6号小球进行位置互换, ");
System.out.print("进行第三次称量,");
} //开始第三次称量
balance.beginWeigh(array_b1_temp,array_b2_temp); //判断
if(balance.getState() == 0)
{
result_index = array_b1_temp[1].getIndex(); if(array_b[0].getIndex() == 0)
System.out.print("发现天平两边相等,判断如下:");
else
System.out.print("发现\n    天平两边相等,判断如下:");
System.out.print("\n第三次称量结束,");
System.out.print(array_b1_temp[1].getIndex() + "号球是次品!");
}
else if(balance.getState() == oldState)
{
result_index = array_b1_temp[3].getIndex(); if(array_b[0].getIndex() == 0)
System.out.print("发现天平两边相等,判断如下:");
else
System.out.print("发现\n    天平两边相等,判断如下:");
System.out.print("\n第三次称量结束,");
System.out.print(array_b1_temp[3].getIndex() + "号球是次品!");
}
else
{
result_index = array_b1_temp[2].getIndex(); if(array_b[0].getIndex() == 0)
System.out.print("发现天平两边相等,判断如下:");
else
System.out.print("发现\n    天平两边相等,判断如下:");
System.out.print("\n第三次称量结束,");
System.out.print(array_b1_temp[2].getIndex() + "号球是次品!");
} //返回次品小球的编号
return result_index;
} //假定唯一的次品在数组array_b中,该数组的长度为13
public int findBall(Ball[] array_b)
{
//用于记录返回值,返回次品小球的编号
int result_index = 0; //开始分组,按着顺序按4-4-5(一共13个元素)分成三组
Ball[] array_b1 = new Ball[4];
array_b1[0] = array_b[0];
array_b1[1] = array_b[1];
array_b1[2] = array_b[2];
array_b1[3] = array_b[3];
Ball[] array_b2 = new Ball[4];
array_b2[0] = array_b[4];
array_b2[1] = array_b[5];
array_b2[2] = array_b[6];
array_b2[3] = array_b[7];
Ball[] array_b3 = new Ball[5];
array_b3[0] = array_b[8];
array_b3[1] = array_b[9];
array_b3[2] = array_b[10];
array_b3[3] = array_b[11];
array_b3[4] = array_b[12]; //创建一个天平类的对象
Balance balance = new Balance(); //对前两组进行第一次称量
balance.beginWeigh(array_b1,array_b2); //输出提示
System.out.print("\n第一次称量开始,方法是:");
System.out.print("\n    依次对这13个小球按0--12进行编号,");
System.out.print("然后沿顺序按4-4-5(一共13个元素)");
System.out.print("\n    分成三组,将第1组即0--3号小球放在天平的左边,");
System.out.print("对前两组进行第一次\n    称量,");

//进行判断,如果相等,则次品一定在array_b3中
if(balance.getState() == 0)
{
//进行一次输出提示
System.out.print("发现天平两边相等,判断如下:");
System.out.println("\n第一次称量结束,次品小球一定在  8 -- 12 后5个中!");

//再给array_b3进一步分成3组
Ball[] array_b3_01 = new Ball[2];
array_b3_01[0] = array_b1[0];  //用一个下面的标准小球来补充一个元素
array_b3_01[1] = array_b3[0];
Ball[] array_b3_02 = new Ball[2];
array_b3_02[0] = array_b3[1];
array_b3_02[1] = array_b3[2];
Ball[] array_b3_03 = new Ball[2];
array_b3_03[0] = array_b3[3];
array_b3_03[1] = array_b3[4]; //再对前两小组进行第二次称量
balance.beginWeigh(array_b3_01,array_b3_02); //输出提示
System.out.println("\n第二次称量开始,方法是:");
System.out.print("    把一个下面的标准小球加入到这后5个小球中,凑成6个,然后");
System.out.print("平均分成3组,\n    每组两个小球,");
System.out.print("把标准小球和8号球编为第1组,");
System.out.print("把 9号球和10号球编为第2\n    组,其余为第三组。");
System.out.print("把第1组放在天平的左边,");
System.out.print("然后开始对前两组进行第二\n    次称量,"); //进行判断,如果相等,则次品一定在array_b3_03中
if(balance.getState() == 0)
{
//进行一次输出提示
System.out.print("发现天平两边相等,判断如下:");
System.out.println("\n第二次称量结束,次品小球一定在 11 -- 12 后2个中!");

//开始第三次称量
balance.beginWeigh(array_b3_03[0],array_b3_01[0]); //输出提示
System.out.println("\n第三次称量开始,方法是:");
System.out.print("    把11号小球和任意一个标准球进行称量,"); //判断
if(balance.getState() == 0)
{
System.out.print("发现天平两边相等,判断如下:");
result_index = array_b3_03[1].getIndex();
    System.out.print("\n第三次称量结束,");
System.out.print(array_b3_03[1].getIndex() + "号球是次品!");
}
else
{
System.out.print("发现天平两边不等,判断如下:");
result_index = array_b3_03[0].getIndex();
    System.out.print("\n第三次称量结束,");
System.out.print(array_b3_03[0].getIndex() + "号球是次品!");
}
} //如果不等,则说明次品一定是array_b3_01[1]、array_b3_02[0]或array_b3_02[1]中的一个
else
{
//进行一次输出提示
System.out.print("发现天平两边不等,判断如下:");
System.out.println("\n第二次称量结束,次品小球一定在  8 -- 10 间3个中!"); //先记录下称量前天平的状态,然后再进行下一步的操作
int oldState = balance.getState(); //将天平左边的array_b3_01[1]取下来,然后将天平右边的array_b3_02[0]拿到左边去
array_b3_01[1].setWeight(array_b3_02[0].getWeight()); //再把一个在下面的标准球array_b3_03[0]放到天平的右边去
array_b3_02[0].setWeight(array_b3_03[0].getWeight()); //开始第三次称量
balance.beginWeigh(array_b3_01,array_b3_02); //输出提示
System.out.println("\n第三次称量开始,方法是:");
System.out.print("    先记录下称量前天平的状态,即左边是重还是轻的状态,");
System.out.print("将8号小球从天平\n    左边取下来,");
System.out.print("将天平右边的9号小球拿到左边去,");
System.out.print("再把一个在下面的标准小\n    球比如 11号小球放到天平的右边去");
System.out.print("进行第三次称量,"); //判断
if(balance.getState() == 0)
{
result_index = array_b3_01[1].getIndex();
System.out.print("发现天平两边相等,\n    判断如下:\n第三次称量结束,");
System.out.print(array_b3_01[1].getIndex() + "号球是次品!");
}
else if(balance.getState() == oldState)
{
result_index = array_b3_02[1].getIndex();
System.out.print("发现天平状态不变,\n    判断如下:\n第三次称量结束,");
System.out.print(array_b3_02[1].getIndex() + "号球是次品!");
}
else 
{
result_index = array_b3_02[0].getIndex();
System.out.print("发现天平状态相反,\n    判断如下:\n第三次称量结束,");
System.out.print(array_b3_02[0].getIndex() + "号球是次品!");
}
}
}//接下页