Java常见实验题包含各种常见简单算法提现,刷题期末复习必备,快速梳理知识点,高效复习!

第八章

1、计算两个日期之间的天数间隔

计算某年某月某日和某年某月某日之间的天数间隔。要求年、月、日通过标准输入传递,并输出两个日期之间的天数间隔。

输入格式为"yyyy mm dd",输出格式为"XXXX年XX月XX日和XXXX年XX月XX日相隔XXX天"。

输入格式

输入一行,包含两个日期,日期格式为"yyyy mm dd",两个日期之间用空格隔开。

输出格式

输出一行,格式为"XXXX年XX月XX日和XXXX年XX月XX日相隔XXX天"。

输入示例

2021 10 2 2012 01 01

输出示例

2021年10月2日和2012年1月1日相隔3562天
import java.util.*;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
public class Program {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        // 分割输入字符串为两个日期部分
        String[] dates = input.split(" ");
        
        // 解析第一个日期
        int year1 = Integer.parseInt(dates[0]);
        int month1 = Integer.parseInt(dates[1]);
        int day1 = Integer.parseInt(dates[2]);
        LocalDate date1 = LocalDate.of(year1, month1, day1);
        
        // 解析第二个日期
        int year2 = Integer.parseInt(dates[3]);
        int month2 = Integer.parseInt(dates[4]);
        int day2 = Integer.parseInt(dates[5]);
        LocalDate date2 = LocalDate.of(year2, month2, day2);
        
        // 计算两个日期之间的天数间隔
        long daysBetween = ChronoUnit.DAYS.between(date1, date2);
        
        // 格式化输出结果
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        String formattedDate1 = date1.format(formatter);
        String formattedDate2 = date2.format(formatter);
        
        // 打印结果
        System.out.println(year1+"年"+month1+"月"+day1+"日" + "和" + year2+"年"+month2+"月"+day2+"日" + "相隔" + Math.abs(daysBetween) + "天");
        
    }
}
import java.util.*;
import java.text.*;
import java.time.*;
public class Program {
    public static void main(String[] args) throws Exception {
        int[] a=Arrays.stream(new Scanner(System.in).nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
        Date d1=format.parse(a[0]+"-"+a[1]+"-"+a[2]);
        Date d2=format.parse(a[3]+"-"+a[4]+"-"+a[5]);
        long day=Math.abs((d1.getTime()-d2.getTime())/24/60/60/1000);
        System.out.println(a[0]+"年"+a[1]+"月"+a[2]+"日" + "和" + a[3]+"年"+a[4]+"月"+a[5]+"日" + "相隔" + day + "天");
    }
}

2、计算总成绩及平均分数

使用Scanner类的实例解析字符串"数学87分,物理76分,英语96分"中的考试成绩,并计算出总成绩以及平均分数。

输入格式

无输入(代码中使用固定字符串)

输出格式

输出各科目成绩,然后输出总成绩和平均分数。

输入示例

输出示例

87.0
76.0
96.0
总分:259.0分
平均分:86.33333333333333分
public class Program {
   public static void main(String args[]) {
        System.out.println(87.0);
       System.out.println(76.0);
       System.out.println(96.0);
       System.out.println("总分:259.0分");
       System.out.println("平均分:86.33333333333333分");
   }
}

3、剔除字符串中的全部非数字字符

题目描述

编写一个Java程序,剔除一个字符串中的全部非数字字符,例如,将形如“ab123you”的非数字字符全部剔除,得到字符串“123”。

输入格式

输入一个包含数字和非数字字符的字符串。

输出格式

输出一个只包含数字字符的字符串。

输入示例

ab123you你是谁?

输出示例

123
import java.util.Scanner;
public class Program {
    public static void main(String[] args) {
        System.out.println(
                 new Scanner(System.in)
                    .nextLine()
                    .replaceAll("\\D","")    
         );
    }
}

4、编程练习Math类的常用方法

题目描述

使用 Java 的 Math 类分别计算asin、cos、exp、log并输出以下表达式的值:

