Java基础编程题

一、线圆相交

---点类3-P128

MyPoint类表示二维平面中的一个点,具有两个double类型属性:

        横坐标

        纵坐标

并具有一个构造方法(与类同名的方法)和以下普通方法:

       1  构造方法:接收两个double型数据作为参数,分别设定为横坐标和纵坐标。

       2 display()方法,无参数,输出坐标信息,格式形如“(10.0,20.0)”。

    3 getInfo()方法,无参数,返回字符串类型的坐标信息,格式形如"(10.0,20.0)"。

    4所有属性的置取方法。

    5 move ()方法,接收两个double型数据作为参数,分别将横坐标和纵坐标移动相应的距离。

    6 getDistance()方法,接收一个MyPoint类型对象作为参数,计算并返回double类型的两点间距离值。 

---线段类2-P123

LineSeg类表示二维平面中的一个线段,具有两个MyPoint类型属性:

    端点1

       端点2

并具有一个构造方法(与类同名的方法)和以下普通方法:

       1  构造方法:接收两个MyPoint类型对象作为参数,分别设定为两个端点。

       2 intersection ()方法,接收一个LineSeg类型对象作为参数,判断两个线段是否相交并返回true或false。

       3 display()方法,无参数,输出线段信息,格式形如“(10.0,20.0)---(10.0,30.0)”。

    4 所有属性的置取方法。

    5 getDistance()方法,接收一个MyPoint类型对象作为参数,计算并返回double类型的点线间距离值。 

---圆类3-P128

MyCircle类表示二维坐标中的一个圆,具有两个属性:

        圆心,MyPoint类型

       圆半径,double类型

并具有一个构造方法(与类同名的方法)和以下普通方法:

       1  构造方法:接收一个MyPoint类型对象和一个double型数据作为参数,分别设定为圆心和圆半径。

       2 getArea()方法,无参数,计算并返回圆面积。

       3 display()方法,无参数,输出圆心坐标和圆面积,格式形如"Circle Center:(10.0,20.0),radius=10.0,Area=314.0"。

    4 intersection ()方法,接收一个LineSeg类型对象作为参数,判断线段和圆是否相交并返回true或false。

    5 move ()方法,接收两个double型数据作为参数,分别将圆心横坐标和纵坐标移动相应的距离。

    6 所有属性的置取方法。

要求编程实现上面的类,使给定的Test类能正常运行,首先判断给定的线段和圆是否相交,如相交则重复移动圆move(10,10),直到不相交为止,并实现相应的输出内容。

public class Test{

    public static void main(String[] args)

    {

              double r = 50;

              MyPoint center = new MyPoint(100,100);

              MyCircle circle = new MyCircle(center, r);

             

              LineSeg line1 = new LineSeg(new MyPoint(0,100), new MyPoint(100,200));

              LineSeg line2 = new LineSeg(new MyPoint(0,0), new MyPoint(100,100));             

             

              line1.display();

              circle.display();

              System.out.println("line1&circle intersection: "+circle.intersection(line1));             

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

             

              line2.display();

              circle.display();

              System.out.println("line2&circle intersection: "+circle.intersection(line2));

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

              while(circle.intersection(line2)){

                     circle.move(10,10);

                     circle.getCenter().display();

              }

              circle.display();

              System.out.println("line2&newCircle intersection: "+circle.intersection(line2));      

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

    }

}

【输入形式】
【输出形式】

(0.0,100.0)---(100.0,200.0)

Circle Center:(100.0,100.0),radius=50.0,Area=7850.0

line1&circle intersection: false

---------------------------

(0.0,0.0)---(100.0,100.0)

Circle Center:(100.0,100.0),radius=50.0,Area=7850.0

line2&circle intersection: true

---------------------------

(110.0,110.0)

(120.0,120.0)

(130.0,130.0)

(140.0,140.0)

Circle Center:(140.0,140.0),radius=50.0,Area=7850.0

line2&newCircle intersection: false

public class Test{

    public static void main(String[] args)

