JAVA技术及其应用实验四(访问权限和异常类)

题目1

1、设计一个名为股票Stock的类,包括:
一个名为symbol的字符串数据域表示股票代码。
一个名为name的字符串数据域表示股票名字。
一个名为previousClosingPrice的double型数据域,它存储的是前一日的股票值。
一个名为currentPrice的double型数据域,它存储的是当时的股票值。
创建一支有特定代码和名字的股票的构造方法。
一个名为getChangePercent()的方法,返回从previousClosingPrice变化到currentPrice的百分比
编写一个测试程序,创建一个Stock对象,它的股票代码是ORCL,股票名称是Oracle
Corporation,前一日收盘价34.5.设置新的当前值为34.35,然后显示市值变化的百分比。

Stock.java

package 第一题;

/**
 * @Author:大白
 * @Description:
 * @Date: Created in: 14:13 2018/5/10
 * @Modified By:
 */

public class Stock {
    String symbol;    /*股票代码*/
    String name;      /*股票名字*/
    double pervoiusClosingPrice;   /**前一日的股票值*/
    double currentPrice;         /*当时的股票值*/

    Stock(){}

    Stock(String symbol,String name,double pervoiusClosingPrice,double currentPrice){
        this.symbol = symbol;
        this.name = name;
        this.pervoiusClosingPrice = pervoiusClosingPrice;
        this.currentPrice = currentPrice;
    }

    public double getChangePrice() {
        double ChangePrice;
        ChangePrice = Math.abs(pervoiusClosingPrice-currentPrice)/currentPrice;
        return ChangePrice*100;
    }
}

Test.java

package 第一题;

/**
 * @Author:大白
 * @Description:
 * @Date: Created in: 14:26 2018/5/10
 * @Modified By:
 */

public class Test {
    public static void main(String[] args){
        Stock stock = new Stock("ORCL","OracleCorporation",34.5,34.35);
        stock.getChangePrice();
        System.out.println("这支股票市值变化的百分比为"+stock.getChangePrice()+"%");
    }
}

【实验结果】
在这里插入图片描述

题目2

2、在一个正n边形中,所有边的长度都相同,且所有角的度数都相同(即这个多边形式等边等角的)。设计一个名为RegularPolygon的类,包括:
一个名为n的int型私有数据域定义多边形的边数,默认值是3;
一个名为side的double型私有数据域存储边的长度,默认值是1;
一个名为x的double型私有数据域定义多边形中点的x坐标,默认值是0;
一个名为y的double型私有数据域定义多边形中点的y坐标,默认值是0;
一个创建带默认值的正多边形的无参构造方法;
一个能创建带边数和边长度、中心在(0,0)的正多边形的构造方法;
一个能创建带边数和边长度、中心在(x,y)的正多边形的构造方法;
所有数据域的访问器和修改器;
一个返回多边形周长的方法getPerimeter();
一个返回多边形面积的方法getArea()。计算正多边形面积的公式是:在这里插入图片描述
编写一个测试程序,分别使用无参构造方法、RegularPolygon(6,4)和RegularPolygon(10,4,5.6,7.8)创建三个RegularPolygon对象,显示每个对象的周长和面积。

RegularPolygon.java

package 第二题;

/**
 * @Author:大白
 * @Description:
 * @Date: Created in: 14:46 2018/5/10
 * @Modified By:
 */

public class RegularPolygon {
    private int n = 3;
    private double side = 1;
    private double x = 0;
    private double y = 0;


    public int getN() {
        return n;
    }

    public void setN(int n) {
        this.n = n;
    }

    public double getSide() {
        return side;
    }

    public void setSide(double side) {
        this.side = side;
    }

    public double getX() {
        return x;
    }

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

    public double getY() {
        return y;
    }

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


    RegularPolygon(){}
    RegularPolygon(int n,double side){
        this.n = n;
        this.side = side;
    }
    RegularPolygon(int n,double side,double x,double y){
        this.n = n;
        this.side = side;
        this.x = x;
        this.y = y;
    }
    public double getPerimeter(){
        double perimeter;
        perimeter = n*side;
        return perimeter;
    }

    public double getArea(){
        double area;
        area = n*side*side/(4*Math.tan(Math.PI/n));
        return area;
    }
}

Test.java

package 第二题;

/**
 * @Author:大白
 * @Description:
 * @Date: Created in: 15:09 2018/5/10
 * @Modified By:
 */

public class Test {
    public static void main(String[] args){
        RegularPolygon r1 = new RegularPolygon();
        RegularPolygon r2 = new RegularPolygon(6,4);
        RegularPolygon r3 = new RegularPolygon(10,4,5.6,7.8);
        RegularPolygon array[] = {r1,r2,r3};
        for (RegularPolygon i:array){
            System.out.print("周长为:"+i.getPerimeter());
            System.out.println("      面积为:"+i.getArea());
        }
    }
}

【实验结果】
在这里插入图片描述

题目3