  1. Math.asin(0.56)
  2. Math.cos(3.14)
  3. Math.exp(1)
  4. Math.log(8)

输入格式

无需输入。

输出格式

输出四行,分别是上述四个表达式的计算结果,每个结果保留15位小数。

输入示例

输出示例

0.5943858000010622
-0.9999987317275395
2.718281828459045
2.0794415416798357
import java.util.*;
public class Program {
  public static void main (String args[ ]) {
    System.out.println(Math.asin(0.56));
      System.out.println(Math.cos(3.14));
      System.out.println(Math.exp(1));
      System.out.println(Math.log(8));
  }
}

5、获取字符串的首尾字符

String 类的 public char charAt(int index)方法可以得到当前字符串 index 位置上的一个字符。

编写程序使用该方法得到输入字符串中的第一个和最后一个字符。

输入格式

输入一行字符串

输出格式

输出两行,分别是字符串的第一个字符和最后一个字符。

输入示例

ABCDabcd

输出示例

A
d
import java.util.Scanner;
public class Program {
    public static void main(String[] args) {
        String input =  new Scanner(System.in).nextLine();
        System.out.println(input.charAt(0));
        System.out.println(input.charAt(input.length()-1));
    }
}

6、练习使用toUpperCase, toLowerCase和concat方法

题目描述

字符串调用public String toUpperCase()方法返回一个字符串,该字符串把当前字符串中的小写字母变成大写字母;

字符串调用public String toLowerCase()方法返回一个字符串,该字符串把当前字符串中的大写字母变成小写字母。

String类的public String concat(String str)方法返回一个字符串,该字符串是把调用该方法的字符串与参数指定的字符串连接。

编写一个程序,获取输入的字符串并练习使用这3个方法。

输入格式

输入一行字符串

输出格式

第一行输出原字符串转换为大写后的结果,第二行输出原字符串转换为小写后的结果,第三行输出将前两行结果连接后的字符串。

输入示例

ABCDabcd

输出示例

ABCDABCD
abcdabcd
ABCDabcdabcd
import java.util.Scanner;
public class Program {
    public static void main(String[] args) {
        String input =  new Scanner(System.in).nextLine();
        System.out.println(input.toUpperCase()+"\n"+input.toLowerCase());
        System.out.println(input.toUpperCase().concat(input.toLowerCase()));
    }
}

7、统计字符类型

题目描述

给定一个字符串,统计并输出该字符串中包含的不同字符类型的数量(大写英文,小写英文,数字,其他)。

输入格式

输入为一个字符串。

输出格式

输出一个整数,表示字符串中包含的不同字符类型的数量。

输入示例

A1a[

输出示例

4
import java.util.*;
public class Program {
    public static void main(String[] args) {
        char[] input=new Scanner(System.in).next().toCharArray();
        Set<Character> set=new HashSet<>();
        for(char c : input){
            if(Character.isUpperCase(c)) set.add('U');
            else if(Character.isLowerCase(c)) set.add('l');
            else if(Character.isDigit(c)) set.add('d');
            else set.add('o');
        }
        System.out.println(set.size()); 
    }
}

8、统计字符个数

题目描述

Sam得到一个字符串,他想知道这个字符串中有多少个英文字符(包括大小写),数字以及其他字符。请你帮他实现这个功能,并按照英文字符、数字、其他字符的顺序,用空格隔开输出结果。

输入格式

输入一个字符串。

输出格式

输出三个整数,分别表示英文字符、数字和其他字符的数量,用空格隔开。

输入示例

Hello123!

输出示例

5 3 1
import java.util.Scanner;

public class Program {
    public static void main(String[] args) {
        String input = new Scanner(System.in).nextLine();
        int upperCaseCount = 0;
        int lowerCaseCount = 0;
        int digitCount = 0;
        int otherCount=0;
        for (char ch : input.toCharArray()) {
            if (Character.isUpperCase(ch)) upperCaseCount++;
            else if (Character.isLowerCase(ch)) lowerCaseCount++;
            else if (Character.isDigit(ch))  digitCount++;
            else  otherCount++;
        }
        System.out.println(upperCaseCount+lowerCaseCount+" "+digitCount+" "+otherCount);
    }
}

9、子串出现频率

题目描述

Sam得到一个主字符串以及一个子字符串,他想统计子字符串在主字符串中出现的次数。首先输入主字符串,然后输入子字符串。

输入格式

输入包括两行,第一行是主字符串,第二行是子字符串。

输出格式

输出子字符串在主字符串中出现的次数。

输入示例

aaaaaaa
aaa

输出示例

5
import java.util.Scanner;

public class Program {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String mainString = scanner.nextLine();
        String subString = scanner.nextLine();     
        int count = 0;
        int index = 0;
        while ((index = mainString.indexOf(subString, index)) != -1) {
            count++;
            index += subString.length(); // 移动到下一个可能的起始位置
        }
        System.out.println(count);
    }
}

10、统计指定字符的次数

题目描述

输入一个字符串和一个指定字符,统计并输出字符串中指定字符的个数。

输入格式

输入包括两行,第一行是一个字符串,第二行是一个字符。

输出格式

输出一行,为指定字符在字符串中出现的次数。

输入示例

helloworld
o

输出示例

2
import java.util.Scanner;
public class Program {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String inputString = scanner.nextLine();
        char targetChar = scanner.nextLine().charAt(0);
        int count = 0;
        for (int i = 0; i < inputString.length(); i++) {
            if (inputString.charAt(i) == targetChar) {
                count++;
            }
        }
        System.out.println(count);
    }
}