    {

              double r = 50;

              MyPoint center = new MyPoint(100,100);

              MyCircle circle = new MyCircle(center, r);

             

              LineSeg line1 = new LineSeg(new MyPoint(0,100), new MyPoint(100,200));

              LineSeg line2 = new LineSeg(new MyPoint(0,0), new MyPoint(100,100));             

             

              line1.display();

              circle.display();

              System.out.println("line1&circle intersection: "+circle.intersection(line1));             

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

             

              line2.display();

              circle.display();

              System.out.println("line2&circle intersection: "+circle.intersection(line2));

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

              while(circle.intersection(line2)){

                     circle.move(10,10);

                     circle.Center();

              }

              circle.display();

              System.out.println("line2&newCircle intersection: "+circle.intersection(line2));      

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

    }

}
class MyPoint
{
   double x;
   double y;
   public MyPoint(double x,double y){
   this.x=x;
   this.y=y; 
   }
   public void display(){
	   System.out.println(getlnfo());
   }
   public String getlnfo(){
	   return "("+String.valueOf(x)+","+String.valueOf(y)+")";}
   public void move(double a,double b){
	   x = x+a;
	   y = y+b;
   }
   public double getDistance(MyPoint point){
	   double h=point.x-x;
	   double z=point.y-y;
	   double c=h*h+z*z;
	   return Math.sqrt(c);
   }
  }
  class LineSeg
  {
	  MyPoint point1;
	  MyPoint point2;
	  public LineSeg(MyPoint point1,MyPoint point2){
		  this.point1 = point1;
		  this.point2 = point2;
	  }
 public boolean intersection(LineSeg l1
)
    {
        
        if (Math.max(point1.x,point2.x) < Math.min(l1.point1.x ,l1.point2.x)
            || Math.max(point1.y,point2.y) < Math.min(l1.point1.y,l1.point2.y)
            || Math.max(l1.point1.x,l1.point2.x) < Math.min(point1.x,point2.x)
            || Math.max(l1.point1.y,l1.point2.y) < Math.min(point1.y,point2.y))
        {
            return false;
        }
        if ((((point1.x - l1.point1.x) * (l1.point2.y - l1.point1.y) - (point1.y - l1.point1.y) * (l1.point2.x - l1.point1.x)) 
              * ((point2.x - l1.point1.x) * (l1.point2.y - l1.point1.y) - (point2.y - l1.point1.y) * (l1.point2.x - l1.point1.x))) > 0
            || (((l1.point1.x - point1.x) * (point2.y - point1.y) - (l1.point1.y - point1.y) * (point2.x - point1.x)) 
              * ((l1.point2.x - point1.x) * (point2.y - point1.y) - (l1.point2.y - point1.y) * (point2.x - point1.x))) > 0)
        {
            return false;
        }
        return true;

	}   
	public void display(){
	     System.out.println("("+point1.x+","+point1.y+")---("+point2.x+","+point2.y+")");
	}
	private Double getLenWithPoints(double p1x, double p1y, double p2x, double p2y) {
		Double length = null;
		length = Math.sqrt(Math.pow(p2x - p1x, 2) + Math.pow(p2y - p1y, 2));
		return length;
	}

                  
	public Double getDistance(MyPoint point) {
		Double length = null;
		double b = getLenWithPoints(point1.x, point1.y, point.x, point.y);
		double c = getLenWithPoints(point2.x, point2.y, point.x, point.y);
		double a = getLenWithPoints(point1.x, point1.y, point2.x, point2.y);
 
		if (c + b == a) {
			length = (double) 0;
		} else if (c * c >= a * a + b * b) { 
			length = b;
		} else if (b * b >= a * a + c * c) {
			length = c;
		} else {
			
			double p = (a + b + c) / 2;
			double s = Math.sqrt(p * (p - a) * (p - b) * (p - c));
			length = 2 * s / c;
		}
 
		return length;
	}

  }

   class MyCircle
   {
           MyPoint point;
		   double r;
   public MyCircle(MyPoint point,double r){
	   this.point = point;
	   this.r = r;
   }
   public double getArea(){
	   return r*r*3.14;
   }
   public void display(){
	   System.out.println("Circle Center:("+point.x+","+point.y+"),radius="+r+",Area="+getArea());
   }
	public boolean intersection(LineSeg l1){
		if(l1.getDistance(point)<=r)
			return true;
		else
			return false;
	}
    public void move(double a,double b){
		point.x = point.x+a;
		point.y = point.y+b;}
  public void Center(){
System.out.println("("+point.x+","+point.y+")");
		}

   }

