【Java】Java学习笔记(6)Java内部类与异常类作业函数题

学校小学期Java课程的练习题,留个档便于以后需要时候有例子可以回忆,写的烂的地方请多多包含

1、计算输入4个数的和

  • 描述:定义一个int型数组,输入3个正数1个负数赋值给数组。利用断言性质,规定计算和的时候不允许出现负数,在关闭断言情况下,计算输入数的和。
  • 代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;
public class Example7_6 {
@SuppressWarnings("resource")
public static void main (String args[ ]) {
int [] score ={0,0,0,0};
System.out.println("请输入3个正数,1个负数");
Scanner scanner = new Scanner(System.in);
//TODO:将输入的数赋值给score[]数组
for (int i=0;i<score.length;i++){
score[i] = scanner.nextInt();
}
int sum=0;
for(int number:score) {
assert number>0:"负数不能是成绩";
//TODO:计算总成绩
sum=sum +number;
}
System.out.println("总成绩:"+sum);
}
}

2、处理数组越界异常

  • 描述:定义一个长度为8的课程数组,数组内容已初始化完毕。随机输入课程的序号,获取课程的名称,进行输出,如果不存在则捕捉数组越界的异常。
  • 代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Scanner;
/**
* TODO: 定义一个长度为8的课程数组,随机输入课程的序号,获取课程的名称,进行输出,如果不存在则捕捉数组越界的异常
* 如:输入:12,12已结超过8门课程的范围,捕获异常后打印: java.lang.ArrayIndexOutOfBoundsException: 12
* 输入:2,输出:英语
*/
public class Example7_149 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入课程的序号");
int index = sc.nextInt();
String[] courses = {"数学","语文","英语","计算机","物理","化学","生物","地理"};
try {
String course = courses[index];
System.out.println(course);
//TODO:输入课程的序号,超过数组最大长度,捕捉数组越界异常
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println(e);
}
}
}

3、自定义异常

  • 描述:自定义两个异常类,名称超长异常类和超短异常类。输入账号名称,如果大于10,抛出“账号名称超长”的自定义异常, 如果小于5,抛出“账号名称超短”的自定义异常。参考“账号名称超长异常(StringTooLongException)”,请编写一个账号名称超短的自定义异常(类名:StringTooShortException)
  • 代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.util.Scanner;
/**
* TODO: 输入账号名称,如果大于10,抛出“账号名称超长”的自定义异常, 如果小于5,抛出“账号名称超短”的自定义异常
* 参考“账号名称超长异常(StringTooLongException)”,请编写一个账号名称超短的自定义异常(类名:StringTooShortException)
* 例如:输入:红色宝马 输出: StringTooShortException: 账号名称超短,必须大于5个字符
* 例如:输入:红红黄黄蓝蓝 输出:账号名称校验通过
* 例如:输入:红红黄黄蓝蓝绿绿紫紫白白 输出:StringTooLongException: 账号名称超长,必须小于10个字符
*/
public class Example7_152 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入账号名称");
String str = sc.next();
try {
if (str.length() > 10) {
//抛出账号名称超长的自定义异常
throw new StringTooLongException();
}
if (str.length() < 5){
//抛出账号名称超短的自定义异常
throw new StringTooShortException();
}
System.out.println("账号名称校验通过");
} catch (Exception e) {
System.out.println(e);
}
}
}
/**
* 自定义异常,账号名称超长异常
*
*/
class StringTooLongException extends Exception{
public StringTooLongException(){
super("账号名称超长,必须小于10个字符");
}
}
/**
* TODO:参考“账号名称超长异常(StringTooLongException)”,请编写一个账号名称超短的自定义异常(类名:StringTooShortException)
* 异常提醒说明为“账号名称超短,必须大于5个字符”
*/
class StringTooShortException extends Exception{
public StringTooShortException(){
super("账号名称超短,必须大于5个字符");
}
}

4、自定义异常类,计算银行收入、支出情况

  • 描述:自定义一个异常类,继承Exception。定义一个银行类,包含有int型变量money,和计算收入的方法,以及获取金额的方法。银行收入为正数,支出为负数。根据收入、支出计算本次纯收入、最终存款,使用自定义异常类捕获收入、支出的异常情况并输出原因还有最终存款。
  • 代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.util.Scanner;