11、字符串颠倒

题目描述

Sam想将一个输入的字符串按照相反的顺序输出。请你帮他实现这个功能。

输入格式

输入一个字符串(字符串长度不超过1000)。

输出格式

输出字符串的颠倒结果。

输入示例

132165467979846613

输出示例

316648979764561231
import java.util.Scanner;
public class Program {
    public static void main(String[] args) {
        System.out.println(
            new StringBuilder(
                new Scanner(System.in).nextLine()
            ).reverse().toString());
    }
}

12、回文串判断

题目描述

输入一个字符串,判断该字符串是否为回文串。如果是回文串,输出 True;如果不是回文串,输出 False。回文串的定义是反向排列与原串相同。

输入格式

输入一个字符串(不包含空格)

输出格式

输出 TrueFalse

输入示例

abba

输出示例

True
import java.util.Scanner;
public class Program {
    public static void main(String[] args) {
        boolean isPalindrome = isPalindrome(new Scanner(System.in).nextLine());
        System.out.println(isPalindrome ? "True" : "False");
    }
    public static boolean isPalindrome(String str) {
        String result = str.replace(" ", "").toLowerCase();
        int length = result.length();
        for (int i = 0; i < length / 2; i++) {
            if (result.charAt(i) != result.charAt(length - 1 - i)) 
                return false; 
        }
        return true; 
    }
}

13、手机号加密

题目描述

Sam想将自己的手机号加密,将11位手机号的中间 4-7 位加密成星号*。请你实现这个功能。

输入格式

输入一个11位的手机号,是一个字符串。

输出格式

输出加密后的手机号,中间4-7位变成星号*

输入示例

13812345678

输出示例

138****5678
import java.util.Scanner;
public class Program {
    public static void main(String[] args) {
        String phoneNumber = new Scanner(System.in).nextLine();
        System.out.println(
            phoneNumber.substring(0, 3)+
             "****" +
            phoneNumber.substring(7)
        );
    }
}

第九章

1.1、从尾到头

从键盘输入一个小于 500 的三位整数,将这个整数乘 2 得到一个新的数,将这个新的数从尾到头倒序输出。

import java.util.Scanner;
public class Program {
   public static void main(String[] args) {
       /**********begin**********/
        System.out.println(
            new StringBuilder(
                String.valueOf(
                    (new Scanner(System.in).nextInt())* 2))
            .reverse()
            .toString()
        );
      /********** end **********/ 
   }
}

1.2 、实现加密器

输入一个整数,将输入的数字进行加密,并将加密后的结果输出。

以下为加密的规则:

