java算法编程题

1、古典问题

import java.util.Scanner;
/*
 * 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长
 * 到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?  
 * 程序分析:  实际月份  1    2    3    4    5    6    7     8
 *             幼仔对数  1    0    1    1    2    3    5     8
 *             成兔对数  0    1    1    2    3    5    8     13
 *             总体对数  1    1    2    3    5    8    13    21
 *             幼仔对数=前月成兔对数
 *             成兔对数=前月成兔对数+前月幼仔对数
 *             总体对数=本月成兔对数+本月幼仔对数
 *             可以看出幼仔对数、成兔对数、总体对数都构成了一个数列。这个数
 *             列有关十分明显的特点,那是:前面相邻两项之和,构成了后一项。      
 */
public class Test01 {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		System.out.println("请输入月份:");
		int month=in.nextInt();
		System.out.println("第"+month+"月免子总数为"+fun(month)*2);
	}
	public static int fun(int n){
		if(n==1||n==2){
			return 1;
		}else{
			return fun(n-1)+fun(n-2);
		}
	}
}

2、求素数

/*
* 题目:判断101-200之间有多少个素数,并输出所有素数。 
* 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个
* 数),如果能被整除, 则表明此数不是素数,反之是素数。
*/
public class Test02 {
	public static void main(String[] args) {
		/*
		//方法一
		int count=0;	
		for(int i=101;i<=200;i++){
			boolean flag=false;
			for(int j=2;j<=Math.sqrt(i);j++){
				if(i%j==0){
					flag=false;
					break;
				}else{
					flag=true;
				}
			}
			if(flag==true){
				count++;
				System.out.println(i);
			}
		}
		System.out.println("素数个数为:"+count);
		*/
		//方法二
		int m = 101;
        int n = 200;
        int count = 0;
        //统计素数个数
        for(int i=m;i<n;i++){
            if(isPrime(i)){
                count++;
                System.out.print(i+" ");
                if(count%10==0){
                    System.out.println();
                }
            }
        }
        System.out.println();
        System.out.println("在"+m+"和"+n+"之间共有"+count+"个素数");
    }
	private static boolean isPrime(int n){
        boolean flag = true;
        if(n==1){
          flag = false;
        }else{
            for(int i=2;i<=Math.sqrt(n);i++){
            if((n%i)==0 || n==1){
                flag = false;
                break;
            }else {
               flag = true;
            }
          }
        }
        return flag;
    }
}

3、水仙花数

/*
* 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三
* 位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙
* 花数 ",因为153=1的三次方+5的三次方+3的三次方。
*/
public class Test03 {
	public static void main(String[] args) {
		int sum=0, one=0, two=0,three=0;
		for(int i=100;i<=999;i++){
			one=i/100;
			two=(i%100)/10;
			three=i%10;
			sum=one*one*one+two*two*two+three*three*three;
			if(i==sum){
				System.out.println(i+"是水仙花数");
			}
		}
	}
}

4、分解质因数

import java.util.Scanner;
/*
* 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
* 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步
* 骤完成:
* (1)如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数
* 的过程已经结束,另外 打印出即可。
* (2)但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数
* n.重复执行第二步。
* (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
*/
public class Test04 {
	public static void main(String[] args) {
		
		System.out.println("请输入一个正整数:");
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		int k=2;
		System.out.print(n+"=");
		while(k<=n){
			if(k==n){
				System.out.print(n);
				break;
			}else if(n%k==0){
				System.out.print(k+"*");
				n=n/k;
			}else{
				k++;
			}	
		}
	}

5、成绩问题

import java.util.Scanner;
/*
* 题目:利用条件运算符的嵌套来完成此题:学习
* 成绩> =90分的同学用A表示,60-89分之
* 间的用B表示,60分以下的用C表示。
* 
* 知识点:
* 3目运算符: 当某个变量的值来源于某个判定的结果,而决定赋予特定的少量值。
* if else:所有的判定都可以用它来解决
* switch case:
* 1.switch 只判定1次(整个表达式只有一个结果:true)
* 2.当某个case为符合值,那么表达式switch就为true
*   就直接执行case后面的代码,当碰到第一个break才结束
* 3.switch(变量):整形,char,枚举.  
*   	//case 值: 值不可以是 表达式 例如 >90. 值只能是例如 5,6等。
*		//case 中的值 不可以重复
*/
public class Test05 {
	public static void main(String[] args) {
		//方法一:
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入一个成绩:");
		int score=in.nextInt();
		/*
		if(score>=90){
			System.out.println("成绩为A");
		}else if(score>=60){
			System.out.println("成绩为B");
		}else{
			System.out.println("成绩为C");
		}
		*/
		char grade;
		grade=score>=90?'A'
				:score>=60?'B'
						:'C';
		System.out.println("成绩为:"+grade);
		//方法二:
//		getResults();
	}
	@SuppressWarnings("resource")
	public static void getResults(){
		Scanner sc =new Scanner(System.in);
		System.out.println("请您输入分数:0-100");
		int num=sc.nextInt();
		int i=(num>=0&&num<=100)?num/10:-1;//整除
		String s=null;//对象类型可以赋予 null 的初始值
		switch(i){//switch(变量)
		case 10: 
		case 9:  s="A"; break;
		case 8:  
		case 7:  
		case 6:  s="B"; break;
		case -1:  s="输入的分数有问题"; break;
		default://当上门的case没有符合的值,就执行 default
			s="C"; break;
		}
		System.out.println(s);
	}
}

6、最大公约数和最小公倍数

import java.util.Scanner;
/*
* 题目:输入两个正整数m和n,求其最大公约数和最小公倍 数。   
*/
public class Test06 {
	public static void main(String[] args) {
		//方法一
		/*
		 * 程序分析:先判断两个数谁大谁小,用较大的除以较小的
		* 数,如果能整除,说明较大的数为最小公倍数,较小的数
		* 为最大公约数。反之,求出两数所有的公约数,最大那个
		* 就是所求的数。然后用两数的乘积除以最大公约数就可以
		* 求出最小公倍数。
		 */
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入一个正整数m:");
		int m=in.nextInt();
		System.out.println("请输入另一个正整数n:");
		int n=in.nextInt();
		int max = 0;
		int min = 0;
		if(m>n){
			max=m;
			min=n;
		}else{
			max=n;
			min=m;
		}	
		if (max%min==0) {
			System.out.println("最大公约数是:"+min);
			System.out.println("最小公倍数是:"+max);
		}else{
			int k = 0;
			for (int i = 1; i < min; i++) {
				if (max % i == 0 && min % i == 0) {
					k++;
				}
			} 
			int[] maxArrays=new int[k];
			for (int i = 1; i < min; i++) {
				if (max % i == 0 && min % i == 0) {
					maxArrays[k-1] = i;
					k--;
				}
			}
			System.out.println("最大公约数是:"+maxArrays[0]);
			System.out.println("最小公倍数是:"+max*min/maxArrays[0]);
		}
		//方法二
		/*  
		* 程序分析:在循环中,只要除数不等于0,用较大数除以较
		* 小的数,将小的一个数作为下一轮循环的大数,取得的余数
		* 作为下一轮循环的较小的数,如此循环直到较小的数的值
		* 为0,返回较大的数,此数即为最大公约数,最小公倍数
		* 为两数之积除以最大公约数。
		*/
		int a,b,m2;
		@SuppressWarnings("resource")
		Scanner s = new Scanner(System.in);
		System.out.print( "请输入一个整数: "); 
		a = s.nextInt();
		System.out.print( "再输入一个整数: "); 
		b = s.nextInt();
		max cd = new max();
		m2 = cd.maxNum(a,b);
		int n2 = a * b / m2;
		System.out.println("最大公约数: " + m2);
		System.out.println("最小公倍数: " + n2);
	}
}
class max{
	public int maxNum(int x, int y) {
		int t;
		if (x < y) {
			t = x;
			x = y;
			y = t;
		}
		while (y != 0) {
			if (x == y)
				return x;
			else {
				int k = x % y;
				x = y;
				y = k;
			}
		}
		return x;
	}
}

7、统计字符个数

import java.util.Scanner;
/*
 * 题目:输入一行字符,分别统计出其中英文字母、空
 * 格、数字和其它字符的个数。
 */
public class Test07 {
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		 System.out.print("请输入一串字符:");
		 Scanner in = new Scanner(System.in);
         String str = in.nextLine();//将一行字符转化为字符串
         in.close();
         count(str);
	}
	//统计输入的字符数
    private static void count(String str){
        String E1 = "[a-zA-Z]";
        String E2 = "[0-9]";
        String E3 = "\\s";//空格
        int countLetter = 0;
        int countNumber = 0;
        int countSpace = 0;
		int countOther = 0;
        char[] array_Char = str.toCharArray();//将字符串转化为字符数组
        String[] array_String = new String[array_Char.length];
        //把字符数组赋给字符串数组
        for(int i=0;i<array_Char.length;i++)
            array_String[i] = String.valueOf(array_Char[i]);
        //遍历字符串数组中的元素
        for(String s:array_String){
            if(s.matches(E1)) {
                countLetter++;
            }else if(s.matches(E2)) {
                countNumber++;
        	}else if(s.matches(E3)) {
                countSpace++;
        	}else {
                countOther++;
        	}
        }
        System.out.println("输入的字母个数:"+countLetter);
        System.out.println("输入的数字个数:"+countNumber);
        System.out.println("输入的空格个数:"+countSpace);
        System.out.println("输入的其它字符个数:"+countOther);
    }
}

