黑马程序员技术交流社区
标题:
分享自己入学测试最后一道题的程序——过河问题!
[打印本页]
作者:
肚小糖
时间:
2015-8-20 17:05
标题:
分享自己入学测试最后一道题的程序——过河问题!
<p></p><p>import java.util.List;
import java.util.ArrayList;
public class Test10 {
public static void main(String[] args) {
crossRiver();
}
public static void crossRiver()
{
//创建ArrayList对象leftBank和rightBank分别用来存储河岸两边的动物
List<String> leftBank = new ArrayList<String>();
leftBank.add("fish");
leftBank.add("cat");
leftBank.add("dog");
List<String> rightBank = new ArrayList<String>();
boolean isAtLeftBank = true; //农夫在左岸
String animal = ""; //老农带走的动物
//当左岸没有动物时循环结束
while(!leftBank.isEmpty())
{
//老农在左岸,如果带走一只动物后左岸的动物有危险,则不带走,否则将动物添加到右岸中
if (isAtLeftBank)
{
for (int i = 0; i < leftBank.size(); i++)
{
animal = leftBank.remove(i);
//如果剩下动物存在危险,把不能被带走的动物重新添加到原来的位置
if (AtRisk(leftBank))
{
leftBank.add(i, animal);
continue;
}
else
{
rightBank.add(animal);
System.out.println("老农带"+animal+"过河");
break ; //跳出for循环
}
}
isAtLeftBank = false;
}
/* 老农在右岸,如果此时右岸的动物没有危险,则老农独自一人回去
* 否则需从右岸动物中选一只带走,判断余下的动物是否危险,
*/
else
{
if (AtRisk(rightBank))
{
for (int i = 0; i < rightBank.size(); i++) {
animal = rightBank.remove(i);
if (AtRisk(rightBank))
{
rightBank.add(i, animal);
continue;
}
else
{
leftBank.add(animal);
System.out.println("老农带"+animal+"回来");
break;
}
}
}
else
{
System.out.println("老农独自回来");
}
isAtLeftBank = true;
}
}
System.out.println("过河成功!");
}
/*
* 定义AtRisk方法,判断岸边的动物是否存在危险
* 岸边同时有狗和猫,或猫和鱼时,返回true,否则返回false
*/
public static boolean AtRisk(List<String> list){
if (list.contains("dog") && list.contains("cat"))
return true;
else if (list.contains("fish") && list.contains("cat"))
return true;
else
return false;
}
}
</p>
复制代码
作者:
Woo
时间:
2015-8-20 17:13
如果 leftBank.add("fish");leftBank.add("cat");leftBank.add("dog");几行代码的添加顺序换一下,输出的结果会不会不一样?能否用类的方法再写一下第二版代码?
作者:
左岸那片海
时间:
2015-8-22 00:28
很好,赞一个
作者:
大木木
时间:
2015-8-22 00:59
猴赛雷哦~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2