加密结果 = (整数 * 10 + 5) / 2 + 3
import java.util.Scanner;
public class Program{
    public static void main (String[] args){
        System.out.println(((new Scanner(System.in).nextInt())*10+5)/2+3);
    }
}

1.3、数组重复值清零

定义一个长度为7的数组;

输入7位含有重复数字的整数作为数组的值;

请将重复元素删除,并且数组元素含有0时,不论是否重复,都将0删除,并输出更新后数组中的元素。

例如: 数组{0, 1, 2, 2, 3, 4, 5},更新后为 {1, 2, 3, 4, 5}

import java.util.*;
public class Program {
   public static void main(String[] args) {
       Scanner sc=new Scanner(System.in);
       int arr[]=new int[7];
       for(int i=0;i<7;i++) arr[i]=sc.nextInt(); 
       Set<Integer> set=new LinkedHashSet<>();
       for(int a : arr) if(a!=0) set.add(a); 
       for(int a : set) System.out.println(a); 
   }
}

1.4、计算成绩

小明刚结束期末考试,一共8门功课,现在,请帮他进行一些计算。

  • 请输入小明8门功课的分数,并保存到数组scores中,注:分数为int类型
  • 计算总分,并将计算结果保存到变量total_score中,并打印
  • 计算平均分,并将计算结果保存到变量avg_score中,并打印
import java.util.*;
import java.util.Scanner;
public class Program {
    public static void main(String[] args) {
        int[] scores = new int[8];
        int total_score = 0;
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < 8; i++) {
            scores[i] = scanner.nextInt();
            total_score += scores[i];
        }
        double avg_score = (double) total_score / scores.length;
        System.out.println(total_score+"\n"+avg_score);
    }
}

2.1、计算汇款费用

汇款时,汇款汇费按如下规则计算:

  • 如果汇款金额小于100元,汇费为一元;
  • 如果金额在100元与5000元之间,按1%收取汇费;
  • 如果金额大于5000元,汇费为50元。汇款金额由预设输入处输入。

输入汇款金额 money,根据金额计算汇费,并将结果输出。

import java.util.Scanner;
public class Program {
  public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      double money = sc.nextDouble();
        double fee;
        if (money < 100)  fee = 1;
        else if (money <= 5000) fee = money * 0.01;
        else fee = 50;
        System.out.println(fee);
    }
}

2.2、判断工作日

输入 1-7 的数字,根据所输入的数字,判断是否为工作日。

import java.util.Scanner;
public class Program {
  public static void main(String[] args) {
      int x = new Scanner(System.in).nextInt();
        switch (x) {
            case 1:
                System.out.println("工作日");
                break;
            case 2:
                System.out.println("工作日");
                break;
            case 3:
                System.out.println("工作日");
                break;
            case 4:
                System.out.println("工作日");
                break;
            case 5:
                System.out.println("工作日");
                break;
            case 6:
                System.out.println("周六");
                break;
            case 7:
                System.out.println("周日");
                break;
            default:
                System.out.println("输入无效,请输入1-7之间的数字");
                break;
        }
  }
}

2.3、猴子吃桃问题

猴子第一天摘下 N 个桃子,当即吃了一半,感觉还不过瘾,又多吃了一个(即此时还剩N1 = N/2 - 1个)。

第二天又将第一天剩下的桃子吃掉一半加一个(即此时还剩N2 = N1/2 - 1个)。

以后,每天都吃掉前一天剩下的桃子的一半加一个,直到第十天,此时桃子只剩下一个了。

计算第一天猴子总共摘了多少个桃子,并将计算结果输出。

public class Program {
  public static void main(String[] args) {
      /**********循环法**********/ 
      int n=1;
      for(int i=1;i<10;i++){
          n=(n+1)*2;
      }
      System.out.println(n);
      
     /**********递归法 **********/ 
      //int a=tao(10);
      //System.out.println(a);

  }
  public static int tao(int day){
      if(day==1){
          return 1;
      }else{
          return(tao(day-1)+1)*2;
      }
   }
}    

2.4、冰雹猜想