8、a+aa+aaa+…

/*
 * 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是
 * 一个数字。例如2+22+222+2222+22222(此时共有5个
 * 数相加),几个数相加有键盘控制。
 */
public class Test08 {
	public static void main(String[] args) {
		int b=0,s=0,i=1;
		String str=null;
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入a的值:");
		int a=in.nextInt();
		System.out.println("请输入相加的个数n:");
		int n=in.nextInt();	
		if(n==1){
			str="s="+a;
		}else if(n==2){
			str="s="+a+"+"+a+a;
		}else if(n==3){
			str="s="+a+"+"+a+a+"+"+a+a+a;
		}else if(n==4){
			str="s="+a+"+"+a+a+"+"+a+a+a+"+"+a+a+a+a;
		}else{
			str="s="+a+"+"+a+a+"+"+a+a+a+"+...+"+a+a+"..."+a;
		} 	
		while(i<=n){
			b+=a;
			s+=b;
			a=a*10;
			i++;
		}	
		System.out.println(str+"="+s);
	}
}

9、完数

/*
 * 题目:一个数如果恰好等于它的因子之和,这个数就称
 * 为 "完数 "。例如6=1+2+3.编程     找出1000以
 * 内的所有完数。
 */
public class Test09 {
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		int n=1;
		System.out.println("1到1000的数中");
		while(n<1000){
			int t=0;
			int k=0;
			//统计因子的个数,作为数组的长度
			for(int i=1;i<=n/2;i++){
				if(n%i==0){
					k++;
				}
			}
			int[] arr=new int[k];
			int m=0;
			//计算所有因子之和,并把因子赋值给数组
			for(int i=1;i<=n/2;i++){
				if(n%i==0){
					t+=i;
					arr[m]=i;
					m++;
				}
			}
			String str="";
			for(int i=0;i<arr.length;i++){
				str+=arr[i]+"+";
			}
			if(n==t){
				str=str.substring(0,str.length()-1);//去掉最后一个加号
				System.out.println(n+"是完数,"+n+"="+str);
			}
			n++;
		}
	}
}

10、自由落体

/*
 * 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再
 * 落下,求它在     第10次落地时,共经过多少米?第10次反弹多高?
 */
public class Test10 {

	public static void main(String[] args) {
		int k=0;
		double n=100;
		double sum=0;
		while(k<10){
			sum+=n;
			n=n/2;
			k++;
		}
		System.out.println("第10次落地时,共经过"+sum+"米");
		System.out.println("第10次反弹"+n+"米");
	}
}

11、无重复数

/*
 * 题目:有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的
 * 三位数?都是多少?
 */
public class Test11 {
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		int count=0;
		for(int x=1;x<5;x++){
			for(int y=1;y<5;y++){
				for(int z=1;z<5;z++){
					if(x!=y&&x!=z&&y!=z){
						count++;
						System.out.println(x*100+y*10+z);
					}
				}
			}
		}
		System.out.println("能组成"+count+"个不同的数");
	}
}

12、利润问题一

import java.util.Scanner;
/*
 * 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元
 * 时,奖金可提10%;利润高于10万元,低于20万元时,低于10万
 * 元的部分按10%提成,高于10万元的部分,可提成7.5%;20万
 * 到40万之间时,高于20万元的部分,可提成5%;40万到60万之
 * 间时高于40万元的部分,可提成3%;60万到100万之间时,高
 * 于60万元的部分,可提成1.5%,高于100万元时,超过100万元
 * 的部分按1%提成,从键盘输入当月利润,求应发放奖金总数? 
 */
public class Test12 {
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		//方法一
		System.out.println("请输入当月利润(元):");
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		double profit=in.nextInt();
		double bonus=0;
		if(profit<=100000){
			bonus=profit*10/100;
		}else if(profit>100000 && profit<=200000){
			bonus=10000+(profit-100000)*75/1000;
		}else if(profit>200000 && profit<=400000){
			bonus=10000+7500+(profit-200000)*5/100;
		}else if(profit>400000 && profit<=600000){
			bonus=10000+7500+10000+(profit-400000)*3/100;
		}else if(profit>600000 && profit<=1000000){
			bonus=10000+7500+10000+6000+(profit-600000)*15/1000;
		}else{
			bonus=10000+7500+10000+6000+6000+(profit-1000000)*1/100;
		}
		System.out.println("应发放奖金:"+bonus+"元");
		//方法二
		double x = 0, y = 0;
		System.out.print("输入当月利润(万):");
		x = in.nextInt();
		if (x > 0 && x <= 10) {
			y = x * 0.1;
		} else if (x > 10 && x <= 20) {
			y = 10 * 0.1 + (x - 10) * 0.075;
		} else if (x > 20 && x <= 40) {
			y = 10 * 0.1 + 10 * 0.075 + (x - 20) * 0.05;
		} else if (x > 40 && x <= 60) {
			y = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + (x - 40) * 0.03;
		} else if (x > 60 && x <= 100) {
			y = 10 * 0.175 + 20 * 0.05 + 20 * 0.03 + (x - 60) * 0.015;
		} else if (x > 100) {
			y = 10 * 0.175 + 20 * 0.08 + 40 * 0.015 + (x - 100) * 0.01;
		}
		System.out.println("应该提取的奖金是 " + y + "万");
	}
}

13、利润问题二

import java.util.Scanner;
/**
 * 
 * 个人所得税计算器

个人所得税计算器,编写程序实现个人所得税的计算,要求从控制台输入本月实际收入,求出本月应纳个税。
个人所得税计算公式:
月应纳税所得额=月实际收入-个税起征点(2000.00)
月应纳个人所得税税额=K1×F1+K2×F2+K3×F3+…+Kn×Fn
其中Kn表示月应纳税所得额在第n级的部分,Fn表示第n级的税率。
个人所得税率表: 
级数	全月应纳税所得额	                    税率(%)
1	不超过500元的	                		5
2	超过500元至2,000元的部分	    		10
3	超过2,000元至5,000元的部分	    	15
4	超过5,000元至20,000元的部分			20
5	超过20,000元至40,000元的部分			25
6	超过40,000元至60,000元的部分			30
7	超过60,000元至80,000元的部分			35
8	超过80,000元至100,000元的部分		40
9	超过100,000元的部分	        		45
1,该习题主要考察的知识点:控制台输入和复杂的选择流程控制。
2,计算个人所得税时要注意,应纳税所得额要分段计算,即:
若某人的本月应纳税所得额为:7800.00元,则其中有500.00元
适用税率5%;有1500.00元适用税率10%;有3000.00元适用税率
15%;有2800.00元适用税率20%。则该员工应纳税:
500×5%+1500×10%+3000×15%+2800×20%=1185.00元
 */
public class Test54 {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		//1.准备数据
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入您的薪水:");
		double dnum=sc.nextDouble();
		//需要计算出是第几档
		double num=dnum-2000;//应该缴纳税的部分
		int types=getTypes(num);//计算出档次
		//有档次啦,可以进行计算 应该纳税的金额。
		double ynum=getYnum(types,num);//计算出 需要纳多少税
		//输出
		System.out.println("您的收入:"+dnum);
		System.out.println("您应该纳税部分:"+num);
		System.out.println("您的税收为:"+ynum);
		if(ynum<=0){
			System.out.println("纳税光荣,请加油");
		}
	}
	/**
	 * 计算应该纳多少税。
	 * @param types 档次,int类型
	 * @param num   应该纳税金额,double
	 * @return double类型,需要的缴纳的税收
	 */
	private static double getYnum(int types, double num) {
		//准备数据
		double nums=0;//纳税的数量
		switch(types){//假如:110000
		case 9:nums=(num-100000)*0.45;
				num=100000;
		case 8:nums+=(num-80000)*0.4;
				num=80000;
		case 7:nums+=(num-60000)*0.35;
				num=60000;
		case 6:nums+=(num-40000)*0.3;
				num=40000;
		case 5:nums+=(num-20000)*0.25;
				num=20000;
		case 4:nums+=(num-5000)*0.2;
				num=5000;
		case 3:nums+=(num-2000)*0.15;
				num=2000;
		case 2:nums+=(num-500)*0.1;
				num=500;
		case 1:nums+=(num)*0.05;
				break;
		}
		return nums;
	}
	/**
	 * 计算应该纳税部分的档次。
	 * @param num  需要纳税的金额  double类型
	 * @return  int类型,档次,档分为:10档
	 */
	private static int getTypes(double num) {
		int types=0;//默认为0档
		if(num>100000){
			types=9;
		}else if(num>80000){
			types=8;
		}else if(num>60000){
			types=7;
		}else if(num>40000){
			types=6;
		}else if(num>20000){
			types=5;
		}else if(num>5000){
			types=4;
		}else if(num>2000){
			types=3;
		}else if(num>500){
			types=2;
		}else if(num>0){
			types=1;
		}
		return types;
	}
}

