题目1
1.编写一个Point类,有x、y、z三个属性;
编写一个PointDemo类,并提供一个distance(Point p1,Point p2)方法用于计算两点之间的空间距离,实例化两个具体的Point对象并显示它们之间的距离。
Point.java
package 第一题;
/**
* @Author:大白
* @Description:
* @Date: Created in: 14:28 2018/5/3
* @Modified By:
*/
public class Point {
int x;
int y;
int z;
Point(){
}
Point(int x,int y,int z){
this.x = x;
this.y = y;
this.z = z;
}
}
PointDemo.java
package 第一题;
/**
* @Author:大白
* @Description:
* @Date: Created in: 14:29 2018/5/3
* @Modified By:
*/
public class PointDemo {
public double distance(Point p1,Point p2) {
double distance;
distance = Math.sqrt(Math.pow((p1.x-p2.x),2)+Math.pow((p1.y-p2.y),2)+Math.pow((p1.z-p2.z),2));
return distance;
}
}
Test.java
package 第一题;
/**
* @Author:大白
* @Description:
* @Date: Created in: 14:37 2018/5/3
* @Modified By:
*/
public class Test {
public static void main(String[] args){
Point p1 = new Point(1,2,3);
Point p2 = new Point(4,5,6);
PointDemo pointDemo = new PointDemo();
System.out.println("两点之间的距离为"+pointDemo.distance(p1,p2));
}
}
【实验结果】
题目2
2.定义员工类Employee
(1)成员变量:职工号、姓名、性别、工龄、基本工资、交通补贴、午餐补助、奖金
(2)定义一个空构造方法和一个能够初始化所有成员变量的构造方法。
(3)定义统计实发工资总额的方法
(4)利用toString()方法返回员工的所有信息
(5)定义方法输出职工号、姓名、工龄、实发工资。
Employee.java
package 第二题;
/**
* @Author:大白
* @Description:
* @Date: Created in: 14:54 2018/5/3
* @Modified By:
*/
public class Employee {
int number;
String name;
String sex;
int age;
int basePay;
int travelAllowance;
int lunchAllowance;
int bonus;
Employee(){
}
Employee(int number, String name, String sex, int age, int basePay, int travelAllowance, int lunchAllowance,int bonus){
this.number = number;
this.name =name;
this.sex = sex;
this.age = age;
this.basePay = basePay;
this.travelAllowance = travelAllowance;
this.lunchAllowance = lunchAllowance;
}
public int salary(){
int result;
result = basePay + travelAllowance + lunchAllowance+bonus;
return result;
}
@Override
public String toString() {
return " 职工号: "+number+" 姓名: "+name+" 性别: "+sex+" 工龄: "+age+" 基本工资: "+basePay+" 交通补贴: "+travelAllowance+" 午餐补助: "+lunchAllowance+" 奖金: "+bonus;
}
public String get(){
return " 职工号: "+number+" 姓名: "+name+" 工龄: "+" 实发工资: "+salary();
}
}
Test.java
package 第二题;
import static java.lang.System.*;
/**
* @Author:大白
* @Description:
* @Date: Created in: 15:32 2018/5/3
* @Modified By:
*/
public class Test {
public static void main(String[] args){
Employee employee = new Employee(001,"黄意恒", "男",1,3000,200,500,1000);
out.println("工资总额为:"+employee.salary());
out.println("员工的所有信息为:"+employee);
System.out.println("部分信息为:"+employee.get());
}
}
【实验结果】
题目3
3.(1)抽象一个复数类
成员变量:实部real、虚部image;
构造方法:赋初值;
成员方法:加法运算 FuShu add(FuShu s1);
成员方法:打印输出复数
(2)Test类 主方法main:两个复数相加,输出结果。
FuShu.java
package 第三题;
/**
* @Author:大白
* @Description:
* @Date: Created in: 16:01 2018/5/3
* @Modified By:
*/
public class FuShu {
int real;
int image;
FuShu(){
}
FuShu(int real,int image){
this.real = real;
this.image = image;
}
public void output(){
System.out.println("复数:"+real+"+"+image+"i");
}
public FuShu add(FuShu s1) {
FuShu result = new FuShu(); //分配空间
result.real = s1.real + this.real;
result.image = s1.image + this.image;
return result;
}
}
Test.java
package 第三题;
/**
* @Author:大白
* @Description:
* @Date: Created in: 16:10 2018/5/3
* @Modified By:
*/
public class Test {
public static void main(String[] args){
FuShu s1 = new FuShu(1,2);
s1.output();
FuShu s2 = new FuShu(3,4);
s2.output();
System.out.println("两个复数相加的结果为"+s1.add(s2).real+"+"+s1.add(s2).image+"i");
}
}
【实验结果】
题目4
4.构造一个分数类Fraction,执行分数运算
(1) 用整型数表示类的private成员变量:x和y;
(2) 提供构造方法,将分子存入x,分母存入y;
(3) 提供两个分数相加、相减、相乘、相除的运算方法;
(4)以a/b的形式以及浮点数的形式打印Fraction数;(可以不考虑约减)
(5) 编写主控程序运行分数运算。
Fraction.java
package 第四题;
/**
* @Author:大白
* @Description:
* @Date: Created in: 16:24 2018/5/3
* @Modified By:
*/
public class Fraction {
int numerator; //分子
int denominator; //分母
int f(int a,int b) { //求两个数a、b的最大公约数
if(a<b) {
int c = a;
a = b;
b = c;
}
int r = a%b;
while(r != 0) {
a = b;
b = r;
r = a%b;
}
return b;
}
void reset(int fenzi,int fenmu) { //约分:求新的分子、分母
int m = fenzi;
int n = fenmu;
if(fenzi<0) {
m = -1*fenzi;
}
if(fenmu<0) {
n = -1*fenmu;
}
if(fenzi == 0) {
numerator = 0;
denominator = 1;
return;
}
int c = f(m,n); //调用f函数,计算分子、分母的最大公约数
numerator = fenzi/c;
denominator = fenmu/c;
if(numerator<0&&denominator<0) {
numerator = -numerator;
denominator = -denominator;
}
}
int getnumerator() { //得到分子
return numerator;
}
int getdenominator() { //得到分母
return denominator;
}
Fraction add(Fraction r) { //加法运算
int a = r.getnumerator();
int b = r.getdenominator();
int newNumertor = numerator*b + a*denominator;
int newDenominator = b*denominator;
Fraction result = new Fraction();
result.reset(newNumertor, newDenominator);
return result;
}
Fraction sub(Fraction r) { //减法运算
int a = r.getnumerator();
int b = r.getdenominator();
int newNumertor = numerator*b - a*denominator;
int newDenominator = b*denominator;
Fraction result = new Fraction();
result.reset(newNumertor, newDenominator);
return result;
}
Fraction muti(Fraction r) { //乘法运算
int a = r.getnumerator();
int b = r.getdenominator();
int newNumertor = numerator*a;
int newDenominator = denominator*b;
Fraction result = new Fraction();
result.reset(newNumertor, newDenominator);
return result;
}
Fraction div(Fraction r) { //除法运算
int a = r.getnumerator();
int b = r.getdenominator();
int newNumertor = numerator*b;
int newDenominator = denominator*a;
Fraction result = new Fraction();
result.reset(newNumertor, newDenominator);
return result;
}
public static void main(String[] args) {
Fraction r1 = new Fraction();
Fraction r2 = new Fraction();
r1.reset(3, 5);
int r1fenzi = r1.getnumerator();
int r1fenmu = r1.getdenominator();
r2.reset(3,2);
int r2fenzi = r2.getnumerator();
int r2fenmu = r2.getdenominator();
Fraction result = r1.add(r2);
int resultFenzi = result.getnumerator();
int resultFenmu = result.getdenominator();
System.out.printf("\n%d/%d + %d/%d = %d/%d",r1fenzi,r1fenmu,r2fenzi,r2fenmu,resultFenzi,resultFenmu);
result = r1.sub(r2);
resultFenzi = result.getnumerator();
resultFenmu = result.getdenominator();
System.out.printf("\n%d/%d - %d/%d = %d/%d",r1fenzi,r1fenmu,r2fenzi,r2fenmu,resultFenzi,resultFenmu);
result = r1.muti(r2);
resultFenzi = result.getnumerator();
resultFenmu = result.getdenominator();
System.out.printf("\n%d/%d * %d/%d = %d/%d",r1fenzi,r1fenmu,r2fenzi,r2fenmu,resultFenzi,resultFenmu);
result = r1.div(r2);
resultFenzi = result.getnumerator();
resultFenmu = result.getdenominator();
System.out.printf("\n%d/%d / %d/%d = %d/%d",r1fenzi,r1fenmu,r2fenzi,r2fenmu,resultFenzi,resultFenmu);
}
}
【实验结果】
题目5
5.抽象一个圆类
成员变量:半径;
成员方法:求面积;
抽象一个圆锥类
成员变量:圆锥的底为圆类的对象;
成员变量:高
成员方法:求体积。
主类
主方法main:通过赋值,打印圆锥体积。
三个类放在一个java文件中。
Test.java
package 第五题;
/**
* @Author:大白
* @Description:
* @Date: Created in: 19:45 2018/5/3
* @Modified By:
*/
public class Test {
public static void main(String[] args){
Circle circle = new Circle(4);
Cone cone =new Cone(circle,5);
System.out.println("圆锥得到体积为:"+cone.volume());
}
}
class Circle {
int radius;
Circle(){}
Circle(int radius){
this.radius = radius;
}
public double area(){
double result;
result = 3.14*radius*radius;
return result;
}
}
class Cone {
Circle circle;
double height;
Cone(Circle circle,double height){
this.circle = circle;
this.height = height;
}
public double volume(){
double result = 1.0/3*circle.area()*height;
return result;
}
}
【实验结果】
题目6
6.创建一个有理数的计算器:
实现时:
java Ex “3/4+1/5” 3/4+1/5=19/20
java Ex “3/4-1/5” 3/4-1/5=11/20
java Ex “3/41/5” 3/41/5=3/20程序从命令行得到三个参数(操作数1,操作符,操作数2),显示该表达式以及算数运算的结果。
提示:使用String类的split方法来获取分子字符串和分母字符串,并使用Integer.parseInt方法将字符串转换为整数。
Counter.java
public class Counter {
private static int[] X=new int[10];
private static String[] array=new String[5];
public static void main(String[] args) {
/*
* @Author:大白
* @Description:判断输入的字符串的运算规则,之后将输入的字符串按照加减乘符号分割,且按照特殊符号进行分割时,要加\\
* @Data:10:54 2018/5/5
*/
if(args[0].contains("+")){
array=args[0].split("\\+"); /*将输入的字符串按照+号分割,且按照特殊符号进行分割时,要加\\*/
String f1[]=array[0].split("/"); /**将+号两边的分数按照/号进行分割*/
String f2[]=array[1].split("/");
splitArray(f1,f2);
System.out.println(X[1]+"/"+X[2]+"+"+X[3]+"/"+X[4]+"="+((X[1]*X[4]+X[2]*X[3])+"/"+(X[2]*X[4])));
}else if(args[0].contains("-")){
String[] array=args[0].split("-");
String f1[]=array[0].split("/");
String f2[]=array[1].split("/");
splitArray(f1,f2);
System.out.println(X[1]+"/"+X[2]+"-"+X[3]+"/"+X[4]+"="+((X[1]*X[4]-X[2]*X[3])+"/"+(X[2]*X[4])));
}else if(args[0].contains("*")){
String[] array=args[0].split("\\*");
String f1[]=array[0].split("/");
String f2[]=array[1].split("/");
splitArray(f1,f2);
System.out.println(X[1]+"/"+X[2]+"*"+X[3]+"/"+X[4]+"="+((X[1]*X[3])+"/"+(X[2]*X[4])));
}
}
private static void splitArray(String[] f1, String[] f2){
/*
* @Author:大白
* @Description:将分割后的字符串转换成int型
* @Data:10:52 2018/5/5
*/
X[1]=Integer.parseInt(f1[0]);
X[2]=Integer.parseInt(f1[1]);
X[3]=Integer.parseInt(f2[0]);
X[4]=Integer.parseInt(f2[1]);
}
}
【实验结果】
题目7
7.设计一个名为Geometry的抽象类,其中有名为getArea()的抽象方法,getPerimeter的抽象方法
设计一个名为Square的类,继承Geometry类,重写两个抽象方法;
创建含有2个元素的Geometry类的数组,第一个元素为Square类的对象,第二个元素如下:
以匿名类的形式创建一个模拟Circle类的对象,继承Geometry类,重写两个抽象方法;
打印每个对象的面积,周长。
Geometry.java
package 第七题;
/**
* @Author:大白
* @Description:
* @Date: Created in: 19:54 2018/5/3
* @Modified By:
*/
public abstract class Geometry {
public abstract double getArea();
public abstract double getPerimeter();
}
Square.java
package 第七题;
/**
* @Author:大白
* @Description:
* @Date: Created in: 19:56 2018/5/3
* @Modified By:
*/
public class Square extends Geometry{
double side;
public Square(double side) {
this.side =side ;
}
@Override
public double getArea() {
double area;
area = side*side;
return area;
}
@Override
public double getPerimeter() {
double perimeter;
perimeter = 4*side;
return perimeter;
}
}
Test.java
package 第七题;
/**
* @Author:大白
* @Description:
* @Date: Created in: 20:03 2018/5/3
* @Modified By:
*/
public class Test {
public static void main(String[] args){
Geometry[] geometries = new Geometry[2];
geometries[0] = new Square(4.0);
geometries[1] = new Geometry() {
double radiuis = 4;
@Override
public double getArea() {
double area = 3.14 * radiuis * radiuis;
return area;
}
@Override
public double getPerimeter() {
double perimeter;
perimeter = 2 * 3.14 * radiuis;
return perimeter;
}
};
for(Geometry i:geometries){
System.out.println("面积为:"+i.getArea()+" 周长为:"+i.getPerimeter());
}
}
}
【实验结果】
实验小结:
本次实验共7题,通过这次实验学到了很多的知识,学会了toString的用法,还有String类的split方法和Integer.parseInt方法,也加深了对对象实例化的理解,但同时也发现一些问题,学过的知识容易忘记,有几题写过类似的题,但再一次写的时候却发现有些细节记不牢,比如第四题的分数加减乘除,对负数的处理以及约分的细节都有点忘记了。看来有些知识光靠记是不行的,得多动手才行,有些题得多写几遍。