CSP-2018-3之碰撞的小球

设计思路:

  1. 对象Ball中主要定义两个方法:碰到墙和小球方向改变,并且初始化小球的初始位置及小球的初始化方向;
    2.在Main方法中规定小球向左运动时位置-1,向右时+1,在碰撞和遇到墙的时候会发生改变,当时间消耗结束,就是小球的最终位置。
    基本思路如下:
    CSP-2018-3之碰撞的小球_第1张图片
    碰撞的小球java思路.png

    代码如下:
    import java.util.Scanner;
    public class CrashBall {

//设置为true表示方向向右
boolean side = true;

//定义小球的坐标  
int point = 0;  
  
//方向的改变  
public void changeSide() {  
    //如果方向向右,则变为向左  
    if(this.side) {  
        this.side = false;  
    }else {  
        //否则方向变为向右  
        this.side = true;  
    }  
}  
  
//碰到墙的情况,L表示整个坐标轴长度  
public void pWall(int L) {  
    //如果到达坐标两端,则调用changeSide方法改变方向  
    if(this.point == L || this.point == 0)   
        changeSide();  
}  


public static void main(String[] args) {  
    // TODO 自动生成的方法存根  
    Scanner scanner = new Scanner(System.in);  
    //读入第一行信息,包括小球个数,线段长度,时间  
    int n = scanner.nextInt();//小球个数  
    int L = scanner.nextInt();//坐标长度  
    int t = scanner.nextInt();//时间  
      
    //创建数组对象ball  
    CrashBall[] balls = new CrashBall[n];  
      
    //获取初始坐标  
    for(int i = 0; i < n; i++) {  
        //创建ball个体对象  
        balls[i] = new CrashBall();  
        //每个ball的point属性通过键盘输入读取  
        balls[i].point = scanner.nextInt();  
    }  
      
  //一开始就要运动了1s,所以用--t  
    while(--t > -1) {  
        //小球向右运动+1,向左运动-1  
        for(int i = 0; i < n; i++) {  
            //如果小球向右(即true),则point+1  
            if(balls[i].side)  
                balls[i].point++;  
            else  
                balls[i].point--;  
            //运动一秒后判断是否碰到墙了  
            balls[i].pWall(L);  
        }  
          
    //两球相碰时方向都改变  
        for(int i = 0; i < n-1; i++) {  
            for(int j = i + 1; j < n; j++) {  
                if(balls[i].point == balls[j].point) {  
                    balls[i].changeSide();  
                    balls[j].changeSide();  
                }  
            }  
        }     
    }  
      
  //输出最后的坐标  
    for(int i = 0; i < n; i++) {  
        if(i == n-1)  
            System.out.print(balls[i].point);  
        else  
            System.out.print(balls[i].point + " ");  
    }  
}  

}

你可能感兴趣的:(CSP-2018-3之碰撞的小球)