14、判断这这一天是这一年的第几天

/*
 * 题目:输入某年某月某日,判断这一天是这一年的第几天? 
 */
public class Test14 {
	public static void main(String[] args) {
		//方法一
//		Scanner in=new Scanner(System.in);
//		System.out.println("请输入年:");
//		int year=in.nextInt();
//		System.out.println("请输入月:");
//		int month=in.nextInt();
//		System.out.println("请输入日:");
//		int day=in.nextInt();
//		if (month>2) {
//			for(int i=1;i<month;i++){
//				if(i==4||i==6||i==9||i==11){
//					day+=30;
//				}else if(i==2){
//					if((year%4==0&&year%100!=0)||(year%400==0)){
//						day+=29;
//					}else{
//						day+=28;
//					}
//				}else{
//					day+=31;
//				}
//			}
//			System.out.println("这一天是这一年的第"+day+"天");
//		}else {
//			if(month==1){
//				System.out.println("这一天是这一年的第"+day+"天");
//			}else if(month==2){
//				day+=31;
//				System.out.println("这一天是这一年的第"+day+"天");
//			}			
//		}
		//方法二
		int year, month, day;
		int days = 0;
		int d = 0;
		int e;
		input fymd = new input();
		do {
			e = 0;
			System.out.print("输入年:");
			year = fymd.in();
			System.out.print("输入月:");
			month = fymd.in();
			System.out.print("输入天:");
			day = fymd.in();
			if (year<0||month<0||month>12||day<0||day>31){
				System.out.println("输入错误,请重新输入!");
				e = 1;
			}
		} while (e == 1);
		for (int i = 1; i < month; i++) {
			switch (i) {
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				days = 31;
				break;
			case 4:
			case 6:
			case 9:
			case 11:
				days = 30;
				break;
			case 2:
				if ((year%400==0)||(year%4==0&&year%100!=0)){
					days = 29;
				} else {
					days = 28;
				}
				break;
			}
			d += days;
		}
		System.out.println(year+"-"+month+"-"+day+"是这年的第"+(d+day)+"天。");
	}
}
class input{
    public int in() {
        int value = 0;
	    @SuppressWarnings("resource")
		Scanner s = new Scanner(System.in);
        value = s.nextInt();
        return value;
     }
}

15、升序输出

import java.util.Scanner;
/*
 * 题目:输入三个整数x,y,z,请把这三个数由小到大输出。
 */
public class Test15 {
	public static void main(String[] args) {
		/*
		//方法一
		Scanner in=new Scanner(System.in);
		System.out.println("请输入x的值:");
		int x=in.nextInt();
		System.out.println("请输入y的值:");
		int y=in.nextInt();
		System.out.println("请输入z的值:");
		int z=in.nextInt();
		System.out.println("原数值:"+x+","+y+","+z);
		int max=x>y?x:y;//判断最大值
		max=max>z?max:z;
		int min=x<y?x:y;//判断最小值
		min=min<z?min:z;
		int middle=0;
		if(max!=x&&min!=x){
			middle=x;
		}else if(max!=y&&min!=y){
			middle=y;
		}else if(max!=z&&min!=z){
			middle=z;
		}
		System.out.println("排序后:"+min+","+middle+","+max);
	    */	
		//方法二(冒泡排序)
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入x的值:");
		int x=in.nextInt();
		System.out.println("请输入y的值:");
		int y=in.nextInt();
		System.out.println("请输入z的值:");
		int z=in.nextInt();
		System.out.println("原数值:"+x+","+y+","+z);
		if(x>y){
			int t=x;
			x=y;
			y=t;
		}
		if(x>z){
			int t=x;
			x=z;
			z=t;
		}
		if(y>z){
			int t=y;
			y=z;
			z=t;
		}
		System.out.println("排序后:"+x+","+y+","+z);
	}
}

16、九九乘法表

/*
 * 题目:输出9*9口诀。
 */
public class Test16 {
	public static void main(String[] args) {
		for(int i=1;i<10;i++){
			for(int j=1;j<i+1;j++){
				System.out.print(j+"*"+i+"="+j*i+"  ");
				/*
				 *因为结果是两位数时会多出结果是一位数时一个字符长度,所以
				 *为了使排列美观,再在结果为一位数后加上一个字符长度
				 */
				if(j*i<10){
					System.out.print(" ");
				}
			}
			System.out.println("");
		}
	}
}

17、猴子问题一

/*
 * 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还上
 * 瘾,又多吃了一个, 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
 * 以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃
 * 时,见只剩下一个桃子了。求第一天共摘了多少。
 * 分析:设第一天摘了x个。则有
 * 第一天剩:x/2-1
 * 第二天剩:(x/2-1)/2-1,前一天剩的等于后一天剩的加一乘以2
 * ..
 * 第九天剩:1
 * 一共吃了九天
 */
public class Test17 {
	public static void main(String[] args) {
		int x=1;
		for(int i=0;i<9;i++){
			x=(x+1)*2;
		}
		System.out.println("第一天共摘了"+x+"个");
	}
}

18、猴子问题二

/*
 * 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五
 * 份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩
 * 下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了
 * 一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
 * 分析:假设原来有x个桃子
 * 第一个猴子拿走了:(x-1)/5,剩下:x-(x-1)/5,剩下的一份是(x-(x-1)/5)/4;
 * 第二个猴子拿走了:(x-(x-1)/5-1)/5,剩下:x-(x-(x-1)/5-1)/5;
 * ..
 * ..
 * 第五个猴子时,第四个猴子剩下6,第五个猴子拿走了(6-1)/5,剩下4;
 * 也就是最少要剩4,这4个中一份是4/4,每一个剩下的数都是4的倍数
 */
public class Test18 {
	public static void main(String[] args) {
		int t,count,x=0;
		for(int i=4;i<10000;i++){
			count=1;
			t=i;//因为i进行内循环后会变化,所以先保存
			for(int j=0;j<5;j++){
				x=i/4*5+1;
				i=x;
				if(x%4==0){//判断每个猴子的操作是否成立
					count++;//成立就加一
				}else{
					break;//不成立退出内循环
				}
			}
			i=t;//把保存的i重新还回来
			if(count==5){
				System.out.println("原有桃子:"+x);
				break;
			}
		}
	}
}

19、输出棱形

import java.util.Scanner;

/*
 * 题目:打印出如下图案(菱形)   
          *   
         ***   
        *****   
       *******   
        *****   
         ***   
          *  

 */