3、设计一个名为Account的类,包括:
一个名为id的int类型私有数据域(默认值为0);
一个名为balance的double类型私有数据域(默认值为0);
一个名为annualInterestRate的double类型私有数据域存储当前利率(默认值为0)。假设所有的账号都有相同的利率。
一个用户创建默认账户的无参构造方法。
一个用于创建带特定id和初始余额的账户的构造方法。
id,balance和annualnterestRate的访问器和修改器。
一个名为getMonthlyInterestRate()的方法,返回月利率。
月利息是balance*monthlyInterestRate,monthlyInterestRate是annualInterestRate/12。注意,annualInterestRate是一个百分数,比如4.5%,你需要将其除以100.
一个名为withDraw的方法,从账户提取特定数额。
一个名为deposit的方法向账户存储特定数额。
编写测试程序,创建一个账户ID为1122,余额为20000美元,年利率为4.5%的Account对象。使用withDraw方法取款2500美元,使用deposit方法存款3000美元,然后打印余额、月利息。

Account.java

package 第三题;

/**
 * @Author:大白
 * @Description:
 * @Date: Created in: 15:19 2018/5/10
 * @Modified By:
 */

public class Account{
    private int id = 0;
    private double balance = 0;
    private double annuallnterestRate = 0;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }


    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }


    public double getAnnuallnterestRate() {
        return annuallnterestRate;
    }

    public void setAnnuallnterestRate(double annuallnterestRate) {
        this.annuallnterestRate = annuallnterestRate;
    }



    Account(){}
    Account(int id,double balance,double annuallnterestRate){
        this.id = id;
        this.balance = balance;
        this.annuallnterestRate = annuallnterestRate;
    }
    public double getMonthlyInterestRate(){
        double monthlyInterestRate = balance*annuallnterestRate/12;
        return monthlyInterestRate;
    }

    public void withDraw(double money){
        balance = balance-money;
        System.out.println("从账户中取走了"+money+"美元");
    }
    public void deposit(double money){
        balance = balance+money;
        System.out.println("在账户中存了"+money+"美元");
    }
}

Test.java

package 第三题;

/**
 * @Author:大白
 * @Description:
 * @Date: Created in: 15:41 2018/5/10
 * @Modified By:
 */

public class Test {
    public static void main(String[] args){
        Account account = new Account(1122,20000,4.5/100);
        account.withDraw(2500);
        account.deposit(3000);
        System.out.println("余额为:"+account.getBalance());
        System.out.println("月利息为"+account.getMonthlyInterestRate());
    }
}

【实验结果】
在这里插入图片描述

题目4

4、为二次方程式
在这里插入图片描述
设计一个名为QuadraticEquation的类。这个类包括:
代表三个系数的私有数据域a、b和c;
一个参数为a、b和c的构造方法;
a、b、c的三个get方法;
一个名为getDiscriminant()的方法返回判别式在这里插入图片描述
名为getRoot1()和getRoot2()的方法返回等式的两个根:
在这里插入图片描述
在这里插入图片描述
这些方法只有在判别式为非负数时才有用。如果判别式为负,这些方法返回0.
编写一个测试程序,提示用户输入a、b和c的值,然后显示判别式的结果。如果判别式为正数,显示两个根;如果判别式为0,显示一个根;否则,显示“The equation has no roots.”
要求:QuadraticEquation类和测试类放在不同的包下,注意import、package及访问权限问题。

QuadraticEquation.java

 package Four;

/**
 * @Author:大白
 * @Description:
 * @Date: Created in: 15:57 2018/5/10
 * @Modified By:
 */

public class QuadraticEquation {
    private  int a;
    private  int b;
    private  int c;

    QuadraticEquation(){}
    public QuadraticEquation(int a, int b, int c){
        this.a = a;
        this.b=b;
        this.c=c;
    }

    public double getDiscriminant(){
        return b*b-4*a*c;
    }

    public double getRoot1(){
        double r1 = (-b+Math.sqrt(getDiscriminant()))/(2*a);
        return r1;
    }

    public double getRoot2(){
        return (-b-Math.sqrt(Math.pow(b,2)-4*a*c))/(2*a);
    }
}

Test.java

package 第四题测试类;

import Four.QuadraticEquation;

import java.util.Scanner;

/**
 * @Author:大白
 * @Description:
 * @Date: Created in: 16:12 2018/5/10
 * @Modified By:
 */

public class Test {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int b = in.nextInt();
        int c = in.nextInt();
        QuadraticEquation quadraticEquation;
        quadraticEquation = new QuadraticEquation(a,b,c);
        if(quadraticEquation.getDiscriminant()>0){
            System.out.println("两个根的值为:"+quadraticEquation.getRoot1()+"和"+quadraticEquation.getRoot2());
        }
        else if (quadraticEquation.getDiscriminant() == 0){
            System.out.println("两根相等,值为:"+quadraticEquation.getRoot1());
        }
        else {
            System.out.println("The eqution has no roots");
        }
    }
}

【实验结果】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题目5

5、键盘输入一个浮点数后,程序判断该浮点数由多少位数字,并分别输出整数部分、小数部分以及整数部分共有多少位数字、小数部分共有多少位数字。
注意:若输入abc,对异常进行处理。

Float.java

package five;

