java模拟病毒传染_模拟细菌(病毒)传播(java作业)

学习java到现在差不多11天了, 老师留了个作业,模拟病毒复制:

1.如果病毒周围有其他的病毒,并且有空气,则病毒繁殖到空气的位置上;

2.如果病毒周围全是病毒,则病毒会因为呼吸不到空气死亡;

3.如果病毒周围全是空气,则病毒会因为孤独至死。

下面具体实现:

新建一个Germ类:

/**

* @(#)germ.java

*

*

* @author LiuJie

* @version 1.00 2007/4/13

*/

public class Germ {

public Germ() {

}

int colNum = 3;//行数

int rowNum = 3;//列数

public int[][] germa = new int[colNum+2][rowNum+2];

public int[][] germb = new int[colNum+2][rowNum+2];

/**

* 初始化矩阵germa,使边缘位置为3,中间位置为1或0

* 1代表病毒,0代表空气

*

*/

public void initialize(int[][] _germ){

for (int i = 0; ifor (int j = 0; jif(i == 0||i == _germ.length-1||j == 0||j == _germ[i].length-1){

_germ[i][j] = 3;

}else{

_germ[i][j] = (int)(Math.random() * 2);

}

}

}

}

/**

* 将矩阵_germ[][]边缘值改为3

*/

public void changeEdge(int[][] _germ){

for (int i = 0; ifor (int j = 0; jif(i == 0||i == _germ.length-1||j == 0||j == _germ[i].length-1){

_germ[i][j] = 3;

}

}

}

}

/**

* 输出整个矩阵的值

*/

public void output(int[][] _germ){

for (int i = 0; ifor (int j = 0; jSystem.out.print (_germ[i][j] + " ");

}

System.out.println ();

}

}

/**

* 输出矩阵_germ[i][j]位置的值

*/

public int outItem(int[][] _germ,int i,int j){

return _germ[i][j];

}

/**

* 判断当前_germ[i][j]位置的值

*/

public boolean itemCurrent(int[][] _germ,int i,int j){

if(outItem(_germ,i,j)==0){

if(itemAround0(_germ,i,j)){

return true;

}else{

return false;

}

}else{

if(itemAround1(_germ,i,j)){

return true;

}else{

return false;

}

}

}

/**

* 如果当前_germa[i][j]位置为真的话,则_germb[i][j]位置的值为1,否则为0

*/

public void itemGermB(int[][] _germa,int[][] _germb,int i,int j){

if(itemCurrent(_germa,i,j)){

_germb[i][j] = 1;

}else{

_germb[i][j] = 0;

}

}

/**

* 判断0周围的环境

*/

public boolean itemAround0(int[][] _germ,int i,int j){

if(item0ExistAround1(_germ,i,j)){

return true;

}else{

return false;

}

}

/**

* 判断1周围的环境

*/

public boolean itemAround1(int[][] _germ,int i,int j){

if(itemExist0NotAll0(_germ,i,j)){

return true;

}else{

return false;

}

}

/**

* 判断0周围是否满足条件:有1,并且1的位置为true

* 如果成立,返回true,否则返回flase

*/

public boolean item0ExistAround1(int[][] _germ,int i,int j){

if((_germ[i-1][j]==1&&itemExist0NotAll0(_germ,i-1,j))

||(_germ[i+1][j]==1&&itemExist0NotAll0(_germ,i+1,j))

||_germ[i][j-1]==1&&itemExist0NotAll0(_germ,i,j-1)

||_germ[i][j+1]==1&&itemExist0NotAll0(_germ,i,j+1)){

return true;

}else{

return false;

}

}

/**

* 判断1周围是否满足条件:周围除了3之外的数有0但不全是0

* 如果条件成立,返回true,否则返回false

*/

public boolean itemExist0NotAll0(int[][] _germ,int i,int j){

int[] a = new int[4];

creatArr(_germ,a,i,j);

int not3 = numArrnot3(a);

int[] b = new int[not3];

arrAtoB(a,b);

if((!judgAll0(b))&&(!judgAll1(b))){

return true;

}else{

return false;

}

}

/**

* 将germ[i][j]上下左右的数放入一个数组arr[]中

* 并将不为3的数放入数组arrT[]

*/

public void creatArr(int[][] _germ,int[] arr,int i,int j){

arr[0] = _germ[i-1][j];

arr[1] = _germ[i+1][j];

arr[2] = _germ[i][j-1];

arr[3] = _germ[i][j+1];

}

/**

* 返回数组arr[]中不为3的代码的个数

*/

public int numArrnot3(int[] arr){

int not3 = 0;

for (int i = 0; iif(arr[i]!=3){

not3++;

}

}

return not3;

}

/**

* 把数组arrA[]中所有不为3的数放入数组arrB[] 中

*/

public void arrAtoB(int[] arrA,int[] arrB){

int arrLong = 0;

for (int i = 0; iif(arrA[i] != 3){

arrB[arrLong] = arrA[i];

arrLong++;

}

}

}

/**

* 判断数组中是否全为0,如果是,返回true,否则返回false

*/

public boolean judgAll0(int[] _arr){

int numItm = 0;

for (int i = 0; iif(_arr[i] == 0){

numItm++;

}

}

if(numItm == _arr.length){

return true;

}else{

return false;

}

}

/**

* 判断数组中是否全为1,如果是,返回true,否则返回false

*/

public boolean judgAll1(int[] _arr){

int numItm = 0;

for (int i = 0; iif(_arr[i] == 1){

numItm++;

}

}

if(numItm == _arr.length){

return true;

}else{

return false;

}

}

/**

* 将矩阵germa和germb交换位置

*/

public void changeAB(){

int[][] _germtemp;

_germtemp = germa;

germa = germb;

germb = _germtemp;

}

}

新建一个Test类:

/**

* @(#)Test.java

*

*

* @author LiuJie

* @version 1.00 2007/4/13

*/

public class Test {

public Test() {

}

public static void main (String[] args) {

int acount = 0;

int num = 10;//循环次数

Germ g1 = new Germ();

g1.initialize(g1.germa);

g1.output(g1.germa);

System.out.println ("*****************");

while(true){

for (int i = 1; ifor (int j = 1; jg1.itemGermB(g1.germa,g1.germb,i,j);

}

}

g1.changeEdge(g1.germb);

g1.changeAB();

g1.output(g1.germa);

acount++;

System.out.println ("————————————————" + acount);

if(acount > num-1 ){

break;

}

}

}

}

完成^_^

注意把两个java文件放到一个文件夹里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值