看了好多代码,自己也写了好多。最后写了一个精简的,但是只能针对该题有效的代码。
- import java.util.ArrayList;
- import java.util.List;
- /**
- * 代码写的不好,只能针对这个三个动物过河问题,其他的都不行
- *
- */
- public class CrossRiver {
- List<Anima> left = new ArrayList<Anima>();
- List<Anima> right = new ArrayList<Anima>();
- public static void main(String[] args) {
- CrossRiver cros = new CrossRiver();
- cros.cross();
- }
- public void cross(){
- //初始化,将左边添加上三个动物
- inniteAnima();
- //右边动物数量到达三就不在移动了
- while(right.size()!=3){
- leftRemove();
- }
-
- }
- private void leftRemove() {
- //过河
- Anima removAnima = left.remove(0);
- //限定条件,如果是三个判断就复杂了 ,还得考虑过去了移除哪个的问题,这里限定对岸一个,过去一个
- if(right.size()>0 && right.size() <2){
- for(int i = 0;i<right.size();i++){
- if(right.get(i).getAfraid() == removAnima.getContro() ||
- removAnima.getAfraid() == right.get(i).getContro()){
- //如果对边有制约 ,回流
- left.add(removAnima);
- break;
- }else{
- right.add(removAnima);
- System.out.println("右岸添加一个动物"+removAnima.getName()+"--------"+right.toString());
- break;
- }
- }
- }else{
- right.add(removAnima);
- System.out.println("右岸添加一个动物"+removAnima.getName()+"--------"+right.toString());
- }
-
-
-
- }
- private void inniteAnima() {
- /*
- 狗0 猫 1 鱼 2
- 狗一怕一控制 0 -1 1
- 猫一怕一控制 1 0 2
- 鱼一怕一控制 2 1 3
-
- 如果想用俩个变量描述制约关系,就是一个的怕值,等于另一个的控制值,那就有制约关系
- 狗一怕一控制 0 1
- 猫一怕一控制 1 2
- 鱼一怕一控制 2 3
- */
-
- Anima dog = new Anima("dog",0,1);
- Anima cat = new Anima("cat",1,2);
- Anima fish = new Anima("fish",2,3);
- left.add(dog);
- left.add(cat);
- left.add(fish);
-
- }
-
- }
复制代码
代码个人感觉写的一般,只能针对该题解决问题。这种代码不好。
|
|