class Bank {
private int money;
public void income(int in,int out) throws BankException {
if(in<=0||out>=0||in+out<=0) {
//TODO: 方法抛出异常,导致方法结束,下面语句不能执行
throw new BankException(in, out);
}
int netIncome=in+out;
System.out.printf("本次计算出的纯收入是:%d元\n",netIncome);
money=money+netIncome;
}
public int getMoney() {
return money;
}
}
class BankException extends Exception {
String message;
public BankException(int m,int n) {
message="入账资金"+m+"是负数或支出"+n+"是正数,不符合系统要求.";
}
public String warnMess() {
return message;
}
}
public class Example7_5 {
public static void main(String args[]) {
Bank bank=new Bank();
try{
System.out.println("请输入银行收入、支出(收入正数 支出负数):");
Scanner scanner = new Scanner(System.in);
//TODO:调用bank.income方法,传入的参数为输入的两个数
bank.income(scanner.nextInt(), scanner.nextInt());
System.out.printf("银行目前有%d元\n",bank.getMoney());
System.out.println("请输入银行收入、支出(收入负数或支出正数):");
//TODO:调用bank.income方法,传入的参数为输入的两个数
bank.income(scanner.nextInt(), scanner.nextInt());
}
catch(BankException e) {
System.out.println("计算收益的过程出现如下问题:");
System.out.println(e.warnMess());
}
System.out.printf("银行目前有%d元\n",bank.getMoney());
}
}

5、输入三个数字,其中第二个数字为非法数字,系统捕获异常输出,然后自定义异常输出。

  • 描述:定义三个int型变量并初始化完毕,打印输出初始化的内容。然后输入三个数给他们赋值,利用try-catch捕获异常,测试异常语句下面的代码是否执行,然后自己手动抛出一个异常,打印输出结果。
  • 代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.Scanner;
public class Example7_4 {
public static void main(String args[]) {
int n = 0,m = 0,t = 1000;
try{
System.out.println("初始化n=0 m=0 t=1000");
System.out.println("请输入三个数给n,m,t赋值(其中输入m非法数字)");
/*
TODO:将输入的字符串转化成整数,发生异常,转向catch
发生异常的部分后面的代码没有执行
*/
Scanner scanner = new Scanner(System.in);
n = Integer.parseInt(scanner.next());
m = Integer.parseInt(scanner.next());
t = Integer.parseInt(scanner.next());
}
catch(NumberFormatException e) {
System.out.println("发生异常:"+e.getMessage());
}
System.out.println("n="+n+",m="+m+",t="+t);
try{
System.out.println("故意抛出I/O异常!");
throw new java.io.IOException("我是故意的");
//System.out.println("这个输出语句肯定没有机会执行,所以必须注释掉,否则编译出错");
}
catch(java.io.IOException e) {
System.out.println("发生异常:"+e.getMessage());
}
}
}

6、根据输入装载量,计算货车装载量是否超重

  • 描述:自定义异常类输出异常信息,货车类计算转载量,最大装载量为1000,根据输入数据求和判断是否大于1000,大于不好异常信息输出,不大于继续输入,输出当前装载量。
  • 代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.util.Scanner;
/* TODO: 完成自定义异常类,实现捕获异常 */
class DangerException extends Exception {
final String message = "超载";
public String warnMess() {
return message;
}
}
class CargoBoat {
int realContent; //装载的重量
int maxContent; //最大装载量
public void setMaxContent(int c) {
maxContent = c;
}
public void loading(int m) throws DangerException {
/* TODO: 判断是否大于最大装载量1000,大于最大装载量抛出异常 */
if(m+realContent>maxContent){
throw new DangerException();
}
realContent += m;
System.out.println("目前装载了"+realContent+"吨货物");
}
}
public class Example7_7 {
public static void main(String args[]) {
CargoBoat ship = new CargoBoat();
ship.setMaxContent(1000);
int m =0;
try{
Scanner scanner = new Scanner(System.in);
System.out.println("请输入装载量(最大量1000)");
/* TODO: 把输入的值赋值给m
调用方法loading */
m = scanner.nextInt();
ship.loading(m);
System.out.println("请输入装载量(最大量1000)");
/* TODO: 把输入的值赋值给m
调用方法loading */
m = scanner.nextInt();
ship.loading(m);
System.out.println("请输入装载量(最大量1000)");
/* TODO: 把输入的值赋值给m
调用方法loading */
m = scanner.nextInt();
ship.loading(m);
System.out.println("请输入装载量(最大量1000)");
/* TODO: 把输入的值赋值给m
调用方法loading */
m = scanner.nextInt();
ship.loading(m);
}
catch(DangerException e) {
System.out.println(e.warnMess());
System.out.println("无法再装载重量是"+m+"吨的集装箱");
}
finally {
System.out.printf("货船将正点启航");
}
}
}
-------- 本文结束 感谢阅读 --------