public class Test19 {
	public static void main(String[] args) {
		//高和宽必须为相等的奇数
		int h=7,w=7;
		//前半段图形
		//规律:1,3,5,7...
		for(int i=0;i<(h+1)/2;i++){
			//每一行空出的
			for(int j=0;j<w/2-i;j++){
				System.out.print(" ");//空格符
			}
			//每一行打印的
			for(int k=1;k<(i+1)*2;k++){
				System.out.print("*");
			}
			System.out.println("");//空一行
		}
		//后半段图形,少中间一行
		//规律:...5,3,1
		for(int i=0;i<h/2;i++){
			//每一行空出的
			for(int j=0;j<i+1;j++){
				System.out.print(" ");//空格符
			}
			//每一行打印的
			for(int k=1;k<(h/2-i)*2;k++){
				System.out.print("*");
			}
			System.out.println("");//空一行
        }
		//方法二:最少代码
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入高:");
		int h2=in.nextInt();
		for(int i=1;i<=h2;i++){
			int m=(i<=(h2+1)/2)?i:(h2+1-i);
			for(int k=(h2+1)/2-m;k>0;k--){
				System.out.print(" ");
			}
			for(int j=1;j<m*2;j++){
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

20、输出三角形

/*
 * 题目:打印出如下图案(三角形)   
*             
***          
*****        
*******      
*********   
 */
public class Test56 {
	public static void main(String[] args) {
		for(int i=1;i<=5;i++){
			//.............
			for(int j=1;j<2*i;j++){
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

21、输出三角形二

import java.util.Scanner;
/**
 * for(起点;判定终点;步长) 明确起点,终点。
 * 1.     h=n;    j<2*i  k=h-i k>0 k--
高度可变                     i行      j*     k空
     *        1    1      4   
    ***       2    3      3
   *****      3    5      2
  *******     4    7      1
 *********    5    9      0
*/
public class Test57 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.print("请输入三角形的高度:");
		int h = in.nextInt();
		for(int i=1;i<=h;i++){
			for(int j=h-i;j>0;j--){
				System.out.print(" ");
			}
			for(int j=1;j<2*i;j++){
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

22、阶乘相加

/*
 * 题目:求1+2!+3!+...+20!的和
 */
public class Test21 {
	public static void main(String[] args) {	
		new sum();
		//普通方法
		long sum=0;
		long flg=1;
		for(int i=1;i<=20;i++){
			flg=flg*i;
			sum+=flg;
		}
		System.out.println("1+2!+3!+...+20!="+sum);
	}
}
//递归方法
class sum{
	sum(){
		long sum=0;
		for(int i=1;i<=20;i++){
			sum+=fun(i);
		}
		System.out.println("1+2!+3!+...+20!="+sum);
	}
	long fun(int n){
		if(n>1)
			return n*fun(n-1);
		return 1;
	}
}

23、递归求阶乘

/*
 * 题目:利用递归方法求5!。
 */
public class Test22 {
	public static void main(String[] args) {
		int n=5;
		Res res=new Res();
		System.out.println(n+"!="+res.res(n));
	}
}
class Res{
	public long res(int n){
		long value=0;
		if(n==1){
			value=1;
		}else{
			value=n*res(n-1);
		}
		return value;
	}
}

24、逆序输出一

import java.util.Scanner;
/*
 * 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
 */
public class Test24 {
	public static void main(String[] args) {
		//逻辑方法
		/*
		Scanner in=new Scanner(System.in);
		System.out.println("请输入一个5位或5位以下的正整数:");
		int n=in.nextInt();	
		int one,two,three,four,five;
		if(n/10000>0){
			one=n%10;
			two=(n/10)%10;
			three=(n/100)%10;
			four=(n/1000)%10;
			five=n/10000;	
			System.out.println("它是5位数");
			System.out.println(one+""+two+""+three+""+""+four+""+five);
		}else if(n/1000>0){
			one=n%10;
			two=(n/10)%10;
			three=(n/100)%10;
			four=n/1000;
			System.out.println("它是4位数");
			System.out.println(one+""+two+""+three+""+""+four);
		}else if(n/100>0){
			one=n%10;
			two=(n/10)%10;
			three=n/100;
			System.out.println("它是3位数");
			System.out.println(one+""+two+""+three);
		}else if(n/10>0){
			one=n%10;
			two=n/10;
			System.out.println("它是2位数");
			System.out.println(one+""+two);
		}else{
			System.out.println("它是1位数");
			System.out.println(n);
		}
		*/
		//长整型+数组方法(最高可输入18位)
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入一个正整数");
		long n=in.nextLong();
		String str=Long.toString(n);
		char[] ch=str.toCharArray();
		int k=ch.length;
		System.out.println("它是一个"+k+"位数");
		for(int i=k-1;i>=0;i--){
			System.out.print(ch[i]);
		}
	}
}

25、逆序输出二

import java.util.Scanner;
/**
 *     题目:输入一个数字 例如  123456
 *     请输出: 654321
 *     循环         1      2
 *  123456    6
 *  12345            5
 *  1234               4
 *  123                  3
 *  12                     2
 *  1                          1
 *  0   
 *  num=num*10+余数      
 */
public class Test53 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入1个数字:");
		int n=sc.nextInt();
		int num=0;//最后输出的颠倒数
		for(int i=n;i!=0;   ){
			int x=i%10;//求尾数
			num=num*10+x;
			System.out.println("num="+num+
					"  i="+i+"  x="+x);
			i/=10;//i=i/10; 减小数字
			
		}
		System.out.println(n+"::::"+num);
	}
}

26、逆序输出三

import java.util.Scanner;
/*
 * 题目:将一个数组逆序输出。
 */
public class Test31 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		//方法二
		System.out.println("输入多个整数(输入-1结束)");
		int[] a=new int[20];
		int i=0,j;
		do{
			a[i]=in.nextInt();
			i++;
		}while(a[i-1]!=-1);
		System.out.println("正序输出:");
		for(j=0;j<i-1;j++){
			System.out.print(a[j]+" ");
		}
		System.out.println();
		System.out.println("逆序输出:");
		/*
		 * 循环结束时j等于i-1,而i-1对应的是-1,
		 * 所以逆序输出j从i-2开始
		 */
		for(j=i-2;j>=0;j--){
			System.out.print(a[j]+" ");
		}
		//方法一
		/*
		System.out.println("请定义数组的长度");
		int[] arr=new int[in.nextInt()];
		for(int i=0;i<arr.length;i++){
			System.out.println("请输入第"+(i+1)+"个数");
			arr[i]=in.nextInt();
		}
		System.out.println("正序输出:");
		for(int j=0;j<arr.length;j++){
			System.out.print(arr[j]);
		}
		System.out.println();
		System.out.println("逆序输出:");
		for(int j=arr.length-1;j>=0;j--){
			System.out.print(arr[j]);
		}
		*/
	}
}

27、求素数

/*
 * 题目:求100之内的素数
 * 质数又称素数,有无限个。质数定义为在大于1的自然数中,除
 * 了1和它本身以外不再有其他因数,这样的数称为质数。
 */
public class Test27 {
	public static void main(String[] args) {
		//方法一,使用除sqrt(n)的方法求出的素数不包括2和3
		boolean b=false;
		System.out.println("100以内的素数有:");
		System.out.print(2+" ");
		System.out.print(3+" ");
		//因为4以上的偶数都能被2整除,所以循环排除偶数
		for(int i=3;i<=100;i+=2){
			for(int j=2;j<=Math.sqrt(i);j++){
				if(i%j==0){
					b=false;
					break;
				}else{
					b=true;
				}
			}
			if(b==true){
				System.out.print(i+" ");
			}
		}
		//方法二:使用除1位素数得2位方法,运行效率高通用性差。
		System.out.println("");
		int[] a=new int[]{2,3,5,7};
		for(int i=0;i<4;i++){
			System.out.print(a[i]+" ");
		}
		boolean b2=false;
		for(int i=11;i<100;i+=2){
			for(int j=0;j<4;j++){
				if(i%a[j]==0){
					b2=false;
					break;
				}else{
					b2=true;
				}
			}
			if(b2==true){
				System.out.print(i+" ");
			}
		}
	}
}

28、排序

import java.util.Scanner;
/*
 * 题目:对10个数进行排序
 */
public class Test28 {
	//二分法插入排序
	public static int[] BarnarySort(int[] data) {
		int[] temp=new int[data.length];
		for(int i=0;i<temp.length;i++){
			if(i==0){
				temp[i]=data[i];
			}else{
				for(int j=0,k=i-1;j<i&&k>=0;){
					if(temp[(j+k)/2]>=data[i]){
						if((j+k)/2==0){
							for(int iter=i;iter>0;iter--){
								temp[iter]=temp[iter-1];
							}
							temp[0]=data[i];
							break;
						}else if(temp[(j+k)/2-1]<=data[i]){
							for(int iter=i;iter>(j+k)/2;iter--){
								temp[iter]=temp[iter-1];
							}
							temp[(j+k)/2]=data[i];
							break;
						}else{
							k=(k+j)/2-1;
						}
					}else if(temp[(j+k)/2]<data[i]){
						if((j+k)/2==i-1){
							temp[i]=data[i];
							break;
						}else{
							j=(k+j)/2+1;
						}
					}
				}
			}
		}
		return temp;
	}
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入10个数:");
		int[] num=new int[10];
		for(int i=0;i<num.length;i++){
			num[i]=in.nextInt();
		}
		//选择排序
		/*
		for(int i=0;i<num.length;i++){
			for(int j=i+1;j<num.length;j++){
				if(num[i]>num[j]){//升序
					double t=num[i];
					num[i]=num[j];
					num[j]=t;
				}
			}
		}
		for(int i=0;i<num.length;i++){
			System.out.print(num[i]+" ");
		}
		*/
		//冒泡排序
		/*
		for(int i=0;i<num.length-1;i++){
			for(int j=0;j<num.length-1-i;j++){
				if(num[j]>num[j+1]){
					double t=num[j];
					num[j]=num[j+1];
					num[j+1]=t;
				}
			}
		}
		for(int i=0;i<num.length;i++){
			System.out.print(num[i]+" ");
		}
		*/
		//sort()方法
		//Arrays.sort(num);
		int[] arr=BarnarySort(num);
		for(int i=0;i<num.length;i++){
			System.out.print(arr[i]+" ");
		}
	}

}

29、矩阵对角线和

import java.util.Scanner;
/*
 * 题目:求一个3*3矩阵对角线元素之和
 */
public class Test29 {
	public static void main(String[] args) {
		double[][] a=new double[3][3];
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		for(int i=0;i<3;i++){
			System.out.println("请输入第"+(i+1)+"行元素");
			for(int j=0;j<3;j++){
				a[i][j]=in.nextDouble();
			}
		}
		for(int i=0;i<3;i++){
			for(int j=0;j<3;j++){
				System.out.print(a[i][j]+" ");
			}
			System.out.println();
		}
		double sum=0;
		sum=a[0][0]+a[1][1]+a[2][2]+a[0][2]+a[2][0];
		System.out.println("对角线之和等于:"+sum);
	}
}

30、数组的插入

import java.util.Scanner;
/*
 * 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
 */
public class Test30 {
	public static void main(String[] args) {
		int[] a={2,3,4,5,16,17,28,29};
		int[] b=new int[a.length+1];
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入一个数:");
		int n=in.nextInt();
		if(n>a[a.length-1]){
			b[b.length-1]=n;
			for(int i=0;i<b.length-1;i++){
				b[i]=a[i];
			}
		}else if(n<a[0]){
			b[0]=n;
			for(int i=0;i<a.length;i++){
				b[i+1]=a[i];
			}
		}else{
			//方法一
			int k;
			for(k=0;k<a.length;k++){
				if(n>a[k]){
					b[k]=a[k];
				}else{
					b[k]=n;
					break;
				}
			}
			for(int j=k+1;j<b.length;j++){
				b[j]=a[j-1];
			}
			//方法二,折半查找插入
			/*
			int low=0;
			int high=a.length-1;
			int mid=0;
			while(low<=high){
				mid=(low+high)/2;
				if(a[mid]>n){
					high=mid-1;
				}else if(a[mid]<n){
					low=mid+1;
				}else{
					break;
				}
			}
			insert(a,b,a.length,mid,n);
			*/
		}
		for(int i=0;i<b.length;i++){
			System.out.print(b[i]+" ");
		}
	}
	/*
	 * 插入操作
	 * @param arr 已排序好的数组
	 * @param arrCopy插入后的数组
	 * @param lastIndex 排序好的数组的长度
	 * @param targetIndex 在第targetIndex个位置插入值,插入后下标为targetIndex
	 * @param var 要插入的数
	 */
	public static void insert(int[] arr,int[] arrCopy,int lastIndex,int targetIndex,int val){
		for(int i=lastIndex;i>targetIndex;i--){
			arrCopy[i]=arr[i-1];
		}
		arrCopy[targetIndex]=val;
		for(int i=0;i<targetIndex;i++){
			arrCopy[i]=arr[i];
		}
	}
}

31、输入字母判断星期

import java.util.Scanner;
/*
 * 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字
 * 母一样,则继续判断第二个字母。
 */
public class Test26 {
	/*
	 * 方法一
	public static Scanner in=new Scanner(System.in);
	public static String week;
	public static char ch;
	*/
	public static void main(String[] args) {
		/*
		 * Monday     星期一
		 * Tuesday    星期二
		 * Wednesday  星期三
		 * Thursday   星期四
		 * Friday     星期五
		 * Saturday   星期六
		 * Sunday     星期日
		 */
		/*
		 * 方法一
		System.out.println("请输入星期几的第一个字母:");	
		week=in.nextLine();
		ch=week.charAt(0);
		if(ch=='M'){
			System.out.println("星期一");
		}else if(ch=='T'){
			System.out.println("请输入星期几的第二个字母:");	
			week=in.nextLine();
			ch=week.charAt(0);
			if(ch=='u'){
				System.out.println("星期二");
			}else if(ch=='h'){
				System.out.println("星期四");
			}
		}else if(ch=='W'){
			System.out.println("星期三");
		}else if(ch=='F'){
			System.out.println("星期五");
		}else if(ch=='S'){
			System.out.println("请输入星期几的第二个字母:");	
			week=in.nextLine();
			ch=week.charAt(0);
			if(ch=='a'){
				System.out.println("星期六");
			}else if(ch=='u'){
				System.out.println("星期六");
			}
		}
		*/
		//方法二
		getChar tw = new getChar();
	    System.out.println("请输入星期的第一个大写字母:");
	    char ch = tw.get();
	    switch(ch){
	    case 'M':
	    	System.out.println("Monday");
		    break;
	    case 'W':
	    	System.out.println("Wednesday");
	    	break;
	    case 'F':
	        System.out.println("Friday");
	        break;
	    case 'T':
	    	System.out.println("请输入星期的第二个字母:");
		    char ch2 = tw.get();
		    if(ch2=='U'){
		    	System.out.println("Tuesday");
		    }else if(ch2=='H'){
		    	System.out.println("Thursday");
		    }else{
		    	System.out.println("无此写法!");
		    }
		    break;
	    case 'S':
	    	System.out.println("请输入星期的第二个字母:");
		    char ch3 = tw.get();
		    if(ch3=='A'){
		    	System.out.println("Saturday");
		    }else if(ch3=='U'){
		    	System.out.println("Sunday");
		    }else{
		    	System.out.println("无此写法!");
		    }
		    break;
	    default:System.out.println("无此写法!");
	    }
	}
}
class getChar{
	public char get(){
		@SuppressWarnings("resource")
		Scanner s = new Scanner(System.in);
		String str = s.nextLine();
	    char ch = str.charAt(0);
	    if(ch<'A' || ch>'Z'){
	    	System.out.println("输入错误,请重新输入");
	        ch=get();
	    }
	    return ch;
	}
}

32、取位数

import java.util.Scanner;
/*
 * 题目:取一个整数a从右端开始的4~7位。
 */
public class Test32 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入一个七位以上的整数:");
		long num=in.nextLong();
		String str=Long.toString(num);
		char[] ch=str.toCharArray();
		int k=4;
		int n=ch.length;
		if (n<7) {
			System.out.println("输入错误");
		}else{
			for(int i=n-1;i>n-4-1;i--){
				System.out.println("第"+k+"位"+ch[i-3]);
				k++;
			}
			System.out.println("截取从右端开始的4~7位是:"+ch[n-7]+ch[n-6]+ch[n-5]+ch[n-4]);
		}
	}
}

33、杨辉三角形

/*
 * 题目:打印出杨辉三角形(要求打印出10行如下图)      
            1   
          1    1   
        1    2    1   
      1    3    3    1   
    1    4    6    4    1   
1    5    10    10    5    1   
…………
 */
public class Test33 {
	public static void main(String[] args) {
		int[][] a=new int[10][10];
		for(int i=0;i<10;i++){
			a[i][i]=1;
			a[i][0]=1;
		}
		for(int i=2;i<10;i++){
			for(int j=1;j<i;j++){
				a[i][j]=a[i-1][j-1]+a[i-1][j];
			}
		}
		for(int i=0;i<10;i++){
			for(int j=0;j<2*(10-i)-1;j++){
				System.out.print(" ");
			}
			for(int j=0;j<=i;j++){
				System.out.print(a[i][j]+"   ");
			}
			System.out.println();
		}
	}
}

34、顺序输出

import java.util.Scanner;
/*
 * 题目:输入3个数a,b,c,按大小顺序输出。 
 */
public class Test34 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入a的值:");
		int a=in.nextInt();
		System.out.println("请输入b的值:");
		int b=in.nextInt();
		System.out.println("请输入c的值:");
		int c=in.nextInt();	
		int max,min,mid = 0;
		//方法一
		/*
		max=(a>b?a:b)>c?(a>b?a:b):c;
		min=(a<b?a:b)<c?(a<b?a:b):c;
		if(a!=max&&a!=min){
			mid=a;
		}else if(b!=max&&b!=min){
			mid=b;
		}else if(c!=max&&c!=min){
			mid=c;
		}
		*/
		//方法二,类似于数组的冒泡排序
		if(a>b){
			int t=a;
			a=b;
			b=t;
		}
		if(a>c){
			int t=a;
			a=c;
			c=t;
		}
		if(b>c){
			int t=b;
			b=c;
			c=t;
		}
		min=a;
		mid=b;
		max=c;
		System.out.println("从小到大输出:"+min+" "+mid+" "+max);
		System.out.println("从大到小输出:"+max+" "+mid+" 1"+min);
	}
}

35、数组交换

/*
 * 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 
 */
public class Test35 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入数组的长度");
		int len=in.nextInt();
		int[] arr=new int[len];
		for(int i=0;i<len;i++){
			System.out.println("请输入第"+(i+1)+"个数");
			arr[i]=in.nextInt();
		}
		System.out.println("原数组:");
		for(int i=0;i<len;i++){
			System.out.print(arr[i]+" ");
		}
		/*
		 * 方法一,这个方法有个缺点,就是输入的最大值不能小于定义的的最大值
		 * 输入的最小值不能大于定义的最小值
		 */
		int max=0,min=999999;
		//找出最大值
		for(int i=0;i<len;i++){
			max=max>arr[i]?max:arr[i];
		}
		//找出最小值
		for(int i=0;i<len;i++){
			min=min<arr[i]?min:arr[i];
		}
		//交换过程
		for(int i=0;i<len;i++){
			if(max==arr[i]){
				arr[i]=arr[0];
				arr[0]=max;
			}
			if(min==arr[i]){
				arr[i]=arr[len-1];
				arr[len-1]=min;
			}
		}
		/*
		//方法二
		int maxTargetIndex=0,minTargetIndex=0;
		int max=arr[0],min=arr[len-1];
		for(int i=0;i<len;i++){
			if(arr[i]>max){
				max=arr[i];
				maxTargetIndex=i;			
			}
			if(arr[i]<=min){
				min=arr[i];
				minTargetIndex=i;
			}
		}
		if(maxTargetIndex==(len-1)&&minTargetIndex==0){
			int temp=arr[0];
			arr[0]=arr[len-1];
			arr[len-1]=temp;
		}else{
			if(maxTargetIndex!=0){
				int temp=arr[0];
				arr[0]=arr[maxTargetIndex];
				arr[maxTargetIndex]=temp;
			}	
			if(minTargetIndex!=(len-1)){
				int temp=arr[len-1];
				arr[len-1]=arr[minTargetIndex];
				arr[minTargetIndex]=temp;
			}
		}
		*/
		System.out.println();
		System.out.println("交换后数组:");
		for(int i=0;i<len;i++){
			System.out.print(arr[i]+" ");
		}
	}
}