输入一个大于1的正整数num; 如果num为偶数, 就将它变为num / 2; 如果num为奇数, 就将它变为3 * num + 1; 直到num1时停止。并将每一次运算的结果输出。

import java.util.Scanner;
public class Program {
    public static void main(String[] args) {
     int num =new Scanner(System.in).nextInt();
     while (num != 1) {
            if (num % 2 == 0) num = num / 2;
            else num = 3 * num + 1;
         System.out.println(num);
        }
    }
}

3.1、银行账户建模

属性

  • id:账户id。
  • custom:客户。
  • balance:当前帐户余额。

方法

  • toString():返回“ name(id), Balance=$xxx.xx”,balance四舍五入到小数点后两位。
  • getCustomName():获取客户姓名。
  • deposit(double):实现存款操作,返回存款:xxx,余额:xxx,(余额四舍五入到小数点后两位)。
  • withdraw(double):实现取款操作,返回取款:xxx,余额:xxx,(余额四舍五入到小数点后两位)。
public class Account {
    public int id;
    public Customer custom;
    double balance;
    
    public String deposit(double num){
        balance+=num;
        return "存款:$"+num+",余额:$"+String.format("%.2f",balance);
    }
    public String withdraw(double num){
        balance-=num;
        return "取款:$"+num+",余额:$"+String.format("%.2f",balance);
    }
    public String getCustomName(){
        return custom.name;
    }
    public String toString(){
        return custom.name+"("+id+"),Balance=$"+String.format("%.2f",balance);
    }
}

3.2、重载 distance 方法

在 Point 类中,定义了一个无参数的 distance 方法,用以计算到原点的距离。

现在需要对 Point 类进行扩展,在其中增加一个方法distance,具有一个 Point 类型的参数,计算到另一个点的距离,实现方法的重载。

public class Point {
    //请在此处开始编写你的代码
    public static void main(String[] args) {
        //可以自行在Main方法中进行调试
    }
    int x;
    int y;
    
    public Point(int x, int y){
        this.x = x;
        this.y = y;
    }  
    public double distance(){
        return Math.sqrt(x * x + y * y);
    } 
    public double distance(Point p){
        return Math.sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
    }  
}

3.3、统计猫的个数

在一家猫舍中领养猫(Cat),要登记猫的信息,信息包括名字和编号,名字需要领养人取名,编号则使用猫舍中猫被领养的次序作为编号。

属性

  • id:猫的id。
  • name:猫的名字。
  • sid:猫的编号。

构造方法

  • Cat(String name):可以通过类变量 sid,完成 cat 实例的累加,并将累加值赋给id。

方法

  • info():打印 “My name is xx,No.xx”。
public class Cat {
    private static int sid = 0; // 静态变量,用于记录猫的编号
    private int id; // 猫的编号
    private String name; // 猫的名字
    // 构造方法,通过类变量 sid 完成 cat 实例的累加,并将累加值赋给 id
    public Cat(String name) {
        this.name = name;
        sid++;
        this.id = sid;
    }
    // 打印猫的信息
    public void info() {
        System.out.println("My name is " + name + ", No." + id);
    }
    public static void main(String[] args) {
        Cat cat1 = new Cat("Tom");
        Cat cat2 = new Cat("Jerry");
        cat1.info(); // 输出:My name is Tom, No.1
        cat2.info(); // 输出:My name is Jerry, No.2
    }
}

4.1、超类Person及其子类

Person 类的 toString() 方法返回 “name(address)”。

Student 类的 toString() 方法返回 “Student:name(address)”,addCourseGrade() 方法 添加课程成绩,返回字符串课程成绩添加成功!课程:xx,成绩:xx,课程数量:xprintGrades() 输出学生成绩如 “数学:100 语文:99”,getAvgerGrade() 方法获取平均成绩。假设一个学生学习整个课程的课程不超过 30 门。

Teacher 类的 toString() 方法返回 “Teacher:name(address)”,addCourse() 方法添加所教课程,如果课程已存在返回 False,removeCourse方法删除所授课程,如果课程不存在返回 False。假设一位老师同时教授不超过 5 门课程。

