📄 ferryboat.java
字号:
import java.io.*;
class Religious{
private String name; //修道士
private boolean left;
private boolean right;
public Religious(){
this.left=true;
this.right=false;
}
public Religious(String name,boolean left,boolean right){
this.name=name;
this.left=left;
this.right=right;
}
public void setLeft(boolean left){
this.left=left;
}
public void setRight(boolean right){
this.right=right;
}
public String getName(){
return this.name;
}
public boolean isLeft(){
return left;
} //是否在左岸
public boolean isRight(){
return right;
} //是否在右岸
}
class WildMan{
private String name; //野人
private boolean left;
private boolean right;
public WildMan(){
this.left=true;
this.right=false;
}
public WildMan(String name,boolean left,boolean right){
this.name=name;
this.left=left;
this.right=right;
}
public void setLeft(boolean left){
this.left=left;
}
public void setRight(boolean right){
this.right=right;
}
public String getName(){
return this.name;
}
public boolean isLeft(){
return left;
} //是否在左岸
public boolean isRight(){
return right;
} //是否在右岸
}
public class FerryBoat{
public Religious religious[];
public WildMan wildMan[];
public int lastLR;
public int lastRL;
public FerryBoat(){
this.lastLR=999;
this.lastRL=999;
}
public int leftMonk(){
int sum=0;
for(int i=0;i<religious.length;i++)
if(religious[i].isLeft())sum++;
return sum;
}
public int rightMonk(){
int sum=0;
for(int i=0;i<religious.length;i++)
if(religious[i].isRight())sum++;
return sum;
}
public int leftWild(){
int sum=0;
for(int i=0;i<wildMan.length;i++)
if(wildMan[i].isLeft())sum++;
return sum;
}
public int rightWild(){
int sum=0;
for(int i=0;i<wildMan.length;i++)
if(wildMan[i].isRight())sum++;
return sum;
}
public void leftRight(Religious x,WildMan y){
x.setLeft(false);
x.setRight(true);
y.setLeft(false);
y.setRight(true);
}
public void leftRight(Religious x1,Religious x2){
x1.setLeft(false);
x1.setRight(true);
x2.setLeft(false);
x2.setRight(true);
}
public void leftRight(WildMan y1,WildMan y2){
y1.setLeft(false);
y1.setRight(true);
y2.setLeft(false);
y2.setRight(true);
}
public void leftRight(Religious x){
x.setLeft(false);
x.setRight(true);
}
public void leftRight(WildMan y){
y.setLeft(false);
y.setRight(true);
}
public void rightLeft(Religious x,WildMan y){
x.setLeft(true);
x.setRight(false);
y.setLeft(true);
y.setRight(false);
}
public void rightLeft(Religious x1,Religious x2){
x1.setLeft(true);
x1.setRight(false);
x2.setLeft(true);
x2.setRight(false);
}
public void rightLeft(WildMan y1,WildMan y2){
y1.setLeft(true);
y1.setRight(false);
y2.setLeft(true);
y2.setRight(false);
}
public void rightLeft(Religious x){
x.setLeft(true);
x.setRight(false);
}
public void rightLeft(WildMan y){
y.setLeft(true);
y.setRight(false);
}
public int valueLeftRight(){
if(leftMonk()!=0&&leftWild()!=0){
if(rightMonk()+1>=rightWild()+1&&this.lastRL!=8)return 0;
}
if(leftMonk()!=0){
if(leftMonk()>=2)
{
if(leftMonk()-2!=0&&leftMonk()-2>=leftWild()&&this.lastRL!=0)return 1;
if(leftMonk()-2==0&&this.lastRL!=0)return 1;
}
if(this.lastRL!=1){
if(leftMonk()-1!=0&&leftMonk()-1>=leftWild())return 2;
if(leftMonk()-1==0)return 2;
}
}
if(leftWild()!=0){
if(leftWild()>=2&&this.lastRL!=4){
if(rightMonk()>=rightWild()+2&&rightMonk()!=0)return 3;
if(rightMonk()==0)return 3;
}
if(this.lastRL!=5){
if(rightMonk()!=0&&rightMonk()>=rightWild()+1)return 4;
if(rightMonk()==0)return 4;
}
}
return 5;
}
public int valueRightLeft(){
if(rightMonk()!=0){
if(rightMonk()>=2){
if((rightMonk()-2)!=0&&(rightMonk()-2>=rightWild())&&this.lastLR!=1)return 0;
if((rightMonk()-1)!=0&&(rightMonk()-1>=rightWild())&&(leftMonk()+1>=leftWild())&&this.lastLR!=2)return 1;
}
if((rightMonk()-1)!=0&&(rightMonk()-1>=rightWild())&&(leftMonk()+1>=leftWild())&&this.lastLR!=2)return 2;
if(rightMonk()-1==0&&this.lastLR!=2)return 3;
if(this.lastLR!=0){
if(leftMonk()+1>=leftWild()+1){
if(rightMonk()-1!=0&&rightMonk()-1>=rightWild()-1)return 8;
if(rightMonk()-1==0)return 8;
}
}
}
if(rightWild()!=0){
if(rightWild()>=2){
if(leftMonk()!=0&&leftWild()+2<=leftMonk()&&this.lastLR!=3)return 4;
if(leftMonk()!=0&&leftWild()+1<=leftMonk()&&this.lastLR!=4)return 5;
}
if(leftMonk()!=0&&leftWild()+1<=leftMonk()&&this.lastLR!=4)return 6;
if(leftMonk()==0&&lastLR!=4)return 7;
if(this.lastLR!=0){
if(leftMonk()+1>=leftWild()+1){
if(rightMonk()-1!=0&&rightMonk()-1>=rightWild()-1)return 8;
if(rightMonk()-1==0)return 8;
}
}
}
return 9;
}
public void display(){
for(int i=0;i<religious.length;i++){
if(religious[i].isLeft())System.out.println(religious[i].getName()+" 在左岸上 ");
else System.out.println(religious[i].getName()+" 在右岸上 ");
}
for(int i=0;i<wildMan.length;i++){
if(wildMan[i].isLeft())System.out.println(wildMan[i].getName()+" 在左岸上");
else System.out.println(wildMan[i].getName()+" 在右岸上");
}
System.out.print("此时左岸道士:"+this.leftMonk()+",左岸野人:"+this.leftWild());
System.out.println("右岸道士:"+this.rightMonk()+",右岸野人:"+this.rightWild());
}
}
class test{
public static void main(String args[])throws IOException{
FerryBoat f=new FerryBoat();
System.out.print("请输入左岸道士数目:");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int numreligious=Integer.parseInt(br.readLine());
System.out.print("请输入左岸野人数目:");
int numWildMan=Integer.parseInt(br.readLine());
f.religious=new Religious[numreligious];
f.wildMan=new WildMan[numWildMan];
for(int i=0;i<numreligious;i++)
f.religious[i]=new Religious("道士"+(i+1),true,false);
for(int i=0;i<numWildMan;i++)
f.wildMan[i]=new WildMan("野人"+(i+1),true,false);
f.display();
while(true){
System.in.read();
switch(f.valueLeftRight()){
case 0:
{
int i,j;
for(i=0;i<f.religious.length;i++)
if(f.religious[i].isLeft())break;
for(j=0;j<f.wildMan.length;j++)
if(f.wildMan[j].isLeft())break;
System.out.println(f.religious[i].getName()+"和"+f.wildMan[j].getName()+"坐船从左岸到右岸");
f.leftRight(f.religious[i],f.wildMan[j]);
f.lastLR=0;
System.in.read();
f.display();
}
break;
case 1:
{
int i,j;
for(i=0;i<f.religious.length;i++)
if(f.religious[i].isLeft())break;
for(j=i+1;j<f.religious.length;j++)
if(f.religious[j].isLeft())break;
System.out.println(f.religious[i].getName()+"和"+f.religious[j].getName()+"坐船从左岸到右岸");
f.leftRight(f.religious[i],f.religious[j]);
f.lastLR=1;
System.in.read();
f.display();
}
break;
case 2:
{
int i;
for(i=0;i<f.religious.length;i++)
if(f.religious[i].isLeft())break;
System.out.println(f.religious[i].getName()+"坐船从左岸到右岸");
f.leftRight(f.religious[i]);
f.lastLR=2;
System.in.read();
f.display();
}
break;
case 3:
{
int i,j;
for(i=0;i<f.wildMan.length;i++)
if(f.wildMan[i].isLeft())break;
for(j=i+1;j<f.wildMan.length;j++)
if(f.wildMan[j].isLeft())break;
System.out.println(f.wildMan[i].getName()+"和"+f.wildMan[j].getName()+"坐船从左岸到右岸");
f.leftRight(f.wildMan[i],f.wildMan[j]);
f.lastLR=3;
System.in.read();
f.display();
}
break;
case 4:
{
int i;
for(i=0;i<f.wildMan.length;i++)
if(f.wildMan[i].isLeft())break;
System.out.println(f.wildMan[i].getName()+"坐船从左岸到右岸");
f.leftRight(f.wildMan[i]);
f.lastLR=4;
System.in.read();
f.display();
}
break;
case 5:
return;
}
System.in.read();
if(f.leftMonk()==0&&f.leftWild()==0)return;
switch(f.valueRightLeft()){
case 0:
{
int i,j;
for(i=0;i<f.religious.length;i++)
if(f.religious[i].isRight())break;
for(j=i+1;j<f.religious.length;j++)
if(f.religious[j].isRight())break;
System.out.println(f.religious[i].getName()+"和"+f.religious[j].getName()+"坐船从右岸回到左岸");
f.rightLeft(f.religious[i],f.religious[j]);
f.lastRL=0;
System.in.read();
f.display();
}
break;
case 1:
case 2:
case 3:
{
int i;
for(i=0;i<f.religious.length;i++)
if(f.religious[i].isRight())break;
System.out.println(f.religious[i].getName()+"坐船从右岸回到左岸");
f.rightLeft(f.religious[i]);
f.lastRL=1;
System.in.read();
f.display();
}
break;
case 4:
{
int i,j;
for(i=0;i<f.wildMan.length;i++)
if(f.wildMan[i].isRight())break;
for(j=i+1;j<f.wildMan.length;j++)
if(f.wildMan[j].isRight())break;
System.out.println(f.wildMan[i].getName()+"和"+f.wildMan[j].getName()+"坐船从右岸回到左岸");
f.rightLeft(f.wildMan[i],f.wildMan[j]);
f.lastRL=4;
System.in.read();
f.display();
}
break;
case 5:
case 6:
case 7:
{
int i;
for(i=0;i<f.wildMan.length;i++)
if(f.wildMan[i].isRight())break;
System.out.println(f.wildMan[i].getName()+"坐船从右岸回到左岸");
f.rightLeft(f.wildMan[i]);
f.lastRL=5;
System.in.read();
f.display();
}
break;
case 8:
{
int i,j;
for(i=0;i<f.religious.length;i++)
if(f.religious[i].isRight())break;
for(j=0;j<f.wildMan.length;j++)
if(f.wildMan[j].isRight())break;
System.out.println(f.religious[i].getName()+"和"+f.wildMan[j].getName()+"坐船从右岸回到左岸");
f.rightLeft(f.religious[i],f.wildMan[j]);
f.lastRL=8;
System.in.read();
f.display();
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -