Javase基础课程练习题(附多种解法答案)

1. 反转一个只有3位数的整数。

从控制台输入321,输出123

1.1 分别求出每一位的值,然后倒序输出

正常思维解法,分别取出个位,十位,百位的值,然后输出

import java.util.Scanner;
public class Demo1 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入一个三位数的整数:");
		int inputNumber=scanner.nextInt();
		int geW=inputNumber%10;
		int shiW=inputNumber/10%10;
		int baiW=inputNumber/100;
		System.out.println(geW+""+shiW+""+baiW);
	}
}

1.2 使用charAt()方法

用到了字符串的charAt()方法,获取字符串中对应下标位置的单个字符。

import java.util.Scanner;
public class Demo1 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入一个三位数的整数:");
		int inputNumber=scanner.nextInt();
		String strNumber=inputNumber+"";
		System.out.println(strNumber.charAt(2)+""+strNumber.charAt(1)+""+strNumber.charAt(0)+"");
	}
}

1.3 将字符串转换为char类型的数组

扩展解法,最实用的解法,不管输入的数字有多少位,都可以正常反向输出

import java.util.Scanner;
public class Demo1 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入一个三位数的整数:");
		int inputNumber=scanner.nextInt();
		String strNumber=inputNumber+"";
		char temArray[]= strNumber.toCharArray();
		for(int i=0;i<temArray.length;i++){
			System.out.print(temArray[temArray.length-1-i]);
		}
	}
}

1.4 借助StringBuilder或者StringBuffer

小白进阶:多多练习StringBuilder和StringBuffer

import java.util.Scanner;
public class D {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入一个三位数的数:"); //其实可以输入任意内容进行反转
		String line=scanner.nextLine();
		StringBuilder stringBuilder=new StringBuilder(line);
		System.out.println(stringBuilder.reverse().toString());
	}
}

2. 将一个字符由小写字母转换为大写字母

2.1 直接调用字符串的toUpperCase()

从控制台输入 a ,输出A
直接调用字符串的toUpperCase()

import java.util.Scanner;
public class Demo2 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入一个字符:");
		String a=scanner.next();
		System.out.println(a.toUpperCase());
	}
}

2.2 借助Ascii码进行转换

在java中 char类型在表示字符时会和ASCII码产生对应关系
例如
System.out.println('a'); //a
System.out.println('a'-32); //65
System.out.println((char)('a'-32)); //A
例如:
在这里插入图片描述
在这里插入图片描述

import java.util.Scanner;
public class D {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入一个字符:");
		String a=scanner.next();
		System.out.println((char)(a.charAt(0)-32));
	}
}

3. 从控制台输入一个字符串,由字母组成,转换后输出。

如果输入的是小写,就转换成大写。
如果输入的是大写,就转换成小写
例如输入:abCd ,控制台输入 ABcD

3.1 解法1

解题思路:将字符串转换成char类型的数组,将字符串中字母转换改为单个字符的转换。转换完成后重新组装。
涉及的知识点:String类的toCharArray()方法,数组遍历,自动类型转换。

import java.util.Scanner;
public class Demo3 {
	public static void main(String[] args) {
		System.out.println("请输入一个字符串:");
		Scanner scanner = new Scanner(System.in);
		String inputStr = scanner.next();
		char[] tempArray = inputStr.toCharArray();
		String switchStr = "";// 保存转换后的字符串
		for (char singleCast : tempArray) {
			if (singleCast >= 'A' && singleCast <= 'Z') {
				String singleCastStr = singleCast + "";// 自动类型转换
														// char+String=String类型
				singleCastStr = singleCastStr.toLowerCase();// 转换成小写字母
				switchStr += singleCastStr;// 转换后拼接
			} else if (singleCast >= 'a' && singleCast <= 'z') {
				String singleCastStr = singleCast + "";// 自动类型转换
				// char+String=String类型
				singleCastStr = singleCastStr.toUpperCase();// 转换成大写字母
				switchStr += singleCastStr;// 转换后拼接
			} else {
				// 不是字母的,如符号,中文等
				switchStr += singleCast;
			}
		}
		System.out.println("转换后的值为:"+switchStr);
	}
}

3.2 解法2

解题思路,转换成单个字符串,然后通过Ascii码转换进行大小写互转。

import java.util.Scanner;
public class Demo3 {
	public static void main(String[] args) {
		System.out.println("请输入一个字符串:");
		Scanner scanner = new Scanner(System.in);
		String inputStr = scanner.next();
		char[] tempArray = inputStr.toCharArray();
		for (char singleCast : tempArray) {
			if (singleCast >= 'A' && singleCast <= 'Z') {
				System.out.print((char) (singleCast +32));
			} else if (singleCast >= 'a' && singleCast <= 'z') {
				System.out.print((char) (singleCast -32));
			} else {
				// 不是字母的,如符号,中文等
				System.out.print(singleCast);
			}
		}
	}
}

4. 输入三个整数x,y,z,请把这三个数由小到大输出。

例如输入:1,3,2 输出 1,2,3

4.1 比较三个数 找出最值

import java.util.Scanner;
public class D {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入3个数字:");
		int a=scanner.nextInt();
		int b=scanner.nextInt();
		int c=scanner.nextInt();
		//a 最小的情况
		if(a<=b&&a<=c){
			System.out.println(a);
			if(b<=c){
				System.out.println(b);
				System.out.println(c);
			}else {
				System.out.println(c);
				System.out.println(b);
			}
		}
		//b最小
		if(b<=a&&b<=c){
			System.out.println(b);
			if(a<=c){
				System.out.println(a);
				System.out.println(c);
			}else{
				System.out.println(c);
				System.out.println(a);
			}
		}
		// c最小
		if(c<=b&&c<=a){
			System.out.println(c);
			if(b<=a){
				System.out.println(b);
				System.out.println(a);
			}else{
				System.out.println(a);
				System.out.println(b);
			}
		}
	}
}

4.2 借助数组排序

import java.util.Arrays;
import java.util.Scanner;
public class D {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入3个数字:");
		int a=scanner.nextInt();
		int b=scanner.nextInt();
		int c=scanner.nextInt();
		int arr[]={a,b,c};
		int sortArr[]=Arrays.stream(arr).sorted().toArray();
		System.out.println(sortArr[0]);
		System.out.println(sortArr[1]);
		System.out.println(sortArr[2]);
	}

4.3 借助List 列表进行排序

import java.util.*;

public class D {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入3个数字:");
		int a=scanner.nextInt();
		int b=scanner.nextInt();
		int c=scanner.nextInt();
		List<Integer> list=new ArrayList<>();
		list.add(a);
		list.add(b);
		list.add(c);
		list.sort(new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				if(o1>o2)return 1;
				if(o1<o2)return -1;
				return 0;
			}
		});
		System.out.println(list.get(0));
		System.out.println(list.get(1));
		System.out.println(list.get(2));
	}
}

其中

list.sort(new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				if(o1>o2)return 1;
				if(o1<o2)return -1;
				return 0;
			}
		});

与箭头函数

list.sort((d1,d2)->d1-d2); //d2-d1为降序

等价

4.4 递归

每次找出一个最小的输出 找到后在列表中进行移出

import java.util.*;

public class D {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入3个数字:");
		int a=scanner.nextInt();
		int b=scanner.nextInt();
		int c=scanner.nextInt();
		List<Integer> list=new ArrayList<>();
		list.add(a);
		list.add(b);
		list.add(c);
		dfs(list);
	}
	public static void dfs(List<Integer> list){
		if(list.size()==0)return;
		int min=list.get(0);
		for(int i=1;i<list.size();i++){
			min=Math.min(list.get(i),min);
		}
		System.out.println(min);
		list.remove(Integer.valueOf(min));
		dfs(list);//递归:方法内部调用方法本身
	}
}

5. 输入5个整数a,b,c,d,e 对五个整数进行排序。

例如输入5,3,2,1,4 输出 1,2,3,4,5

参考上一题中的2 3 4 解法

6. 判断101-200之间有多少个素数,并输出所有素数。

素数:素数一般指质数。质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 例如3和5,7

public class D {
	public static void main(String[] args) {
		int num=0;
		for(int i=101;i<=200;i+=2){//剪枝 这个范围内 偶数绝不可能是素数
			if(isRes(i)){
				num++;
				System.out.println(i);
			}
		}
		System.out.println("共"+num+"个素数");
	}
	public static boolean isRes(int num){
		for(int i=3;i<num;i++){
			if(num%i==0){
				return false;
			}
		}
		return  true;
	}
}

7. 利用循环和分支完成学习成绩转换

学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。并且可以实现循环输入学习成绩得出等级 输入分数为-1 则退出。
例如输入 90 输出 A, 输入50 输出C

import java.util.*;

public class D {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int num=scanner.nextInt();
		while(num!=-1){
			if(num>=90){
				System.out.println("A");
			}else if(num>=60){
				System.out.println("B");
			}else{
				System.out.println("C");
			}
			num=scanner.nextInt();
		}
		System.out.println("已退出");
	}
}

这个题在学习时,请注意循环的使用 条件判断时注意判断的顺序,注意这里的循环对编程思维来说很重要。

8. 请找出100以内与3相关的数

1、3的倍数
2、十位数是3的数
3.、个位数是3的数
4、要求找出的数不重复

public class D {
	public static void main(String[] args) {
		for(int i=1;i<=100;i++){
			if(i%3==0){
				//3的倍数
				System.out.println(i);
			}else if(i/10==3){
				//十位数是3
				System.out.println(i);
			}else if(i%10==3){
				//个位数是3
				System.out.println(i);
			}
		}
	}
}

可以尝试使用while循环来做,思考如果不用多分支if 即不是有else if 怎么实现???

9. 输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。

例如输入 Ab12 sd
输出字母:4,空格1个,数字2个,这里的数字按0到9算,12是1和2不是12

import java.util.*;

public class D {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		String word=scanner.nextLine();
		int cNum=0,blankNum=0,number=0,otherNum=0;
		for (int i=0;i<word.length();i++){
			char c=word.charAt(i);
			if(c>='a'&&c<='z' || c>='A'&& c<='Z'){
				cNum++;
			}else if(c==' '){
				blankNum++;
			}else if(c>='0'&&c<='9'){
				number++;
			}else{
				otherNum++;
			}
		}
		System.out.println("字母个数:"+cNum+"空格个数:"+blankNum+"数字个数:"+number+"其他字符个数:"+otherNum);
	}
}

10. 打印几何图形

   *
  ***
 ******
********
 ******
  ***
   *
public class demo8 {
	public static void main(String[] args) {
		for(int i=0;i<5;i++){
			for(int j=0;j<5-i;j++){
				System.out.print(" ");
			}
			for(int k=0;k<2*i+1;k++){
				System.out.print("*");
			}
			System.out.println();
		}
		for(int i=1;i<5;i++){
			for(int k=0;k<i+1;k++){
				System.out.print(" ");
			}
			for(int j=11;j>2*i+2;j--){
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

    *
   ***
  *****
 *******
*********
package com.lvan.demo8;

public class demo8 {
	public static void main(String[] args) {
		for(int i=0;i<5;i++){
			for(int j=0;j<5-i;j++){
				System.out.print(" ");
			}
			for(int k=0;k<2*i+1;k++){
				System.out.print("*");
			}
			System.out.println();
		}
	}
}
*
**
***
****
*****
public class App {
	public static void main(String[] args) {
		for(int i=0;i<6;i++){
			for(int k=0;k<i;k++){
				System.out.print("*");
			}
			System.out.println();
		}
		System.out.println();
	}
}
*
**
***
****
*****
****
***
**
*
package com.lvan.demo8;

public class demo8 {
	public static void main(String[] args) {
		for(int i=0;i<5;i++){
			for(int k=0;k<2*i+1;k++){
				System.out.print("*");
			}
			System.out.println();
		}
		for(int i=1;i<5;i++){
			for(int j=11;j>2*i+2;j--){
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

     *
    *  *
   *    *
  *      *
 *        *
  *      *
   *    *
    *  *
      *
package com.lvan.demo8;

import sun.tools.jar.resources.jar;

public class demo8 {
	public static void drawUp(){
		for(int i=0;i<5;i++){
			for(int j=0;j<(10-i);j++){
				System.out.print(" ");
			}
			System.out.print("*");
			for(int j=0;j<2*(i-1)+1;j++){
				System.out.print(" ");
			}
			if(i!=0){
				System.out.print("*");
			}
			System.out.println();
		}
	}
	public static void drawDown(){
		for(int i=0;i<=5;i++){
			for(int k=0;k<5+i;k++){
				System.out.print(" ");
			}
			System.out.print("*");
			for(int k=0;k<2*(5-i-1)+1;k++){
				System.out.print(" ");
			}
			
			if(i!=5){
				System.out.print("*");
			}
			System.out.println();
		}
	}
	public static void main(String[] args) {
		drawUp();
		drawDown();
	}
}

11. 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

11.1

使用if来判断,分别求,最易理解,代码较多

package com.test.demo;
import java.util.Scanner;

public class App {
	public static void main(String[] args) {
		System.out.println("请输入一个不多于五位的整数:");
		Scanner scanner=new Scanner(System.in);
		int number=scanner.nextInt();
		if(number>=10000){
			System.out.println("该数为5位数");
		}else if(number>=1000){
			System.out.println("该数为4位数");
		}else if(number>=100){
			System.out.println("该数为3位数");
		}else if(number>=10){
			System.out.println("该数为2位数");
		}else if(number>=0){
			System.out.println("该数为1位数");
		}else{
			System.out.println("输入错误");
		}
		
		if(number>=10000){
			System.out.print(number%10 );
			number=number/10;
		}
		if(number>=1000){
			System.out.print(number%10);
			number=number/10;
		}
		if(number>=100){
			System.out.print(number%10+"--");
			number=number/10;
		}
		if(number>=10){
			System.out.print(number%10);
			number=number/10;
		}
		if(number>=1){
			System.out.print(number%10);
			number=number/10;
		}
	}
}

11.2 简化1:将数字转化为字符串,调用tochararray方法将字符串转化为单字符数组,获取数组长度即为输入的数字的位数。再通过循环求余每次输出最后一位数。简化后便不受位数限制,可以接收用户任意输入的数字。

package com.test.demo;
import java.util.Scanner;

public class App {
	public static void main(String[] args) {
		System.out.println("请输入一个不多于五位的整数:");
		Scanner scanner=new Scanner(System.in);
		int number=scanner.nextInt();
		String numberStr=number+"";
		int n=numberStr.toCharArray().length;
		System.out.println("该数为"+n+"位数");
		for(int i=0;i<n;i++){
			System.out.print(number%10);
			number=number/10;
		}
	}
}

11.3 解法2:直接通过转化成单字符来进行输入和输出,不受输入内容的限制,即可输入其他的非数字字符。

package com.test.demo;
import java.util.Scanner;

public class App {
	public static void main(String[] args) {
		System.out.println("请输入一个不多于五位的整数:");
		Scanner scanner=new Scanner(System.in);
//		int number=scanner.next();
		String numberStr=scanner.next();
		char[] numberStrArray=numberStr.toCharArray();
		int n=numberStrArray.length;
		System.out.println("该数为"+n+"位数");
		for(int i=0;i<n;i++){
			System.out.print(numberStrArray[n-i-1]);
		}
	}
}

12. 求一个3*3矩阵对角线元素之和。

3*3 矩阵,即为一个3行3列的二维数组。

package com.test.demo;
import java.util.Random;
import java.util.Scanner;

public class App {
	public static void main(String[] args) {
		int [][] number=new int[3][3];
		for(int i=0;i<3;i++){
			for(int k=0;k<3;k++){
				number[i][k]=new Random().nextInt(50);
				System.out.print(number[i][k]+" ");
			}
			System.out.println();
		}
		int sum=0;
		for(int i=0;i<3;i++){
			for(int k=0;k<3;k++){
				if(i==k){
					sum+=number[i][k];
				}
			}
		}
		System.out.println("和为"+sum);
	}
}

输出:

4 37 21
4 42 3
9 21 47
和为93
上述为左上到右下的对角线的求和,左下到右上感兴趣的可以做一下评论区留言。

  1. 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

例如 已有数组为[1,3,4,5,6] 升序 输入 2 时 输出 [1,2,3,4,5,6]
输入3时 输出[1,3,3,4,5,6]
已有数组为[6,5,2,1]降序 输入3时 输出 [6,5,3,2,1]
输入5时 输出[6,5,5,2,1]

  1. 将一个数组逆序输出。

输入 3,2,1,5,6 输出 6,5,1,2,3

  1. 取一个大于7位的整数a从右端开始的4~7位。

输入 1235678 输出 123
输入12345678910 输出678

  1. 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

输入 5,7,1,3,2 输出 7,5,2,3,1

  1. 计算字符串中子串出现的次数。

输入 abca
输出 a-2,b-1,c-1, ab-1,bc-1,ca-1,abc-1,bca-1,abca-1

  1. 有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩并输出。

要求,输入每个学生的信息后得出该学生的平均成绩。五个学生信息都有成绩后再求出五个学生的平均成绩。

  1. 编写程序,从键盘输入一个 0~99999 之间的任意数,判断输入的数是几位数?

输入 10 输出2
输入110 输出3

  1. 用 while 循环和for循环分别打印出 1~200 之间所有 3 的倍数之和。
  2. 已知 XYZ+YZZ=532,其中,X、Y、Z 为数字,编程求出 X、Y 和 Z 的值。
  3. 写一个猜拳游戏,从控制台输入石头、剪刀、布,后台随机生成对应和输入的做比较,看看谁能赢,输,和平局。
  4. 打印出999以内所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。(例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。)
  5. 将一个正整数分解质因数。例如:输入90,打印出90=233*5
  6. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
  7. 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?(完全平方数 :如果一个正整数 a 是某一个整数 b 的平方 .0也是完全平方数)、
  8. 输出9*9口诀。
  9. 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天 剩下的一半零一个。 到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
  10. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
  11. 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。完数的意思是将所有因数加起来的和等于这个数.比如28= 1+2+4+7+14
  12. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
  13. 输入两个正整数m和n,求其最大公约数和最小公倍数。
  14. 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。输出结果的形式如:2+22+222=246;
  15. 一球从h米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第n次落地时,共经过多少米?第n次反弹多高?程序分析:反弹的高度:(1/2)的n次方*h
  16. 利用递归方法求5!。
  17. 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大。
  18. 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
  19. 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
  20. 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
  21. 海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
  22. 809*??=800*??+9*??+1,其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
  23. 输出两个素数之和位偶数的数(一万以内)。
  24. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
  25. 输入 3 个正数,判断能否构成一个三角形。
  26. 编写程序解决“百钱买百鸡”问题。公鸡五钱一只,母鸡三钱一只,小鸡一钱三只,现有百钱欲买百鸡,共有多少种买法?
  27. 验证“鬼谷猜想”:对任意自然数,若是奇数,就对它乘以 3 再加 1;若是偶数,就对它除以 2,这样得到一个新数,再按上述计算规则进行计算,一直进行下去,最终必然得到 1。
  28. 设计2个类,要求如下

定义一个汽车类Vehicle

  1. 属性包括:汽车品牌brand(String类型)、颜色color(String类型)和速度speed(double类型)。
  2. 至少提供一个有参的构造方法(要求品牌和颜色可以初始化为任意值,但速度的初始值必须为0)。
  3. 为属性提供访问器方法。注意:汽车品牌一旦初始化之后不能修改。
  4. 定义一个一般方法run(),用打印语句描述汽车奔跑的功能
  5. 在main方法中创建一个品牌为―benz‖、颜色为―black‖的汽车。
  6. 定义一个Vehicle类的子类轿车类Car
  7. 轿车有自己的属性载人数loader(int 类型)。
  8. 提供该类初始化属性的构造方法。
  9. 重新定义run(),用打印语句描述轿车奔跑的功能。
  10. main方法中创建一个品牌为―Honda‖、颜色为―red‖,载人数为2人的轿车。
  1. Cola公司的雇员分为以下若干类:
  1. ColaEmployee :这是所有员工总的父类,属性:员工的姓名,员工的生日月份。方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100 元。
  2. SalariedEmployee : ColaEmployee 的子类,拿固定工资的员工。属性:月薪
  3. HourlyEmployee :ColaEmployee 的子类,按小时拿工资的员工,每月工作超出160 小时的部分按照1.5 倍工资发放。属性:每小时的工资、每月工作的小时数
  4. SalesEmployee :ColaEmployee 的子类,销售人员,工资由月销售额和提成率决定。属性:月销售额、提成率
  5. 定义一个类Company,在该类中写一个方法,调用该方法可以打印出某月某个员工的工资数额,写一个测试类TestCompany,在main方法,把若干各种类型的员工放在一个ColaEmployee 数组里,并单元出数组中每个员工当月的工资。
  1. 编写三个系别的学生类:英语系,计算机系,文学系(要求通过继承学生类)
  1. 各系有以下成绩:
    英语系: 演讲,期末考试,期中考试;
    计算机系:操作能力,英语写作,期中考试,期末考试;
    文学系: 演讲,作品,期末考试,期中考试;
  2. 各系总分评测标准:
    英语系: 演讲 50% 期末考试 25% 期中考试 25%
    计算机系: 操作能力 40% 英语写作 20% 期末考试 20% 期中考试 20%
    文学系: 演讲 35% 作品 35% 期末考试 15% 期中考试 15%
  3. 定义一个可容纳5个学生的学生类数组,使用随机数给该数组装入各系学生的对象,然后按如下格式输出数组中的信息:
    学号:XXXXXXXX 姓名:XXX 性别:X 年龄:XX 综合成绩:XX
  1. 要求编写一个Java应用程序:

编写一个矩形类Rect,包含:

  1. 两个protected属性:矩形的宽width;矩形的高height。
  2. 两个构造方法:一个带有两个参数的构造方法,用于将width和height属性初化;一个不带参数的构造方法,将矩形初始化为宽和高都为10。
  3. 求矩形面积的方法area(),求矩形周长的方法perimeter()
  4. 通过继承Rect类编写一个具有确定位置的矩形类PlainRect,其确定位置用矩形的左上角坐标来标识,包含:添加两个属性:矩形左上角坐标startX和startY。
    4.1 两个构造方法:
    带4个参数的构造方法,用于对startX、startY、width和height属性初始化;
    不带参数的构造方法,将矩形初始化为左上角坐标、长和宽都为0的矩形;
    4.2 添加一个方法:
    判断某个点是否在矩形内部的方法isInside(double x,double y)。如在矩形内,返回true, 否则,返回false。提示:点在矩形类是指满足条件:
    x>=startX&&x<=(startX+width)&&y<startY&&y>=(startY-height)
  5. 编写PlainRect类的测试程序
    5.1 创建一个左上角坐标为(10,10),长为20,宽为10的矩形对象;
    5.2 计算并打印输出矩形的面积和周长;
    5.3 判断点(25.5,13)是否在矩形内,并打印输出相关信息。
  1. 类的成员变量 猜数字游戏一个类A有一个成员变量v有一个初值100。定义一个类对A类的成员变量v进行猜。如果大了则提示大了小了则提示小了。等于则提示猜测成功。
  2. 类的成员变量 请定义一个交通工具(Vehicle)的类其中有: 属性速度(speed)体积(size)等等 方法移动(move())设置速度(setSpeed(int speed))加速speedUp(),减速speedDown()等等. 最后在测试类Vehicle中的main()中实例化一个交通工具对象并通过方法给它初始化speed,size的值并且通过打印出来。另外调用加速减速的方法对速度进行改变。
  3. 构造方法 编写Java程序模拟简单的计算器。 定义名为Number的类其中有两个整型数据成员n1和n2应声明为私有。编写构造方法赋予n1和n2初始值再为该类定义加addition、减subtration、乘multiplication、除division等公有成员方法分别对两个成员变量执行加、减、乘、除的运算。 在main方法中创建Number类的对象调用各个方法并显示计算结果。
  4. 构造方法 编写Java程序用于显示人的姓名和年龄。 定义一个人类Person该类中应该有两个私有属性姓名name和年龄age。定义构造方法用来初始化数据成员。再定义显示display方法将姓名和年龄打印出来。 在main方法中创建人类的实例然后将信息显示。
  5. 定义一个点类Point,包含2个成员变量x、y分别表示x和y坐标,2个构造器Point()和Point(intx0,y0),以及一个movePoint(int dx,int dy)方法实现点的位置移动,创建两个Point对象p1、p2,分别调用movePoint方法后,打印p1和p2的坐标
  6. 设计一个类Student,该类包括姓名、学号和成绩。设计一个方法,按照成绩从高到低的顺序输出姓名、学号和成绩信息
  7. 定义两个类,描述如下: [必做题]

• 定义一个人类Person:
• 定义一个方法sayHello(),可以向对方发出问候语“hello,my name is XXX”
• 有三个属性:名字、身高、体重
• 定义一个PersonCreate类:
• 创建两个对象,分别是zhangsan,33岁,1.73;lishi,44,1.74
• 分别调用对象的sayHello()方法。

  1. 定义两个类,描述如下: [必做题]

• 定义一个人类Person:
• 定义一个方法sayHello(),可以向对方发出问候语“hello,my name is XXX”
• 有三个属性:名字、身高、体重
• 通过构造方法,分别给三个属性赋值
• 定义一个Constructor类:
• 创建两个对象,分别是zhangsan,33岁,1.73;lishi,44,1.74
• 分别调用对象的sayHello()方法。

  1. 在D盘创建一个ss的目录,在ss下面创建一个s.txt文件,在文件里边写入Hello World。
  2. 把57中的s.txt文件读取到内存中,显示到控制台
  3. 统计s.txt中各个字符出现的次数,打印到控制台
  4. 把s.txt中大写转成小写,小写转成大写,空格转成下划线,在输入到文件中覆盖之前的。
  5. 从控制台输入一个路径,程序循环读取这个路径下有多少文件夹?多少文件?
  6. 拷贝一张图片从D盘到F盘、移动一张图片从D盘到F盘
  7. 使用随机文件流类RandomAccessFile将一个文本文件倒置读出
  8. 编写一个Java应用程序,可以实现Dos中的type命令,并加上行号。即将文本文件在控制台上显示出来,并在每一行的前面加上行号。
  9. 输入两个文件夹名称,将A文件夹内容全部拷贝到B文件夹,要求使用多线程来操作。
  10. 在控制台接受一个数字大小的类型,比如输入5M,或者5KB,查找统计出电脑D盘目录下小于5M的文件有多少个,或者小于5KB的大小有多少个文件。
  11. 在控制台输入2个mp3的路径,程序接受到后对两个mp3进行合成。合成后输出到D:/merge.mp3。
  12. 对上面题目进行稍加改动,从控制台接受至少两个mp3路径,输入q退出,程序对这些路径的mp3进行合成。
  13. 从网络下载一个图片到电脑的D盘(选做题)
  14. 对文件进行压缩
  15. 对一个文件夹进行压缩
  16. 创建一个ArrayList集合,输入10个数,将数从大到小输出,从小到大输出,随机输出。
  17. 已知有两个容器List,第一个List装有【小编,小王】,第二个容器装有【95分,94分】,请把第二个容器的94分改成95分,通过迭代器在控制打印出:

小编:95分
小王:95分

  1. 创建一个HashMap,里边存有key:username,value:password,的用户密码信息,从控制台输入一个用户和密码,程序在后台判断用户名在map中是否存在,如果不存在,就提示用户名错误,用户正确,在判断当前用户名对应的密码是否和输入的一致,如果一致就提示用户密码正确.
  2. 有两个list集合,l1数据有1,2,3,4 l2数据有 2,3,4,5, 将两个集合中重复的数据移除,并且把不重复的添加到第三个l3集合里边。
  3. 创建一个List集合,里边有20组数据,在创建一个Map,把List中下标为0的作为map的key,下标为list.length()-1的为map的value,依次类推,最后在控制台打印出map所对应的key和value。
  4. 创建一个Map集合,里边有10组数据,假如key为1到10,value为11到20,从控制台接受1到20之间的数,程序后台判断map中key和value有没有对应的,如果有提示当前数字为key,对应的值是多少,如果是值匹配上了,提示匹配到值为xx,对应的key为yy。
  5. 有如下需求,中国队,美国队,日本队,每个国家队下面又有乒乓球,羽毛球,篮球,每个球类下面有第一组,第二组,第三组,每个组下面有教练,队员,教练和队员的信息有用户名和性别,年龄,职位。请根据以上的需求利用List和Map以及学的集合类的知识点来完成这道题目。
  6. 反射例子
  1. 定义一个Java类,Person,属性有name、age,使用反射创建一个实例,调用构造函数初始化name和age,并且调用里边的sayHello()方法。
  2. 定义一个Java类,Person,通过反射把给里边所有的字段的赋值
  3. 通过反射调用main函数。
  4. 通过反射去创建对象,分别用Constructor和Class对象去创建
  5. 定义一个Person类,person类继承了Base类,通过反射去查看Person类继承了哪个类。
  6. 通过反射创建一个ArrayList对象,并且调用里边的方法添加一些数据,循环list,把对象打印到控制台。
  1. 有如下数组 int[] arr = {1,2,3,4,5,6,7,8,9,10},现有两个人进行抽签,A先抽签,B继续抽签,A继续抽签,依次类推,直到抽完为止,抽一次少一次,不能有重复的,用两个线程模拟两个人的抽签,随机抽签,把抽签的结果打印到控制台,记住,这里是用数组,不是集合来存取1到10。
  2. 某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程,并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下:

编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]
编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是: [06, 11, 14, 22, 29, 32, 15]
//…
从后门入场的员工总共: 13 位员工
从前门入场的员工总共: 87 位员工

  1. 开启一个子线程循环3次,主线程循环3次,然后子线程循环3次,主线程循环3次,这样循环10次;
  2. 写一个买票的例子,模拟3个窗口同时买60张票。
  3. 利用多线程去扫描统计你的电脑D盘前5个文件目录,并且统计出来各个目录地下有多少目录和文件,并且目录的深度是多少,比如有D:/a/b/c/d 这个目录结构相对于a来说,他的深度是3,因为他下面有目录d。统计出a目录下面有多少个目录包括子目录,递归统计,有多少个文件,递归统计,各个文件的类型有多少个,比如,txt有10个,exe有2个等。要求使用5个线程,每个线程各统计一个目录。(综合性题)
  4. 匹配一个手机号码是否正确,格式要求为11位或者7位座机号码,判断要严格缜密。
  5. 匹配一个邮箱号码,并且只有163,qq,126 这三种邮箱
  6. 匹配一个URL,分析URL的特性,并且效验是否正确
  7. 匹配密码的强度,要求包含至少一位大写,大小写和数字组合,不能出现任何特殊符号,比如Abc123Dcd是正确的
  8. 匹配一段文字里边是否包含中文,如果包含,报中文替换成*号,并且把替换后的在控制台打印出来
  9. 从控制台输入一个字符串,用正则效验是否为数字?
  10. 匹配一个字符串是否是日期格式,日期格式如下:2018-12-12 12:12:12 或者 2019/02/24 09:11:23 这两种格式
  11. 从网上下载一个图片到D:/xxx.mp3
  12. http://www.duwenzhang.com/wenzhang/renshengzheli/ganwu/20130515/255476.html 把这篇文章的源码读取下来,利用正则表达式把文字部分匹配出来打印到控制台(选择题)
  13. 用Socket创建一个服务端和一个客户端,客户端发送一条消息到服务端,服务端收到后把消息原样回给客户端
  14. 在上面的基础上进一步改进,图片端发送个图片到服务端,服务端接受到保存到电脑的D:/yyy.jpg
  15. 在上面的基础上进一步改进,把图片的名字和图片本身转成的byte数组封装到对象里边,把对象传到服务端,服务端接受到后对对象进行解析,把图片保存到D盘下,图片名称用传过来的原图片名称。
  16. 写一个基于UDP客户端发送到服务端的例子
  17. StringBuilder是动态扩容的,根据他的这个特性,自己实现一个StringBuilder类。
  18. 利用swing实现一个包含登录,注册的小型系统。
  19. 使用jdbc完成99中的数据库连接,并实现增删改查功能

jdk1.8中文文档 chm

链接:https://pan.baidu.com/s/1MVvSeQbQ78NKVLPrzRUdNA
提取码:7v47
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V2的分享

jdk1.8网页文档 html

链接:https://pan.baidu.com/s/1rg7bGwYJCL5_KBIWif7jYA
提取码:f0n6
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V2的分享

  • 20
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值