Java面向对象程序设计综合练习4(编程题)

简介: Java面向对象程序设计综合练习4(编程题)

使用异常处理输入机制,让程序变得更健壮。


main方法:


  1. 输入n,创建大小为n的int数组。
  2. 输入n个整数,放入数组。输入时,有可能输入的是非整型字符串,这时候需要输出异常信息,然后重新输入。
  3. 使用Arrays.toString输出数组中的内容。


输入样例:


1. 5
2. 1
3. 2
4. a
5. b
6. 4
7. 5
8. 3


输出样例:


1. java.lang.NumberFormatException: For input string: "a"
2. java.lang.NumberFormatException: For input string: "b"
3. [1, 2, 4, 5, 3]


import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int n = cin.nextInt();
        int cnt = 0;
        int[] a = new int[n];
        while (cnt < n) {
            try {
                String x = cin.next();
                int t = Integer.parseInt(x);
                a[cnt++] = t;
            }catch(Exception e) {
                System.out.println(e);
            }
        }
        System.out.println(Arrays.toString(a));
    }
}


R7-2 天不假年


程序填空题。根据题目要求完善下面的代码。请提交完整代码。


今年50,明年18”是一个美好的愿望。人的年龄只能不断增长。


Person类的setAge方法用于更新年龄。


如果新的年龄比原来的年龄小,则输出B表示发现异常,否则输出A表示正常。


import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int age;
        age = in.nextInt();
        Person p = new Person(age);        
        age = in.nextInt();
        try{
            p.setAge(age); 
        }catch(AgeException e){             
        }       
    }
}
class Person{
   int age;
   public Person(int age){
       this.age = age;
   }
   public void setAge(int age) throws AgeException {
       if(this.age <=age){
          this.age = age;
       }else{
         throw new AgeException();
       }
   }   
}
class AgeException extends Exception{
}


输入格式:


输入在一行中给出2个绝对值不超过100的正整数A和B。


输出格式:


在一行中输出一个字符A或者B。


输入样例:


50 18


输出样例:


B


import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int age;
        age = in.nextInt();
        Person p = new Person(age);        
        age = in.nextInt();
        try{
            p.setAge(age); 
            System.out.println("A");
        }catch(AgeException e){
            System.out.println("B");
        }       
    }
}
class Person{
   int age;
   public Person(int age){
       this.age = age;
   }
   public void setAge(int age) throws AgeException {
       if(this.age <=age){
          this.age = age;
       }else{
         throw new AgeException();
       }
   }   
}
class AgeException extends Exception{
}


R7-3 成绩录入时的及格与不及格人数统计


编写一个程序进行一个班某门课程成绩的录入,能够控制录入成绩总人数,对录入成绩统计其及格人数和不及格人数。设计一个异常类,当输入的成绩小0分或大于100分时,抛出该异常类对象,程序将捕捉这个异常对象,并调用执行该异常类对象的toString()方法,该方法获取当前无效分数值,并返回一个此分数无效的字符串。


输入格式:


从键盘中输入学生人数n

从键盘中输入第1个学生的成绩

从键盘中输入第2个学生的成绩


...

从键盘中输入第n个学生的成绩


(注:当输入的成绩无效时(即分数为小于0或大于100)可重新输入,且输出端会输出此分数无效的提醒。)


输出格式:


显示及格总人数

显示不及格总人数


输入样例:


在这里给出一组输入。例如:


1. 3
2. 100
3. 30
4. 60


输出样例:


在这里给出相应的输出。例如:


1. 2
2. 1


输入样例:


在这里给出一组输入。例如:


1. 2
2. 200
3. 69
4. 30


输出样例:


在这里给出相应的输出。例如:


1. 200invalid!
2. 1
3. 1


import java.util.*;
public class Main{
  public static void main(String[] args) {
    Scanner in=new Scanner(System.in);
    int n=in.nextInt();
    int sum1=0,sum2=0;
    int []s=new int[n];
    for(int i=0;i<n;i++) {
      int m=in.nextInt();
      if(m>100||m<0) {
        System.out.println(m+"invalid!");
        i--;
                continue;
      }
      else
        s[i]=m;
      if(m<60) sum1+=1;
      else sum2+=1;
    }
    System.out.println(sum2);
    System.out.println(sum1);
  }
}


R7-4 测试抛出异常


尝试构造类ArrayUtil,该类的方法int findMax(int[] arr, int begin, int end)能抛出IllegalArgumentException(表示参数错误)的方法。

正常执行要求begin<=end


如果begin>=end,抛出异常(IllegalArgumentException),异常信息为 “begin:x >= end:x”


如果begin<0,抛出异常(IllegalArgumentException),异常信息为 “begin:x < 0”


如果end>arr.length,抛出异常(IllegalArgumentException),异常信息为 “end:x > arr.length”


要求在findMax方法声明处声明此异常,在main函数里要捕获此异常,并输出异常类型(可用obj.getClass().getName())和异常信息


输入格式:


输入n,表示int数组大小

输入n个整数,放入数组。

输入m,表示begin和end的对数

输入m对整数,代表begin与end,然后调用ArrayUtils.findMax方法。


输出格式:


异常信息

数组的最大值


输入样例:


在这里给出一组输入。例如:


5
1 2 3 4 5
6
0 5
3 3
3 4
3 2
-1 3
0 6


输出样例:


在这里给出相应的输出。例如:


5
java.lang.IllegalArgumentException: begin:3 >= end:3
4
java.lang.IllegalArgumentException: begin:3 >= end:2
java.lang.IllegalArgumentException: begin:-1 < 0
java.lang.IllegalArgumentException: end:6 > arr.length


import java.util.*;
public class Main {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner in=new Scanner(System.in);
    int n=in.nextInt();
    int[] a=new int[n];
    for(int i=0;i<n;i++){
      a[i]=in.nextInt();
    }
    int m=in.nextInt();
    ArrayUtil aaa=new ArrayUtil();
    for(int i=0;i<m;i++){
      int low=in.nextInt();
      int high=in.nextInt();
      aaa.findMax(a,low,high);
    }
  }
}
class ArrayUtil{
  public ArrayUtil() {//构造函数
  }
  public void findMax(int[] arr, int begin, int end) {
    if(begin>=end) {
      System.out.println("java.lang.IllegalArgumentException: begin:"+begin+" >= end:"+end);
    }else if(begin<0) {
      System.out.println("java.lang.IllegalArgumentException: begin:"+begin+" < 0");
    }else if(end>arr.length) {
      System.out.println("java.lang.IllegalArgumentException: end:"+end+" > arr.length");
    }else{
      int max=-9999;
      for(int i=begin;i<end;i++) {
        if(arr[i]>max) {
          max=arr[i];
        }
      }
      System.out.println(max);
    }
  }
}
目录
相关文章
|
17天前
|
Java 程序员
Java编程中的异常处理:从基础到高级
在Java的世界中,异常处理是代码健壮性的守护神。本文将带你从异常的基本概念出发,逐步深入到高级用法,探索如何优雅地处理程序中的错误和异常情况。通过实际案例,我们将一起学习如何编写更可靠、更易于维护的Java代码。准备好了吗?让我们一起踏上这段旅程,解锁Java异常处理的秘密!
|
1天前
|
算法 Java 调度
java并发编程中Monitor里的waitSet和EntryList都是做什么的
在Java并发编程中,Monitor内部包含两个重要队列:等待集(Wait Set)和入口列表(Entry List)。Wait Set用于线程的条件等待和协作,线程调用`wait()`后进入此集合,通过`notify()`或`notifyAll()`唤醒。Entry List则管理锁的竞争,未能获取锁的线程在此排队,等待锁释放后重新竞争。理解两者区别有助于设计高效的多线程程序。 - **Wait Set**:线程调用`wait()`后进入,等待条件满足被唤醒,需重新竞争锁。 - **Entry List**:多个线程竞争锁时,未获锁的线程在此排队,等待锁释放后获取锁继续执行。
24 12
|
21天前
|
设计模式 Java 开发者
Java多线程编程的陷阱与解决方案####
本文深入探讨了Java多线程编程中常见的问题及其解决策略。通过分析竞态条件、死锁、活锁等典型场景,并结合代码示例和实用技巧,帮助开发者有效避免这些陷阱,提升并发程序的稳定性和性能。 ####
|
21天前
|
缓存 Java 开发者
Java多线程编程的陷阱与最佳实践####
本文深入探讨了Java多线程编程中常见的陷阱,如竞态条件、死锁和内存一致性错误,并提供了实用的避免策略。通过分析典型错误案例,本文旨在帮助开发者更好地理解和掌握多线程环境下的编程技巧,从而提升并发程序的稳定性和性能。 ####
|
14天前
|
安全 算法 Java
Java多线程编程中的陷阱与最佳实践####
本文探讨了Java多线程编程中常见的陷阱,并介绍了如何通过最佳实践来避免这些问题。我们将从基础概念入手,逐步深入到具体的代码示例,帮助开发者更好地理解和应用多线程技术。无论是初学者还是有经验的开发者,都能从中获得有价值的见解和建议。 ####
|
14天前
|
Java 调度
Java中的多线程编程与并发控制
本文深入探讨了Java编程语言中多线程编程的基础知识和并发控制机制。文章首先介绍了多线程的基本概念,包括线程的定义、生命周期以及在Java中创建和管理线程的方法。接着,详细讲解了Java提供的同步机制,如synchronized关键字、wait()和notify()方法等,以及如何通过这些机制实现线程间的协调与通信。最后,本文还讨论了一些常见的并发问题,例如死锁、竞态条件等,并提供了相应的解决策略。
39 3
|
16天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
19 1
|
20天前
|
开发框架 安全 Java
Java 反射机制:动态编程的强大利器
Java反射机制允许程序在运行时检查类、接口、字段和方法的信息,并能操作对象。它提供了一种动态编程的方式,使得代码更加灵活,能够适应未知的或变化的需求,是开发框架和库的重要工具。
35 2
|
20天前
|
安全 Java 开发者
Java中的多线程编程:从基础到实践
本文深入探讨了Java多线程编程的核心概念和实践技巧,旨在帮助读者理解多线程的工作原理,掌握线程的创建、管理和同步机制。通过具体示例和最佳实践,本文展示了如何在Java应用中有效地利用多线程技术,提高程序性能和响应速度。
54 1
|
22天前
|
Java API 数据库
Java 反射机制:动态编程的 “魔法钥匙”
Java反射机制是允许程序在运行时访问类、方法和字段信息的强大工具,被誉为动态编程的“魔法钥匙”。通过反射,开发者可以创建更加灵活、可扩展的应用程序。
37 0
下一篇
DataWorks