Java程序设计课程练习题(题目+答案)

本文详细介绍了Java编程课程中的多个练习题,涵盖数字序列计算、矩阵操作、学生类、分数类等多个主题,涉及输入验证、数据处理、类与接口的实现等核心概念。通过实例展示了如何编写满足特定条件的Java程序,包括计算、排序、比较和异常处理等功能。

Java程序设计课程练习题(题目+答案)

0401
1.Description
编写一个Java程序,输入一个整数n(1 <= n <= 1000),如果n是奇数, 输出 1+3+5+...+n的值。如果n是偶数,则输出2 + 4 + … + n.
Input
输入整数n
Output
n不满足1 <= n <= 1000,则输出error input
n为奇数,则输出1+3+…+n
n为偶数,则输出2+4…+n;
Sample Input
10
Sample Output
30

import java.util.Scanner;
public class Main {
   
   
	public static void main(String[] args) {
   
   
		// TODO Auto-generated method stub
		Scanner r = new Scanner(System.in);
		if(!r.hasNextInt())
		{
   
   
			System.out.println("error input");
			return;			
		}
		int n = r.nextInt();
		int sum = 0;
		if(n <1 || n >1000)
		{
   
   
			System.out.println("error input");
			return;
		}
		if(n%2 == 0)
			for (int i = 2; i <= n; i += 2)
				sum += i;
		else
			for (int i = 1; i<=n; i += 2)
				sum += i;
		System.out.println (sum);
	}
}

2.Description
编写一个Java程序,连续输入一个范围在10-100的整数,如果正确则提示继续输入, 否则退出循环,最后输出正确输入的整数的个数及它们的和。
Input
l连续输入一串数据 a1 a2 a3 … an, 数据间用空格隔开。
Output
输出: i, a1+ … + ai ,
备注: ai+1 为第一个不在10-100范围内的数
Smple Input
22 11 -2 36
Sample Output
2, 33

import java.util.Scanner;
public class Main {
   
   
	public static void main(String[] args) {
   
   
		// TODO Auto-generated method stub
		Scanner r = new Scanner(System.in);
		int n ;
		int count = 0;
		int sum = 0;
		while (true)
		{
   
   
			if(!r.hasNextInt())
				break;
			n = r.nextInt();
			if( n < 10 || n > 100)
				break;
			sum += n;
			count++;
		}
		System.out.println (count + ", " + sum);
	}
}

3.Description
编写一个Java程序,连续在键盘输入1到7的整数,根据输入显示今天是星期几,直到非法输入,则输出“error input”
Input
输入n个整数 a1 a2 … an
Output
依次输出a1,…,ai 对应的星期几英文单词,ai 是第一个不满足1-7之间的数据
Sample Input
5 3 2 1 4 0 2
Sample Output
Friday
Wednesday
Tuesday
Monday
Thursday
error input

import java.util.Scanner;
public class Main {
   
   
	public static void main(String[] args) {
   
   
		// TODO Auto-generated method stub
		Scanner r = new Scanner(System.in);
		int a,b,c;
		a=r.nextInt();
		b=r.nextInt();
		c=r.nextInt();
		int min=a,max=a;
		if(b<min)
			min = b;
		if(b>max)
			max = b;
		if(c<min)
			min = c;
		if(c>max)
			max = c;			
		System.out.println (min+" "+max);
	}   
}

4.Description
编写一个Java程序,在程序中从键盘输入三个整数,比较它们的大小,输出最大的数。
Input
输入a b c三个整数
Output
依次输出最小的数和最大的数,两个数用空格隔开
Sample Input
222 44 33
Sample Output
33 222

import java.util.Scanner;
public class Main {
   
   
	public static void main(String[] args) {
   
   
		// TODO Auto-generated method stub
		Scanner r = new Scanner(System.in);
		int n ;
		int count = 0;
		int sum = 0;
		while (true)
		{
   
   
			if(!r.hasNextInt())
			{
   
   
				System.out.print("error input");
				break;				
			}
			n = r.nextInt();
			if( n < 1 || n > 7)
			{
   
   
				System.out.print("error input");
				break;
			}
			switch (n) {
   
   
			    case 1: System.out.println ("Monday"); break;
			    case 2: System.out.println ("Tuesday"); break;
			    case 3: System.out.println ("Wednesday"); break;
			    case 4: System.out.println ("Thursday"); break;
			    case 5: System.out.println ("Friday"); break;
			    case 6: System.out.println ("Saturday"); break;
			    default : System.out.println ("Sunday"); 
			}
		}
	}
}