36、数组移位

import java.util.Scanner;
/*
 * 题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
 */
public class Test36 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入n:");
		int n=in.nextInt();
		int m;
		do{
			System.out.println("请输入m(m<n):");
			m=in.nextInt();
		}while(n<m);
		int[] arr=new int[n];
		int[] arrCopy=new int[n];
		for(int i=0;i<n;i++){
			System.out.println("请输入第"+(i+1)+"个数");
			arr[i]=in.nextInt();
		}
		System.out.println("原数为:");
		for(int i=0;i<n;i++){
			System.out.print(arr[i]+" ");
		}
		System.out.println();
		for(int i=0;i<n-m;i++){
			arrCopy[i+m]=arr[i];
		}
		int k=0;
		for(int i=m-1;i>=0;i--){
			arrCopy[i]=arr[n-1-k];
			k++;
		}
		System.out.println("移动后的数为:");
		for(int i=0;i<n;i++){
			System.out.print(arrCopy[i]+" ");
		}
	}
}

37、n人围成圈问题

/*
 * 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报
 * 数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
 */
public class Test37 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入围成圈的人数,最少2人");
		int n=in.nextInt();
		boolean[] arr=new boolean[n];
		for(int i=0;i<arr.length;i++){
			arr[i]=true;
		}
		int leftNum=n;
		int num=0;
		int index=0;
		while(leftNum>1){
			if(arr[index]==true){
				num++;
			}
			if(num==3){
				arr[index]=false;
				num=0;
				leftNum--;
			}
			index++;	
			if(index==n){
				index=0;
			}
		}
		for(int i=0;i<arr.length;i++){
			if(arr[i]==true){
				System.out.println("最后留下的是第"+(i+1)+"号");
			}
		}
	}
}