import java.util.Scanner;

/**
 * @Author:大白
 * @Description:
 * @Date: Created in: 16:39 2018/5/10
 * @Modified By:
 */

public class Float {
    private static int[] number=new int[2];
    private static String[] array=new String[3];

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        try {
            if (s.contains(".")) {
                array = s.split("\\.");
                number[0] = Integer.parseInt(array[0]);
                number[1] = Integer.parseInt(array[1]);
                for (int i:number){
                    System.out.print("浮点数的整数和小数部分为:");
                    System.out.print(i+"  ");
                    System.out.println();
                    System.out.print("位数是:");
                    int j=0;
                    for (;i!=0;j++){
                        i/=10;
                    }
                    System.out.print(j+"   ");
                }
            }
        }

        catch (NumberFormatException e){
            System.out.println("发生异常:"+e.getMessage());
        }
        }
    }

【实验结果】
在这里插入图片描述

题目6

6、从命令行输入5个整数,放入一整型数组,然后打印输出。要求:如果输入数据不是整数,则捕获Integer.parseInt()产生的NumberFormatException异常,显示“请输入整数”;如果输入数组元素不足5个,则捕获数组越界异常ArrayIndexOutOfBoundsException,显示“请输入至少5个整数”。

Integer.java

package Six;

import java.util.Scanner;
/**
 * @Author:大白
 * @Description:
 * @Date: Created in: 18:11 2018/5/11
 * @Modified By:
 */


public class Integer {
    public static void main(String[] args) {
        int[] number = new int[5];
        Scanner in = new Scanner(System.in);
        try
        {
            String line = in.nextLine();
            String[] string = line.split("\\s+");
            for (int i = 0; i < 5; ++i)
            {
                number[i] = java.lang.Integer.parseInt(string[i]);
            }
            for (int i : number)
            {
                System.out.print(i+" ");
            }
        }
        catch (NumberFormatException e)
        {
            System.out.println("请输入数字");
        }
        catch (ArrayIndexOutOfBoundsException e)
        {
            System.out.println("请输入至少5个整数");
        }
    }
}

【实验结果】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题目7

7、自定义两个异常类NumberTooBigException和NumberTooSmallException,在其中定义各自的构造方法,分别打印输出“发生数字太大异常”和“发生数字太小异常”。
然后在主类中定义一个带throws的方法numberException(int x),当x>100时通过throw抛出NumberTooBigException异常,当x<0时通过throw抛出NumberTooSmallException异常;最后在main()方法中调用该方法,实现从键盘中输入一个整数,如果输入的是负数,引发NumberTooSmallException异常,如果输入的数大于100,引发NumberTooBigException异常,否则输出“没有发生异常”。

NumberTooBigException.java

package Seven;

/**
 * @Author:大白
 * @Description:
 * @Date: Created in: 21:51 2018/5/11
 * @Modified By:
 */

public class NumberTooBigException extends Exception{
    String bigMessage;
    public NumberTooBigException(){
        bigMessage = "发生数字太大异常";
    }
    public String getBigMessageMessage(){
        return bigMessage;
    }
}

NumberTooSmallException.java

package Seven;

/**
 * @Author:大白
 * @Description:
 * @Date: Created in: 21:52 2018/5/11
 * @Modified By:
 */

public class NumberTooSmallException extends Exception {
    String smallMessage;
    public NumberTooSmallException(){
        smallMessage = "发生数字太小异常";
    }
    public String getSmallMessage(){
        return smallMessage;
    }
}

Test.java

package Seven;

import javax.swing.plaf.synth.SynthScrollBarUI;
import java.util.Scanner;

/**
 * @Author:大白
 * @Description:
 * @Date: Created in: 22:00 2018/5/11
 * @Modified By:
 */

public class Test {
    public void input(int x) throws NumberTooBigException, NumberTooSmallException {
        if(x<0){
            throw new NumberTooSmallException();
        }
        else if(x>100){
            throw new NumberTooBigException();
        }
        System.out.println("没有发生异常");
    }
    public static void main(String[] args){
      Test test = new Test();
        Scanner in = new Scanner(System.in);
        int x = in.nextInt();
      try{
          test.input(x);
      } 
      catch (NumberTooSmallException e) {
          System.out.println(e.getSmallMessage());
          e.printStackTrace();
      }
      catch (NumberTooBigException e) {
          System.out.println(e.getBigMessageMessage());
          //System.out.println(e.bigMessage);
          e.printStackTrace();
      }
    }
}

【实验结果】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【实验小结】
本次实验共7题,通过这次实验学到了很多的知识,前四题比较常规,只要按照题目的要求去设计代码,新建类和属性就好了,后面三题是关于异常类Exception的处理,虽然题目比较简单,但写的过程中出现了一些之前书本上没遇到的问题和细节,比如第六题中原本想使用string.length来代替字符数组的长度5,但是Integet.parseInt函数在将string[i]转化成int型时,自动给int数组赋了0值,导致没有报“数组越界”的错;第七题在显示message的内容时,出现了String字符串自带message函数和我创建的getMesszge函数,而且用起来的效果有点不同。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值