0403
1.Description
从键盘输入一个长度为n的数组,然后进行(从小到大)排序输出。
Input
第一个输入值为数组大小n,接下来输入n个数值。
Output
如果第一个输入不是大于0的整数,或者接下来的输入的不是数值,则输出 “error input”
输入校验成功后,不换行输出排序后的数组。
Sample Input
5 87 -6 877 -998 66
Sample Output
-998 -6 66 87 877

import java.util.*;
public class Main {
   
   
 
    public static void main(String[] args)
    {
   
   
        int n;
        Scanner sc=new Scanner(System.in);
        if(!sc.hasNextInt())
        {
   
   
            System.out.println ("error input");
            return ;
        }
        n=sc.nextInt();
        if(n<=0)
        {
   
   
            System.out.println ("error input");
            return ;
        }
        int[] x=new int[n];
        for (int i=0; i<x.length; i++)
        {
   
   
            if(!sc.hasNextInt())
            {
   
   
                System.out.println ("error input");
                return ;
            }
            x[i]=sc.nextInt();
        }
        Arrays.sort(x);
        for(int e:x)
            System.out.print(e+" ");
    }
}

2.Description
使用Scanner输入一个四则运算的字符串表达式,解析表达式,并输出计算结果。
Input
每一行按以下格式输入:整数1 运算符 整数2
Output
每一个数值1,数值2不是整数,或者运算符不是±*/之一,输出error input,退出程序;
输入校验正确,则输出运算结果。
Sample Input
9 / 2
77 - 44
88/44
Sample Output
4
33
error input

import java.util.*;
public class Main {
   
   
 
    public static void main(String[] args)
    {
   
   
        int n;
        Scanner sc=new Scanner(System.in);
        if(!sc.hasNextInt())
        {
   
   
            System.out.println ("error input");
            return ;
        }
        n=sc.nextInt();
        if(n<=0)
        {
   
   
            System.out.println ("error input");
            return ;
        }
        int[] x=new int[n];
        for (int i=0; i<x.length; i++)
        {
   
   
            if(!sc.hasNextInt())
            {
   
   
                System.out.println ("error input");
                return ;
            }
            x[i]=sc.nextInt();
        }
        Arrays.sort(x);
        for(int e:x)
            System.out.print(e+" ");
    }
}

0408
1.Description
编写一个Java 程序,从键盘输入一个规则二维数组数组,输出数组中最大整数值和最小整数值。
Input
首先输入非负整数 m, n,分别代表代表数组的行数和列数,然后再按行优先的规则,依次输入mn个整数
Output
输入不合法(输入值m,n不为非负整数,或者接下来的m
n值包含非整数),则输出“error input”
输入合法,则不换行输出最大值与最小值
Sample Input
3 4
32 65 98 14
58 67 928 99
22 -3 44 6
Sample Output
928 -3

import java.util.*;
public class Main {
   
   
 
    public static void main(String[] args)
    {
   
   
        Scanner sc=new Scanner(System.in);
        if(!sc.hasNextInt())
        {
   
   
            System.out.println ("error input");
            return ;
        }
        int m=sc.nextInt();
        if(!sc.hasNextInt())
        {
   
   
            System.out.println ("error input");
            return ;
        }
        int n=sc.nextInt();
        if(m<=0||n<=0)
        {
   
   
            System.out.println ("error input");
            return ;
        }
        int[][] arr=new int[m][n];
        for (int i=0; i<arr.length; i++)
        {
   
   
            for (int j=0; j<arr[i].length; j++)
            {
   
   
                if(!sc.hasNextInt())
                {
   
   
                    System.out.println ("error input");
                    return ;
                }
                arr[i][j]=sc.nextInt();
            }
        }
        int max=0,min=0;
        for (int a=0; a<arr.length; a++)
        {
   
   
            for (int b=0; b<arr[a].length; b++)
            {
   
   
                if(arr[a][b]>max)
                    max=arr[a][b];
                if(arr[a][b]<min)
                    min=arr[a][b];
            }
        }
        System.out.println (max +" "+ min);
    }
}