38、求字符串长度

import java.util.Scanner;
/*
 * 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并
 * 输出其长度。(不能用length()函数)
 */
public class Test38 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入一个字符串:");
		String str=in.nextLine();
		int l=len(str);
		System.out.println("字符串的长度为:"+l);
		//length()函数
		System.out.println("字符串的长度为:"+str.length());
	}
	//求长度的方法,即函数
	static int len(String str){
		char[] ch=str.toCharArray();
		int k=0;
		for(int i=0;i<ch.length;i++){
			k++;
		}
		return k;
	}
}

39、偶数和、奇数和

import java.util.Scanner;
/*
 * 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当
 * 输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数) 
 */
public class Test39 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in = new Scanner(System.in);
		System.out.println("请输入一个数");
		int n = in.nextInt();
		System.out.println(sum(n));
	}
	static double sum(int n) {
		double sum = 0;
		if (n % 2 == 0) {
			for (int i = 2; i <= n; i += 2) {
				sum += (double) 1 / i;
			}
		} else {
			for (int i = 1; i <= n; i += 2) {
				sum += (double) 1 / i;
			}
		}
		return sum;
	}
}

40、字符串排序

import java.util.Arrays;
import java.util.Scanner;
/*
 * 题目:字符串排序。 
 */
public class Test40 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in = new Scanner(System.in);
		System.out.println("请输入一个字符串");
		String str=in.nextLine();
		char[] ch=str.toCharArray();
		Arrays.sort(ch);
		for(int i=0;i<ch.length;i++){
			System.out.println(ch[i]);
		}
	}
}

41、比赛排名单问题

/*
 * 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙
 * 队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名
 * 单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
 */
public class Test41 {
	public static void main(String[] args) {
		char[] m={'a','b','c'};
		char[] n={'x','y','z'};
		for(int i=0;i<m.length;i++){
			for(int j=0;j<n.length;j++){
				if(m[i]=='a'&&n[j]=='x'||m[i]=='a'&&n[j]=='y'){
					continue;
				}else if(m[i]=='c'&&n[j]=='x'||m[i]=='c'&&n[j]=='z'){
					continue;
				}else if(m[i]=='b'&&n[j]=='y'||m[i]=='b'&&n[j]=='z'){
					continue;
				}else{
					System.out.println(m[i]+" VS "+n[j]);
				}
			}
		}
	}
}

42、恒等式

/*
 * 题目:809*??=800*??+9*??    其中??代表的两位数,8*??的结果
 * 为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
 */
public class Test42 {
	public static void main(String[] args) {
		int x=0;
		for(int i=10;i<13;i++){
			x=(8*i<100&&9*i>99)?i:x;
			if(x!=0){
				String str=800+"*"+x+"="+800+"*"+x+"+"+9+"*"+x;
				System.out.println(str+"="+809*x);
			}
		}
	}
}

43、求n个数组成奇数个数

/*
 * 题目:求0—7所能组成的奇数个数。   
 * 分析:
 * 组成1位数是4个。
 * 组成2位数是7*4个。
 * 组成3位数是7*8*4个。
 * 组成4位数是7*8*8*4个。
 * ...
 */
public class Test43 {
	public static void main(String[] args) {
		int x=4,sum=0;
		System.out.println("组成1位数是:"+x);
		sum+=x;
		x*=7;
		sum+=x;
		System.out.println("组成2位数是:"+x);
		for(int i=3;i<=7;i++){//重第三位开始,每多一位就乘以8
			System.out.println("组成"+i+"位数是:"+(x*=8));
			sum+=x;
		}
		System.out.println("0—7所能组成的奇数个数为:"+sum);

	}
}

44、两个素数和表示偶数

import java.util.Scanner;
/*
 * 题目:一个偶数总能表示为两个素数之和。   
 * 分析:
 * 由于用除sqrt(n)的方法求出的素数不包括2和3,
 * 因此在判断是否是素数程序中人为添加了一个3。
 */
public class Test44 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		int x;
		do{
			System.out.println("请输入一个大于或等于6偶数");
			x=in.nextInt();
		}while(x<6||x%2!=0);	
		
		for(int i=2;i<10000;i++){
			if(getSu(i)==true&&getSu(x-i)==true){
				System.out.println(x+"="+i+"+"+(x-i));
			}
		}
	}
    /**
             * 求素数 
     * @param num传入的数 int类型
     * @return flag返回值,boolean类型,如果是素数返回true,不是返回false
     */
    public static boolean getSu(int num) {
		boolean flag = false;
		if(num==2||num==3)
			flag = true;
		for(int i=2;i<=Math.sqrt(num);i++){
			if(num%i==0){
				flag=false;
				break;
			}else{
				flag=true;
			}
		}
		return flag;
	}
}

