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);
    }
  }
}
目录
相关文章
|
5天前
|
设计模式 安全 Java
Java编程中的单例模式:理解与实践
【10月更文挑战第31天】在Java的世界里,单例模式是一种优雅的解决方案,它确保一个类只有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的实现方式、使用场景及其优缺点,同时提供代码示例以加深理解。无论你是Java新手还是有经验的开发者,掌握单例模式都将是你技能库中的宝贵财富。
12 2
|
8天前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
49 5
|
2天前
|
安全 Java 编译器
JDK 10中的局部变量类型推断:Java编程的简化与革新
JDK 10引入的局部变量类型推断通过`var`关键字简化了代码编写,提高了可读性。编译器根据初始化表达式自动推断变量类型,减少了冗长的类型声明。虽然带来了诸多优点,但也有一些限制,如只能用于局部变量声明,并需立即初始化。这一特性使Java更接近动态类型语言,增强了灵活性和易用性。
80 53
|
2天前
|
存储 安全 Java
Java多线程编程的艺术:从基础到实践####
本文深入探讨了Java多线程编程的核心概念、应用场景及其实现方式,旨在帮助开发者理解并掌握多线程编程的基本技能。文章首先概述了多线程的重要性和常见挑战,随后详细介绍了Java中创建和管理线程的两种主要方式:继承Thread类与实现Runnable接口。通过实例代码,本文展示了如何正确启动、运行及同步线程,以及如何处理线程间的通信与协作问题。最后,文章总结了多线程编程的最佳实践,为读者在实际项目中应用多线程技术提供了宝贵的参考。 ####
|
2天前
|
Java UED
Java中的多线程编程基础与实践
【10月更文挑战第35天】在Java的世界中,多线程是提升应用性能和响应性的利器。本文将深入浅出地介绍如何在Java中创建和管理线程,以及如何利用同步机制确保数据一致性。我们将从简单的“Hello, World!”线程示例出发,逐步探索线程池的高效使用,并讨论常见的多线程问题。无论你是Java新手还是希望深化理解,这篇文章都将为你打开多线程的大门。
|
2天前
|
安全 Java 编译器
Java多线程编程的陷阱与最佳实践####
【10月更文挑战第29天】 本文深入探讨了Java多线程编程中的常见陷阱,如竞态条件、死锁、内存一致性错误等,并通过实例分析揭示了这些陷阱的成因。同时,文章也分享了一系列最佳实践,包括使用volatile关键字、原子类、线程安全集合以及并发框架(如java.util.concurrent包下的工具类),帮助开发者有效避免多线程编程中的问题,提升应用的稳定性和性能。 ####
19 1
|
6天前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
|
7天前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
32 4
|
7天前
|
消息中间件 供应链 Java
掌握Java多线程编程的艺术
【10月更文挑战第29天】 在当今软件开发领域,多线程编程已成为提升应用性能和响应速度的关键手段之一。本文旨在深入探讨Java多线程编程的核心技术、常见问题以及最佳实践,通过实际案例分析,帮助读者理解并掌握如何在Java应用中高效地使用多线程。不同于常规的技术总结,本文将结合作者多年的实践经验,以故事化的方式讲述多线程编程的魅力与挑战,旨在为读者提供一种全新的学习视角。
31 3
|
5天前
|
设计模式 安全 Java
Java编程中的单例模式深入解析
【10月更文挑战第31天】在编程世界中,设计模式就像是建筑中的蓝图,它们定义了解决常见问题的最佳实践。本文将通过浅显易懂的语言带你深入了解Java中广泛应用的单例模式,并展示如何实现它。
下一篇
无影云桌面