第八章
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并输出以下表达式的值:
- Math.asin(0.56)
- Math.cos(3.14)
- Math.exp(1)
- 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
。回文串的定义是反向排列与原串相同。输入格式
输入一个字符串(不包含空格)
输出格式
输出
True
或False
输入示例
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
; 直到num
为1
时停止。并将每一次运算的结果输出。
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,课程数量:x
,printGrades()
输出学生成绩如 “数学: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;
}
}