45、判断某个数能被几个某数整除

import java.util.Scanner;
/*
 * 题目:判断一个数能被几个9整除
 */
public class Test45 {
	@SuppressWarnings("unused")
	public static void main(String[] args) {
		int t,count=0;
		boolean bl=true;
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入一个数字");
		int x=in.nextInt();
		t=x;
		//方法一
		do{
			if(x%9==0){
				x/=9;
				count++;
			}else{
				bl=false;
			}	
		}while(bl);
		x=t;
		System.out.println(x+"能被"+count+"个9整除");
		//方法二
		count=0;
		for(int i=0;x%9==0;){
			x = x/9;
	        count ++;
	    }
		x=t;
		System.out.println(x+"能被"+count+"个9整除");
	}
}

46、字符串连接

import java.util.Scanner;
/*
 * 题目:两个字符串连接程序
 */
public class Test46 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入第一个字符串:");
		String str1=in.nextLine();
		System.out.println("请输入第二个字符串:");
		String str2=in.nextLine();
		String str=str1+str2;
		System.out.println("第一个字符串为:"+str1);
		System.out.println("第二个字符串为:"+str2);
		System.out.println("连接后的字符串为:"+str);
	}
}

47、打印随机数

/*
 * 题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的(用*表示)。
 */
public class Test47 {
	public static void main(String[] args) {
		//方法一
		for(int i=0;i<7;i++){
			int num=(int)(Math.random()*50+1);
			System.out.println(num);
			for(int j=0;j<num;j++){
				System.out.print("*");
			}
			System.out.println();
		}
		//方法二
		@SuppressWarnings("resource")
		Scanner s = new Scanner(System.in);
		int n = 1, num;
		while (n <= 7) {
			do {
				System.out.print("请输入一个1--50之间的整数:");
				num = s.nextInt();
			} while (num < 1 || num > 50);
			for (int i = 1; i <= num; i++) {
				System.out.print("*");
			}
			System.out.println();
			n++;
		}
	}
}

48、加密问题

import java.util.Scanner;
/*
 * 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中
 * 是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替
 * 该数字,再将第一位和第四位交换,第二位和第三位交换。
 */
public class Test48 {
	public static void main(String[] args) {
		/*//方法一
		Scanner in=new Scanner(System.in);
		System.out.println("请输入一个四位数的整数:");
		int num1=in.nextInt();
		int one=(num1%10+5)%10;
		int two=(num1/10%10+5)%10;
		int three=(num1/100%10+5)%10;
		int four=(num1/1000+5)%10;
		int result=one*1000+two*100+three*10+four;
		System.out.println("加密前:"+num1);
		System.out.println("加密后:"+result);*/
		//方法二
		@SuppressWarnings("resource")
		Scanner s = new Scanner(System.in);
		int num2 = 0, temp;
		do {
			System.out.print("请输入一个4位正整数:");
			num2 = s.nextInt();
		} while (num2 < 1000 || num2 > 9999);
		int a[] = new int[4];
		a[0] = num2 / 1000; // 取千位的数字
		a[1] = (num2 / 100) % 10; // 取百位的数字
		a[2] = (num2 / 10) % 10; // 取十位的数字
		a[3] = num2 % 10; // 取个位的数字
		for (int j = 0; j < 4; j++) {
			a[j] += 5;
			a[j] %= 10;
		}
		for (int j = 0; j <= 1; j++) {
			temp = a[j];
			a[j] = a[3 - j];
			a[3 - j] = temp;
		}
		System.out.print("加密后的数字为:");
		for (int j = 0; j < 4; j++)
			System.out.print(a[j]);
	}
}

49、计算字符串中子串数

import java.util.Scanner;
/*
 * 题目:计算字符串中子串出现的次数
 */
public class Test49 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.println("请输入一个字符串:");
		String str=in.nextLine();
		System.out.println("请输入子串:");
		String strZ=in.nextLine();
		int count=0;
		if(str.equals("")||str.equals("")){
			System.out.println("字符串或子串为空,无法进行比较");
			System.exit(0);
		}else{
			for(int i=0;i<=str.length()-strZ.length();i++){
				//这种比法有问题,会把"aaa"看成有2个"aa"子串。
				if(strZ.equals(str.substring(i, strZ.length()+i))){
					count++;
				}
			}
			System.out.println("子串在母串中出现的次数为:"+count);
		}
	}
}

50、信息输入与写入

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.Scanner;
/*
 * 题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生
 * 号,姓名,三门课成绩),计算出平均成绩,把原有的数据和计算出的平均分数
 * 存放在磁盘文件 "stud "中。
 */
public class Test50 { 
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		String [][] strArr=new String[5][6];
		double sum=0;//总成绩
		for(int i=1;i<=5;i++){
			System.out.println("请输入第"+i+"个学生的学号");
			strArr[i-1][0]=in.nextLine();
			System.out.println("请输入第"+i+"个学生的姓名");
			strArr[i-1][1]=in.nextLine();
			for(int j=1;j<=3;j++){
				System.out.println("请输入第"+i+"个学生的第"+j+"门成绩");
				strArr[i-1][j+1]=in.nextLine();
				double d=Double.valueOf(strArr[i-1][j+1]) .doubleValue();
				sum+=d;
			}
			sum=sum/3;//平均分
			strArr[i-1][5]=""+sum;
			sum=0;
			System.out.println();
		}
		String str="学号\t"+"姓名\t"+"成绩一\t"+"成绩二\t"+"成绩三\t"+"平均分\t";
		System.out.println(str);
		for(int i=0;i<5;i++){
			for(int j=0;j<6;j++){
				System.out.print(strArr[i][j]+"\t");
			}
			System.out.println();
		}
		// 以下写磁盘文件
		String s1;
		try {
			File f = new File("E:\\stud.txt");
			if (f.exists()) {
				System.out.println("文件存在");
			} else {
				System.out.println("文件不存在,正在创建文件");
				f.createNewFile();// 不存在则创建
			}
			BufferedWriter output = new BufferedWriter(new FileWriter(f));
			for (int i = 0; i < 5; i++) {
				for (int j = 0; j < 6; j++) {
					s1 = strArr[i][j] + "\r\n";
					output.write(s1);
				}
			}
			output.close();
			System.out.println("数据已写入c盘文件stud中!");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

51、猜价格获取商品程序

import java.util.Random;
import java.util.Scanner;
/**
   * 题目: 猜价格获取商品程序
 * 
   * 知识点:
 * for有2种死亡(停止)方式
 * 1.夭折,for没有正常循环完成,而中间出现情况结束 ,i的值还是符合 for的 终点判定
 * 2.寿终正寝,for循环啦每1次,一直到 终点判定不符合,而退出。i的值不符合for的 终点判定
 * Math.random() 产生一个 0-1的double
 */
public class Test51 {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		//1.准备数据
		Scanner sc = new Scanner(System.in);
		System.out.println("猜价格游戏准备开始");
		//int num= (int)(Math.random()*101);
		Random random=new Random();
		int num=random.nextInt(1001);//商品价格
		//运算和流程处理
		int i=1;
		for(;i<=10;i++){
			System.out.println("请猜第"+i+"次:");
			int x=sc.nextInt();//接收
			if(x==num){
				System.out.println("猜对啦,商品拿回去");
				break;
			}else if(x<num){
				System.out.println("小啦,请大点。");
			}else{
				System.out.println("大啦,请小点.");
			}
		}
		if(i>10)
			System.out.println("你out啦");
		System.out.println("商品的价格为:"+num);
	}
}

52、请输出1到m内n的倍数和含有n的数字

import java.util.Scanner;
/*
 *题目: 请输出1到m内n的倍数和含有n的数字 
 *
 */
public class Test52 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		System.out.print("请输入n:");
		int n = in.nextInt();
		System.out.print("请输入m:");
		int m = in.nextInt();
		for(int i=1;i<=m ;i++) {
			if(i%n==0 || i%10==n ||i/10==n){
				System.out.println(i);
			}
		}
	}
}

53、判断回文

import java.util.Scanner;
/*
 * 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万
 * 位相同,十位与千位相同。
 */