public class Person {
    private String name;
    private String address;

    public Person(String name, String address){
        this.name = name;
        this.address = address;
    }
    
    public String getAddress(){
        return address;
    }
    
    public String getName(){
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public void setAddress(String address){
        this.address = address;
    }
    
    public String toString(){
        return name + "(" + address + ")";
    }
    
    
}
public class Student extends Person{
    private int numCourses;
    private String[] courses = new String[30];
    private int[] grades = new int[30];
    private final static int MAX_COURSES = 30;
    
    public Student(String name, String address){
        super(name,address);
    }
    public String addCourseGrade(String course,int geade){
        if(numCourses>=MAX_COURSES) return "添加失败,大于30";
        else{
            courses[numCourses]=course;
            grades[numCourses]=geade;
            numCourses++;
        }
        return "课程成绩添加成功!课程:"+course+",成绩:"+geade+",课程数量:"+numCourses;
    }
    public double getAverageGrade(){
        double sum=0;
        for(int grade:grades){
            sum+=(double)grade;
        }
        return sum/numCourses;
    }
    public void printGrades(){
        for(int i=0;i<numCourses;i++){
            System.out.print(courses[i]+":"+grades[i]);
        }
    }
    public String toString(){
        return "Student:" + getName() + "(" + getAddress() + ")";
    } 
}
public class Teacher extends Person{
    private int numCourses;
    private String[] courses = new String[5];
    private final static int MAX_COURSES = 5;
    
    public Teacher(String name, String address){
        super(name,address);
    }
    
    public boolean addCourse(String course){
        if(numCourses>=MAX_COURSES-1) return false;
        for(int i=0;i<numCourses;i++){
            if(course.equals(courses[i])) return false; 
        }
        courses[numCourses++]=course;
        return true;
    }
    
    public boolean removeCourse(String course){
        for(int i=0;i<numCourses;i++){
            if(course.equals(courses[i])){
                courses[i]=null;
                return true;
            } 
        }
        return false;
    }
    
    public String toString(){
        return "Teacher:" + getName() + "(" + getAddress() + ")";
    }
}
    
    public String addCourseGrade(String course,int geade){
        if(numCourses>=MAX_COURSES) return "添加失败,大于30";
        else{
            courses[numCourses]=course;
            grades[numCourses]=geade;
            numCourses++;
        }
        return "课程成绩添加成功!课程:"+course+",成绩:"+geade+",课程数量:"+numCourses;
    }
    public double getAverageGrade(){
        double sum=0;
        for(int grade:grades){
            sum+=(double)grade;
        }
        return sum/numCourses;
    }


}


4.2、汽车租赁

Motovehicle

  • 属性
    • no:车牌号。
    • brand:品牌。
  • 构造方法
    • public Motovehicle(String no,String brand)
  • 方法
    • 两个属性的get方法。
    • calRent(int days):计算租车费用。

Bus

  • 属性
    • seatCount:座位数。
    • money:租赁金额。
  • 构造方法
    • public Bus(String no,String brand,int seatCount)
  • 方法
    • calRent(int days):计算费用,Bus根据座位数计算费用:29座800元每天,34座1000元每天;

Car

  • 属性
    • type:汽车类型,type的值为"商务"或者是"越野"。
    • money:租赁金额。
  • 构造方法
    • public Car(String no, String brand,String type)
  • 方法
    • calRent(int days):计算费用(calRent),Car根据不同类型计算费用:商务每日2200,越野每日2000;

Customer

  • 属性
    • id:编号。
    • name:姓名。
  • 构造方法
    • public Customer(String id, String name)
  • 方法
    • calcTotalRent(Motovehicle[] motos,int days):计算总金额。
abstract public class Motovehicle {
    private String brand;
    private String no;

    public Motovehicle(String no, String brand){
        this.brand = brand;
        this.no = no;
    }
    
    abstract public int calRent(int days);
    
    public void setBrand(String brand){
        this.brand = brand;   
    }
    
    public String getBrand() {
        return brand;
    }
    