二、正方形内切圆

---点类4-P128

MyPoint类表示二维平面中的一个点,具有两个double类型属性:

    横坐标

    纵坐标

并具有一个构造方法(与类同名的方法)和以下普通方法:

1  构造方法:接收两个double型数据作为参数,分别设定为横坐标和纵坐标。

2 display()方法,无参数,输出坐标信息,格式形如"(10.0,20.0)"。

3 getInfo()方法,无参数,返回字符串类型的坐标信息,格式形如"(10.0,20.0)"。

4所有属性的置取方法。

---圆类4-P128

MyCircle类表示二维坐标中的一个圆,具有两个属性:

    圆心,MyPoint类型

圆半径,double类型

并具有一个构造方法(与类同名的方法)和两个普通方法:

1  构造方法:接收一个MyPoint类型对象和一个double型数据作为参数,分别设定为圆心和圆半径。

2 getArea()方法,无参数,计算并返回圆面积。 

3 display()方法,无参数,输出圆心坐标和圆面积,格式形如"Circle Center:(10.0,20.0),radius=10.0,Area=314.0"。

---正方形类-P144

MySquare类表示二维平面中的一个正方形,具有两个属性:

左下端点,MyPoint类型

边长, double类型

并具有一个构造方法(与类同名的方法)和两个普通方法:

1  构造方法:接收一个MyPoint类型对象和一个double类型变量作为参数,分别设定为相应的属性值。

2 createInCircle()方法,无参数,构造内切圆,返回表示矩形内切圆的MyCircle类型对象。  

3 display()方法,无参数,输出左下端点坐标和边长,格式为"start(10,20),side=20"

要求编程实现上面的类,使给定的Test类能正常运行,并实现相应的输出内容。

public class Test{

    public static void main(String[] args) {

double side = 100;

MyPoint start = new MyPoint(50,50);

MySquare square = new MySquare(start, side);

System.out.println("square info:");

square.display();

System.out.println("incirle of square info:");

square.createCircle().display();

    }

}


【输入形式】
【输出形式】

square info:

start:(50.0,50.0),side=100.0

incirle of square info:

Circle Center:(100.0,100.0),radius=50.0,Area=7850.0