public class Test25 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in=new Scanner(System.in);
		//方法一
		System.out.println("请输入一个5位数:");	
		int n=in.nextInt();
		int one,two,four,five;
		one=n%10;
		two=(n/10)%10;
		four=(n/1000)%10;
		five=n/10000;
		if(one==five&&two==four){
			System.out.println("这是一个回文数");
		}else{
			System.out.println("这不是一个回文数");
		}
		//方法二
		int n2;
		do{
			System.out.println("请输入一个5位数:");
		    n2=in.nextInt();
		}while(n2>99999||n2<10000);
		String str=String.valueOf(n2);
		char[] ch2=str.toCharArray();
		if(ch2[0]==ch2[4]&&ch2[1]==ch2[3]){
			System.out.println("这是一个回文数");
		}else{
			System.out.println("这不是一个回文数");
		}
		//不限位数
		boolean is=true;
		System.out.println("请输入一个正整数:");
		long a=in.nextLong();
		String s=Long.toString(a);
		char[] c=s.toCharArray();
		int k=c.length;
		for(int i=0;i<k/2;i++){
			if(c[i]!=c[k-i-1]){
				is=false;
			}			
		}
		if(is==true){
			System.out.println("这是一个回文数");
		}else{
			System.out.println("这不是一个回文数");
		}
	}
}

54、完全平方数

/*
 * 题目:一个正整数,它加上100后是一个完全平方数,再
 * 加上168又是一个完全平方数,请问该数是多少?
 */
public class Test13 {
	public static void main(String[] args){
		for(int i=1;i<10000;i++){
			if(Math.sqrt(i+100)%1==0){
				if(Math.sqrt(i+168)%1==0){
					System.out.println("该数是"+i);
				}
			}
		}
	}
}

55、循环嵌套

/**
 * 年复一年,天复一天;
 * 循环嵌套中:外围循环 1次; 内围循环N次
 */
public class Test55 {
	public static void main(String[] args) {
		for(int i=1;i<=4;i++){//4年
			System.out.println("年复一年="+i);
			for(int j=1;j<=12;j++){//外围和内围循环有包含关系。
				System.out.println("月复一月="+i+":"+j);
			}
		}
	}
}

56、数列的前n项和问题

/*
 * 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的
 * 前20项之和。
 * 分析:分子   2,3,5,8,13,21,...
 *     分母   1,2,3,5,8,13,...
 * 一、分子分母的前两项之和等于后一项(该分析用于数组)
 * 二、前一项的分子加上分母等于后一项的分子,前一项的分子等于后一项的分母(该分析用于
 * 非数组)    
 */
public class Test20 {
	public static void main(String[] args) {
		//方法一,用数组
		int[] m=new int[20];
		m[0]=2;
		m[1]=3;
		for(int i=2;i<m.length;i++){
			m[i]=m[i-1]+m[i-2];
		}
		int[] n=new int[20];
		n[0]=1;
		n[1]=2;
		for(int i=2;i<n.length;i++){
			n[i]=n[i-1]+n[i-2];
		}
		double sum=0;
		for(int i=0;i<m.length;i++){
			sum+=(double)m[i]/n[i];
		}
		System.out.println("前20项之和等于:"+sum);
		//方法二,非数组
		int x=2,y=1,t;
		double sum2=0;
		for(int i=0;i<20;i++){
			sum2=sum2+(double)x/y;
			t=y;
			y=x;
			x=y+t;
		}
		System.out.println("前20项之和等于:"+sum2);
	}
}

57、岁数问题

/*
 * 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问
 * 第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。
 * 问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问
 * 第五个人多大?
 */
public class Test23 {
	public static void main(String[] args) {
		int age=10;
		for(int i=2;i<=5;i++){
			age+=2;
		}
		System.out.println("第五个人"+age+"岁");
	}
}

58、验证码

import java.util.Arrays;
import java.util.Random;
/**
 * 验证码
 * 如何能自动生成 4位含中文, 英文 或者字母的验证码,要求:不可以重复
 */
public class Test58 {
	public static void main(String[] args) {
		char [] arrx={'a','b','c','d','e','f'};
		char [] arry=new char[4];//用于装验证码的
		Random ran=new Random();
		System.out.println(Arrays.toString(arrx));
		for(int i=0;i<arry.length;i++){
			//获取 arrx长度的下标
			int index=ran.nextInt(arrx.length-i);
			//交换数据-保存数据
			arry[i]=arrx[index];
			//交换数据-当前arrx中的index 和目前能随机的最大下标数 交换
			arrx[index]=arrx[arrx.length-1-i];
			arrx[arrx.length-1-i]=arry[i];
//			System.out.println("第"+(i+1)+"次:i="+i+" index:"+index);
//			System.out.println("当前最大的随机数:"+(arrx.length-1-i));
//			System.out.println("arrx:"+Arrays.toString(arrx));
//			System.out.println("arry:"+Arrays.toString(arry));
//			System.out.println();
		}
		System.out.println(Arrays.toString(arrx));
		System.out.println(Arrays.toString(arry));
	}
}

59、微计算器

import java.util.Scanner;
/**
 *      要求: 请输入: 数字    运算符    数字 
 *      通过运算符  char c =‘+’   c=='+'
 *      计算出  运算结果: 数字运算符数字=结果   3*5=15
 *       i+"="+num
 *      + - * / %  您的运算符还在开发中。
 */
public class Test59 {
	public static void main(String[] args) {
		//1.准备数据
		@SuppressWarnings("resource")
		Scanner sc=new Scanner(System.in);
		System.out.println("请您输入: 数字 运算符 数字");
		int x=sc.nextInt();//接受第1个数字
		char ysf=sc.next().charAt(0);//接收运算符
		int y=sc.nextInt();//接受第2个数字
		String s=""+x+ysf+y+"=";//数字运算符数字=
		//2.计算结果
		if(ysf =='+'){
//			int z=x+y;
//			s=s+z; s+=z;
			s+=x+y;
		}else if(ysf == '/'){
			if(y==0)
				s="除数不可以为零";
			else
				s+=x/y;
		}
		//........else if(){} ......
		else{
			s="您的运算符还在开发中,请联系:******";
		}
		//3.输出结果
		System.out.println(s);
	}
}

60、简单购物车

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/**
 * 要求实现: 购买商品方法  控制台输入: 商品名字  数量
 *        查询商品方法  控制台输入: 商品名字 或者是 all
 *        删除商品方法  控制台输入: 商品名字
*	要求:
* 	通过控制台输入的方式 来实现 商品的管理 
*/
public class Test60 {
	private Map<String,Integer> map;
	public Test60(){
		map=new HashMap<String,Integer>();
	}
	/**
	 * 购买商品,通过MAP进行商品的管理
	 * @param s 商品名称,也是 key
	 * @param num  商品数量 也是 vlaue
	 * @return  当前商品的总数量
	 */
	public int buy(String s, int num) {
		if(map.get(s)!=null) {
			map.put(s, map.get(s)+num);
		}else {
			map.put(s, num);
		}
		return num;
	}
	public Map<String,Integer> getList(){
		return map;
	}
	public int del(String name) {
		if(map.remove(name)==null) {
			return 0;
		}
		return 1;
	}
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		System.out.println("请您购物:商品随便写");
		Test60 t=new Test60();
		boolean bl=true;
		while(bl){
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println("1.购买商品: 商品名字 数量");
			System.out.println("2.查询商品: 商品名字  or all");
			System.out.println("3.删除商品: 商品名字");
			System.out.println("4.去结账");
			System.out.println("请您输入编号:1 or 2 or 3 or 4");
			int x=sc.nextInt();
			switch(x){
			case 1:
				System.out.println("请输入购买的   商品名字  数量:");
				String s=sc.next();
				int num=sc.nextInt();
				int buynum=t.buy(s,num);/**********/
				System.out.println("购买成功:您购买"+s+":"+buynum+"件");
				break;
			case 2:
				System.out.println("请输入商品名字  or all:");
				String name =sc.next();
				Map<String, Integer> list = t.getList();
				System.out.println("商品名字\t\t\t数量");
				if("all".equals(name)) {
					for(Map.Entry<String, Integer> m:list.entrySet()) {
						System.out.println(m.getKey()+"\t\t\t"+m.getValue());
					}
					if(list.size()==0) {
						System.out.println("您没有购买任何商品");
					}
				}else {
					boolean noHas = true;
					for(Map.Entry<String, Integer> m:list.entrySet()) {
						if(m.getKey().contains(name)) {
							noHas = false;
							System.out.println(m.getKey()+"\t\t\t"+m.getValue());
						}
					}
					if(noHas) {
						System.out.println("您没有购买这个商品");
					}
				}
				break;
			case 3:
				System.out.println("请输入要删除的商品名字 ");
				String delName=sc.next();
				if(t.del(delName)==1) {
					System.out.println("删除成功");
				}else {
					System.out.println("没有这个商品");
				}
				break;
			case 4:
				System.out.println("感谢您的使用:请微信支付");
				bl=false;
				break;
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/mr_zql/article/details/92264836