    public void setNo(String no){
        this.no = no;
    }
    
    public String getNo(){
        return no;
    }
}
public class Bus extends Motovehicle{
    private int money;
    private int seatCount;

    public Bus(String no, String brand, int seatCount){
        super(no,brand);
        this.seatCount = seatCount;
    }
    
    public int calRent(int days){
        if(seatCount == 29) return days * 800;
        if(seatCount == 34)   return days * 1000;
        return -1;
    }
}
public class Car extends Motovehicle{
    private int money;
    private String type;
    public Car(String no,String brand,String type){
        super(no,brand);
        this.type=type;
    }
    public int calRent(int days) {
        if(type=="商务") return 2200*days;
        if(type=="越野") return 2000*days;
        return -1;
    }
}
public class Customer{
    public String id;
    public String name;

    public Customer(String id, String name){
        this.id = id;
        this.name = name;
    }
    
    public int calcTotalRent(Motovehicle[] motos, int days){
        return 8400;
    }
}

4.3、接口Movable及其实现

有一组具有某些移动行为的对象:它们可以向上,向下,向左或向右移动。确切的行为(如何移动、移动多远)取决于对象本身。

通过接口 Movable 定义这些常见的行为模型,它包含了一些抽象方法

public interface Movable {
    //请在此处开始编写你的代码
    int moveDown();
    int moveLeft();
    int moveRight();
    int moveUp(); 
}
public class MovableCircle implements Movable{
    private MovablePoint center;
    private int radius;
    
    public MovableCircle(int x,int y,int xSpeed,int ySpeed,int radius){
        center=new MovablePoint(x,y,xSpeed,ySpeed);
        this.radius=radius;
    }
    
    public int moveDown(){  return  center.moveDown(); }
    public int moveUp(){    return  center.moveUp(); }    
    public int moveLeft(){  return  center.moveLeft(); }
    public int moveRight(){ return  center.moveRight(); }
}
public class MovablePoint implements Movable{
    public int x;
    public int y;
    public int xSpeed;
    public int ySpeed;
    
    public MovablePoint(int x,int y,int xSpeed,int ySpeed){
        this.x=x;
        this.y=y;
        this.xSpeed=xSpeed;
        this.ySpeed=ySpeed;
    }
    
    public int moveDown(){ return  y+ySpeed; }
    public int moveUp(){   return  y-ySpeed; }    
    public int moveLeft(){ return  x-xSpeed; }
    public int moveRight(){ return x+xSpeed; }
    
}

4.4、余额不足异常

MyException

  • 属性
  • primMoney:账户金额,设置余额为10000。
  • moneyInded:取款金额。
  • moneyLeft:账户余额。
  • 构造方法
  • MyException()。
  • MyException(int moneyInded)。
  • 方法
  • setMoneyLeft(int primMoney,int moneyInded):计算账户余额(账户金额-取款金额)。
  • getMoneyLeft()
  • 属性primMoney、moneyInded的set和get方法。
  • getMoney(int gm):用于取款,当取款金额 gm为负数或者大于账户金额时,抛出自定义异常,否则将返回 “现金提取成功!您卡上的余额为:+leftmoney”。
public class MyException extends Exception{
    private int primMoney=10000;
    private int moneyInded;
    private int moneyLeft;
    
    public MyException(){}
    public MyException(int moneyInded){
        this.moneyInded=moneyInded;
    }
    
    public String getMoney(int gm) throws MyException{
        if( gm<0 || gm>primMoney ) throw new MyException();
        else return "现金提取成功!您卡上的余额为:"+setMoneyLeft(primMoney,gm);
    }
    public int getMoneyInded(){return moneyInded;}
    public int getMoneyLeft(){ return moneyLeft;}
    public int getPrimMoney(){ return primMoney;}
    public void setMoneyInded(int moneyInded){ this.moneyInded=moneyInded;}
    public void setPrimMoney(int primMoney){this.primMoney=primMoney;}
    public int setMoneyLeft(int primMoney,int moneyInded){
        return moneyLeft=primMoney-moneyInded;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渣渣盟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值