2.Description
通过查询Java API文档的学习String类中的常用方法。从键盘输入两个(不包含空格回车等分隔符的)字符串str1和str2,通过调用String类中的实例方法,输出指定内容。
Input
依次输入不包含分隔符的 str1 和 str2
Output
依次输出以下内容(每一项输出一行)
0. str1与str2是否相等

  1. str1中包含str2的个数(视频上有讲解过);
  2. str2在str1中最后一次出现的位置(没有出现则输出-1);
  3. 将str1中的所有小写字符转化为对应的大写输出;
  4. 将str2中的所有大写写字符转化为对应的小写输出;
  5. str1中包含数符的个数;
  6. str2中包含英文字母字符的个数;
  7. 将str1中所有的“abc“修改为“cde”(如果有)输出;
    Sample Input
    abcde12de12de345ABCde12debcdeabc de12de
    Sample Output
    false
    2
    19
    ABCDE12DE12DE345ABCDE12DEBCDEABC
    de12de
    9
    4
    cdede12de12de345ABCde12debcdecde
import java.util.*;
public class Main {
   
   
 
    public static void main(String[] args)
    {
   
   
        Scanner sc=new Scanner(System.in);
        String str1=sc.next();
        String str2=sc.next();
        System.out.println(str1.equals(str2));
        int idx;
        idx=str1.indexOf(str2);
        int count=0;
        while(idx>=0)
        {
   
   
            idx=str1.indexOf(str2,idx+str2.length());
            count++;
        }
        System.out.println (count);
        if(count>0)
            System.out.println (str1.lastIndexOf(str2));
        else
            System.out.println ("-1");
        System.out.println(str1.toUpperCase());
        System.out.println(str2.toLowerCase());
        int number=0,ch=0,i;
        for(i=0;i<str1.length();i++)
        {
   
   
            if(str1.charAt(i)>=48&&str1.charAt(i)<=57)
                number++;
             
        }
        System.out.println(number);
        for(i=0;i<str2.length();i++)
        {
   
   
             if(str2.charAt(i)>=65&&str2.charAt(i)<=90||str2.charAt(i)>=97&&str2.charAt(i)<=122)
                ch++;
        }
        System.out.println (ch);
        String str3 = str1.replaceAll("abc","cde");
        System.out.print(str3);
    }
}

3.Description
输出指定行数的杨辉三角
Input
输入一个正整数n
Output
如果n不合法(n不是正整数),则输出“error input”
如n合法,则输出n行的杨辉三角(每行中的两个数之间只用一个空格隔开)。
Sample Input
7
Sample Output
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1

import java.util.*;
public class Main {
   
   
 
    public static void main(String[] args)
    {
   
   
        Scanner sc=new Scanner(System.in);
        if(!sc.hasNextInt())
        {
   
   
            System.out.println ("error input");
            return ;
        }
        int n=sc.nextInt();
        if(n<=0)
        {
   
   
            System.out.println ("error input");
            return ;
        }
        int i,j;
        int[][] iaYang=new int[n][];
        for (i=0; i<iaYang.length; i++)
            iaYang[i]=new int[i+1];
        iaYang[0][0]=1;
        for (i=1; i<iaYang.length; i++)
        {
   
   
            iaYang[i][0]=1;
            for (j=1; j<iaYang[i].length-1; j++)
                iaYang[i][j]=iaYang[i-1][j-1]+iaYang[i-1][j];
            iaYang[i][iaYang[i].length-1]=1;
        }
        for(int[] row:iaYang)
        {
   
   
            for(int col:row)
                System.out.print (col + " ");
            System.out.println ();
        }
    }
}

4.Description
输入两个矩阵M1和M2,求M1和M2的和与积
Input
第一行输入整数m,代表两个方阵的大小,
接下来依次输入2m行,每行包含m个整数。(第1-m行代表第一个方阵,第m+1 - 2m行代表第二个方阵)
Output
数据不合法,输出“input error”
数据合法,这分别输出两个方阵的和与积(和方阵 与 积方阵 间隔空一行输出)
Sample Input
2
1 2
3 4
4 3
2 1
Sample Output
5 5
5 5

8 5
20 13

import java.util.*;
public class Main {
   
   
 