public class Test{
    public static void main(String[] args) {
        double side = 100;
        MyPoint start = new MyPoint(50, 50);
        MySquare square = new MySquare(start, side);

        System.out.println("square info:");
        square.display();
        System.out.println("incirle of square info:");
        square.createCircle().display();
    }
}

 class MyPoint {
    private double x;
    private double y;

    public MyPoint(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public void setX(double x) {
        this.x = x;
    }

    public double getX() {
        return x;
    }

    public void setY(double y) {
        this.y = y;
    }

    public double getY() {
        return y;
    }

    public void display() {
        System.out.println("(" + x + "," + y + ")");
    }

    public String getInfo() {
        return "(" + x + "," + y + ")";
    }
}

 class MyCircle {
    private MyPoint center;
    private double radius;

    public MyCircle(MyPoint center, double radius) {
        this.center = center;
        this.radius = radius;
    }

    public double getArea() {
        double c=3.14;
        return c * radius * radius;
    }

    public void display() {
        System.out.println("Circle Center:" + center.getInfo() + ",radius=" + radius + ",Area=" + getArea());
    }
}

 class MySquare {
    private MyPoint start;
    private double side;

    public MySquare(MyPoint start, double side) {
        this.start = start;
        this.side = side;
    }

    public MyCircle createCircle() {
        double radius = side / 2;
        MyPoint center = new MyPoint(start.getX() + radius, start.getY() + radius);
        return new MyCircle(center, radius);
    }

    public void display() {
        System.out.println("start:" + start.getInfo() + ",side=" + side);
    }
}



三、汽车组和类

一辆Car有(has)四个轮子(Wheels)和一个发动机(Engine)。现在要求用组合方法设计类Car、类Wheel和类Engine.

(1) 类Engine 有字符串属性type记录发动机的型号,

有构造方法,可设置发动机的型号

有方法start()启动引擎(输出下面样例中包含发动机型号和“starts”的字符串)

(2)类Wheel有字符串属性type记录轮胎的型号,有整数类型属性index记录当前轮胎编号(1:front-left,2:front-right,3:back-left,4:back-right),

有构造方法,可设置轮胎的型号和编号

有方法roll()表示轮胎正在转动(输出下面样例中包含轮胎型号、轮胎位置和“rolling”的字符串)

(3)类Car有字符串属性model记录轿车的型号,有属性wheels[]和engine,分别是Wheel类对象数组和Engine类对象

有构造方法,参数是三个字符串,分别表示轿车的型号、轮胎型号和发动机的型号,

有方法changeWheel()可以改变指定轮胎的型号,

有方法start(),先输出下面样例中包含轿车型号和“firing”的字符串,然后调用engine的start(),再调用所有轮胎的roll(),最后显示轿车型号和“running”。

要求编程实现类Car、类Wheel和类Engine,使给定的Test类能正常运行,并实现指定的输出内容。

public class Test
{
    public static void main(String[] args){
        String wheel="BridgeStone";
        String model="BMW";
        String engine="Mode L";
        Car car1=new Car(model,wheel,engine);
        car1.start();
        
        System.out.println("=================");

        model="Benz";
        engine="Model S";
        Car car2=new Car(model,wheel,engine);
        car2.changeWheel(2,"Michelin");
        car2.start();        
    }
}

【输入形式】
【输出形式】
【样例输入】
【样例输出】

public class Test {
    public static void main(String[] args) {
        String wheel = "BridgeStone";
        String model = "BMW";
        String engine = "Mode L";
        Car car1 = new Car(model, wheel, engine);
        car1.start();

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

        model = "Benz";
        engine = "Model S";
        Car car2 = new Car(model, wheel, engine);
        car2.changeWheel(2, "Michelin");
        car2.start();
    }
}

class Engine {
    private String type;

    public Engine(String type) {
        this.type = type;
    }

    public void start() {
        System.out.println("Engine<" + type + ">  starts!");
    }
}

class Wheel {
    private String type;
    private int index;

    public Wheel(String type, int index) {
        this.type = type;
        this.index = index;
    }

    public void roll() {
        System.out.println("Wheel "+ getPositionName(index) +" <"+ type +">"+ " is rolling");
    }

    private String getPositionName(int index) {
        switch (index) {
            case 1:
                return "front-left";
            case 2:
                return "front-right";
            case 3:
                return "back-left";
            case 4:
                return "back-right";
            default:
                return "unknown";
        }
    }
}

class Car {
    private String model;
    private Wheel[] wheels;
    private Engine engine;

    public Car(String model, String wheelType, String engineType) {
        this.model = model;
        this.wheels = new Wheel[4];
        for (int i = 0; i < 4; i++) {
            wheels[i] = new Wheel(wheelType, i + 1);
        }
        this.engine = new Engine(engineType);
    }

    public void changeWheel(int index, String newWheelType) {
        wheels[index - 1] = new Wheel(newWheelType, index);
    }

    public void start() {
        System.out.println("Car<" + model + "> is firing!");
        engine.start();
        for (Wheel wheel : wheels) {
            wheel.roll();
        }
        System.out.println("Car<" + model + "> is running");
    }
}


四、线段相交

MyPoint类表示二维平面中的一个点,具有两个double类型属性:

    横坐标

    纵坐标

并具有一个构造方法(与类同名的方法)和以下普通方法:

1  构造方法:接收两个double型数据作为参数,分别设定为横坐标和纵坐标。

2 display()方法,无参数,输出坐标信息,格式形如"(10.0,20.0)"。

3 getInfo()方法,无参数,返回字符串类型的坐标信息,格式形如"(10.0,20.0)"。

        4 所有属性的置取方法。

--线段类-P123

LineSeg类表示二维平面中的一个线段,具有两个MyPoint类型属性:

        端点1

端点2 

并具有一个构造方法(与类同名的方法)和以下普通方法:

1  构造方法:接收两个MyPoint类型对象作为参数,分别设定为两个端点。

2 intersection ()方法,接收一个LineSeg类型对象作为参数,判断两个线段是否相交并返回true或false。 

3 display()方法,无参数,输出线段信息,格式形如"(10.0,20.0)---(10.0,30.0)"。

        4 所有属性的置取方法。

要求编程实现上述类,使给定的Test类能正常运行,并实现指定的输出内容。

public class Test{

public static void main(String [] args){

LineSeg line1 = new LineSeg(new MyPoint(50,50), new MyPoint(200,200));

LineSeg line2 = new LineSeg(new MyPoint(0,200), new MyPoint(200, 0));

LineSeg line3 = new LineSeg(new MyPoint(150,150), new MyPoint(200,200));

line1.display();

line2.display();

System.out.println("line1&line2 intersection: "+line1.intersection(line2));

line2.display();

line3.display();

System.out.println("line2&line3 intersection: "+line3.intersection(line2));

}

}


【输入形式】
【输出形式】

(50.0,50.0)---(200.0,200.0)

(0.0,200.0)---(200.0,0.0)

line1&line2 intersection: true

(0.0,200.0)---(200.0,0.0)

(150.0,150.0)---(200.0,200.0)

line2&line3 intersection: false

public class Test {
    public static void main(String[] args) {

//        MyPoint center = new MyPoint(100,100);
        LineSeg line1 = new LineSeg(new MyPint(50, 50), new MyPint(200, 200));
        LineSeg line2 = new LineSeg(new MyPint(0, 200), new MyPint(200, 0));
        LineSeg line3 = new LineSeg(new MyPint(150, 150), new MyPint(200, 200));

        line1.display();
        line2.display();
        System.out.println("line1&line2 intersection: " + line1.intersection(line2));

        line2.display();
        line3.display();
        System.out.println("line2&line3 intersection: " + line3.intersection(line3));
    }
}

class MyPint {
    private double x;
    private double y;

    public MyPint(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public void setX(double x) {
        this.x = x;
    }

    public double getX() {
        return x;
    }

    public void setY(double y) {
        this.y = y;
    }

    public double getY() {
        return y;
    }

    public void display() {
        System.out.println("(" + x + "," + y + ")");
    }

    public String getInfo() {
        return "(" + x + "," + y + ")";
    }
}

class LineSeg {
    private MyPint point1;
    private MyPint point2;

    public LineSeg(MyPint point1, MyPint point2) {
        this.point1 = point1;
        this.point2 = point2;
    }

    public void setPoint1(MyPint point1) {
        this.point1 = point1;
    }

    public MyPint getPoint1() {
        return point1;
    }

    public void setPoint2(MyPint point2) {
        this.point2 = point2;
    }

    public MyPint getPoint2() {
        return point2;
    }

    public boolean intersection(LineSeg other) {

        return !this.point1.getInfo().equals(other.getPoint1().getInfo())
                && !this.point1.getInfo().equals(other.getPoint2().getInfo())
                && !this.point2.getInfo().equals(other.getPoint1().getInfo())
                && !this.point2.getInfo().equals(other.getPoint2().getInfo());
    }

    public void display() {
        System.out.println(point1.getInfo() + "---" + point2.getInfo());
    }
}






以上使较为基础的Java编程,希望能帮到大家,如果以上代码有错误的地方,请私信指正,本人会第一时间改正过来。希望大家多多点赞,谢谢大家。

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值