题目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函数,而且用起来的效果有点不同。