    public static void main(String[] args)
    {
   
   
        Scanner sc=new Scanner(System.in);
        if(!sc.hasNextInt())
        {
   
   
            System.out.println ("input error");
            return ;
        }
        int m=sc.nextInt();
        int[][] arr1=new int[m][m];
        int[][] arr2=new int[m][m];
        int i,j;
        for (i=0; i<m; i++)
        {
   
   
            for(j=0;j<m;j++)
            {
   
   
                if(!sc.hasNextInt())
                {
   
   
                    System.out.println ("input error");
                    return ;
                }
                arr1[i][j]=sc.nextInt();
            }
        }
        for (i=0; i<m; i++)
        {
   
   
            for(j=0;j<m;j++)
            {
   
   
                if(!sc.hasNextInt())
                {
   
   
                    System.out.println ("input error");
                    return ;
                }
                arr2[i][j]=sc.nextInt();
            }
        }
        int[][] arr3=new int[m][m];
        for (i=0; i<m; i++)
        {
   
   
            for(j=0;j<m;j++)
                arr3[i][j]=arr1[i][j]+arr2[i][j];
        }
        int x=arr1.length;
        int y=arr2[0].length;
        int[][] arr4=new int[x][y];
        for (i=0; i<x
1.下列特点中,哪个是Java 虚拟机执行的特点之一? A、字节代码 B、多进程 C、静态连接 D、编译 2.Java语言的类型是 A、面向对象语言 B、面向过程语言 C、汇编程序 D、形式语言 3.下列哪个数代表单精度浮点数? A、0652 B、3.4457D C、0.298f D、0L 4.以下哪个表达式是不合法的 A、String x="Hello"; int y=9; x+=y; B、String x="Hello"; int y=9; if(x==y){} C、String x="Hello"; int y=9; x=x+y; D、String x=null; int y=(x!=null)&&(x.length()>0)? x.length():0; 5.main()方法的返回类型是: A、 int B、void C、boolean D、 static 6.下列对继承的说法,哪个是正确的? A、子类能继承父类的所有方法和状态 B、子类能继承父类的非私有方法和状态 C、子类只能继承父类public方法和状态 D、子类只能继承父类的方法,而不继承状态 7.下列关于构造方法的说法正确的是( )。 A、因为构造方法名与类名必须相同,构造方法在创建对象时被执行。 B、构造方法是给对象赋初,所以没有返回,必须用void来声明。 C、构造方法不能被程序调用,也不可以重载。 D、一个类只允许有一个构造方法。 8.若需要定义一个类域或类方法,应使用哪种修饰符? A、static B、package C、private D、public 9.如要抛出异常,应用下列哪种子句? A、catch B、throw C、try D、finally 10.对于catch 子句的排列,下列哪种是正确的? A、父类在先,子类在后 B、子类在先,父类在后 C、有继承关系的异常不能在同一个 try 程序段内 D、先有子类,其他如何排列都无关 11.计算机中的流是? A、流动的字节 B、流动的对象 C、流动的文件 D、流动的数据缓冲区 12.以下哪个是java.io包中的一个兼有输入输出功能的类。 A、Object B、Serializable C、RandomAccessFile D、java.io中不存在这样的类 13.下面关于线程优先级的说法中,错误的是: A、Java中的线程的优先级有三个静态常量 B、新建线程的优先级默认为最低 C、优先级高的线程优先被执行 D、一个线程运行时,有可能被比它高优先级的线程抢占运行 14.下列方法中建议使用的是: A、stop() B、supend() C、resume() D、wait() 15.如果希望所有的控件在界面上均匀排序,就使用下列哪种布局管理器? A、BosLayout B、GridLayout C、BorderLayout D、FlowLayout 16.在一个MVC用户界面中,存在三个通讯对象,其中_________是指定的逻辑表示法。 A、模型 B、视图 C、控件 D、结构 17.applet类的直接父类是: A、Component类 B、Container类 C、Frame类 D、Panel类 18.下面关于沙箱模型的叙述中错误的是
数组章节作业 1、将一个数组中的元素倒排过来,不能新开一个数组的临时存储空 间,只能在原数组上改。 2、写一个类用来模拟栈这种数据结构,要求底 使用数组存储数据, 并给出相应的进栈和出栈的方法。MyStack int arr[]; int count;//栈中元素个数 public MyStack(int n){ arr = new int[n]; } boolean push(int num){ if(count==arr.length){} arr[count++]=num; } int pop(){ if(count==0){ return -1;} return arr[--count]; } 3、实现在一个数组指定位置添加元素和删除元素的功能。 1、数组容量问题? 2、添加元素前后数组中元素的变化 3、删除元素前后数组中元素的变化 面向对象章节作业 1,写一个类,名为Animal,该类有两个私有属性, name(代表动物的名字),和legs(代表动物的腿的条 数)。并提供个两构造方法,一个无参,默认给name 赋为AAA,给legs赋为4;另一个需要两个参数, 分别用这两个参数给私有属性赋。该类还有两个重载的move()方法,其中一个无参,在屏幕上输出一行文字: XXX Moving!!(XXX为该动物的名字);另一个需要一个int参数n,在屏幕上输出n次 XXX Moving!! 2,写一个类Person,包含以下属性:String name; int age; boolean gender; Person partner。 为Person类写一个marry(Person p)方法,代表当前 对象和p结婚,如若可以结婚,则输出恭贺信息, 否则输出不能结婚原因。要求在另外一个类中写一 个主方法,来测试以上程序。(下列情况不能结婚: 结婚年龄,男<24,女<22;3,某一方已婚) 3,写一个类,名为Animal,该类有两个私有属性,name(代表动物的名字),和legs(代表动物的腿的条数);要求为两个私有属性提供public 的访问方法。并提个两构造方法,一个无参,默认给name赋为AAA,给legs赋为4;另一个需要两个参数,分别用这两个参数给私有属性赋。要求在第一个构造方法中调用第二个构造方法。该类还有两个重载的move()方法,其中一个无参,在屏幕上输出一行文字: XXX Moving!!(XXX为该动物的名字);另一个需要一个int参数n,在屏幕上输出n次 XXX Moving!! 4,写一个类Fish,继承自Animal类,并提供一个构造方法,该构造方法需要一个参数name,并给legs赋默认0;该类还要求覆盖Animal类中的无参move()方法,要求输出:XXX Swimming!! 5,写一个类Bird,继承自Animal类,并提供一个构造方法,该构造方法需要一个参数name,并给legs赋默认2;该类还要求覆盖Animal类中的无参move()方法,要求输出:XXX Flying!! 6,写一个类Zoo,要求分别生成若干个Animal,Fish和Bird。并调用他们的属性和方法。 7,写Shape类,要求如下: 1.int类型属性x和y,分别表示图形的中心点坐标 2.无参构造器 3.构造器,对x和y进行初始化 4.draw()方法,输出"Shape draw" 写Circle类,继承Shape类,要求如下 1.double类型属性r,表示圆的半径 2.无参构造器,将r初始化为1.0 3.构造器,对r进行初始化 4.构造器,对x、y、r进行初始化 5.draw()方法,输出"draw in circle"和x,y,r的 写Rectangle类,继承Shape类,要求如下 1.double类型属性height和width,表示矩形的高和宽 2.无参构造器,将height和width都初始化为1.0 3.构造器,对height和width进行初始化 4.构造器,对x、y、height、width进行初始化 5.draw()方法,输出"draw in rectangle"和x,y,height,width的 使用ShapeTest类测试以上代码。 8,某公司的雇员分为以下若干类: Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。 SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪 HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。属性:每小时的工资、每月工作的小时数 SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。属性:月销售额、提成率 BasedPlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。属性:底薪。 写一个程序,把若干各种类型的员工放在一个Employee数组里,写一个函数,打印出某月每个员工的工资数额。注意:要求把每个类都做成完全封装,不允许非私有化属性。 容器类章节作业 1、写MyStack类,实现栈功能。在类中使用ArrayList保存数据。 2、使用TreeSet和Comparator,写TreeSetTest1 要求:对TreeSet中的元素"HashSet"、"ArrayList"、"TreeMap"、"HashMap"、"TreeSet"、"LinkedList"进行升序和倒序排列 3、使用TreeSet和Comparator,写TreeSetTest2 要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列 4、使用TreeSet和Comparator,写TreeSetTestInner 要求: 对TreeSet中的元素"HashSet"、"ArrayList"、"TreeMap"、"HashMap"、"TreeSet"、"LinkedList"进行升序和倒序排列 1. 使用匿名内部类实现 2. 使用静态内部类实现
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值