1 【程序 1 不死神兔】
题目:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月
又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
程序分析: 兔子的规律为数列 1,1,2,3,5,8,13,21....
package CountRabbit; import java.io.*; import java.util.Scanner; public class CountRabbit { /** * 不死神兔算法,使用递归 */ public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.println("Please input mouth:"); int mouth = input.nextInt(); System.out.println("第"+mouth+"个月有"+getRabbitNum(mouth)+"只兔子"); // int mouth =3; // System.out.println("第"+mouth+"个月有"+getRabbitNum(mouth)+"只兔子"); } private static int getRabbitNum(int mouth){ if(mouth==1||mouth==2){ return 1; } else return getRabbitNum(mouth-1)+getRabbitNum(mouth-2); } }
2 【程序 2 输出素数】
题目:判断 101-200 之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除,则表明此数不是素数,
反之是素数。
package FindPrimeNumber; public class FindPrimeNumber { //判断 101-200 之间有多少个素数,并输出所有素数。 public static void main(String[] args){ int count=0; //记录素数的个数 int flag; //flag为1则不是素数 int i,j; //用于for循环 System.out.println("101-200 之间的素数为:"); for(i=101;i<=200;i++){ int max = (int) Math.sqrt(i); flag=0; for(j=2;j<=max;j++){ if(i%j==0){ flag=1; break; } } if(flag==0){ System.out.println(i+" "); count++; } } System.out.println("共有"+count+"个素数"); } }
3 【程序 3 水仙花数】
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例
如: 153 是一个"水仙花数",因为 153=1 的三次方+5 的三次方+3 的三次方。
程序分析:利用 for 循环控制 100-999 个数,每个数分解出个位,十位,百位。
package NarcissisticNumber; public class NarcissisticNumber { //题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。 public static void main(String[] args){ int a,b,c; //a,b,c分别为百位,十位,个位 int sum; System.out.println("所有的\"水仙花数\"为:"); for(int i=100;i<1000;i++){ a=i/100; b=(i/10)%10; c=i%10; sum=(int)Math.pow(a,3)+(int)Math.pow(b,3)+(int)Math.pow(c,3); if(sum==i){ System.out.println(i); } } } }
4 【程序 4 分解质因数】
题目:将一个正整数分解质因数。例如:输入 90,打印出 90=2*3*3*5。
程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成:
(1)如果这个质数恰等于 n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果 n<>k,但 n 能被 k 整除,则应打印出 k 的值,并用 n 除以 k 的商,作为新的正整数 n,重复执行第一
步。
(3)如果 n 不能被 k 整除,则用 k+1 作为 k 的值,重复执行第一步。
package PrimeFactorization; import java.util.Scanner; public class PrimeFactorization { //题目:将一个正整数分解质因数。例如:输入 90,打印出 90=2*3*3*5。 public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.println("Please input integer:"); int n= input.nextInt(); int flag; String str = n+"="; if(n==1){ //输入1时特殊处理 str = str+n+"*"; } for(int i=2;i<=n;i++){ int max = (int) Math.sqrt(i); flag=0; for(int j=2;j<=max;j++){ if(i%j==0){ flag=1; break; } } if(flag==0){ //找到质数 if(n%i==0){ //该质数是n的因数 str=str+i+"*"; //字符修改 n=n/i; //修改n为除以i之后的数 i=1; //质数从2重新开始找 } } } str = str.substring(0,str.length()-1); //去掉字符串中最后一个* System.out.println(str); } }
5 【程序 5 判断分数等级】
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90 分的同学用 A 表示, 60-89 分之间的用 B 表示,
60 分以下的用 C 表示。
程序分析: (a>b)?a:b 这是条件运算符的基本例子。
package GradeLevel; import java.util.Scanner; public class GradeLevel { public static void main(String[] args){ //题目:利用条件运算符的嵌套来完成此题:学习成绩>=90 分的同学用 A 表示, 60-89 分之间的用 B 表示, //60 分以下的用 C 表示。 System.out.println("请输入同学的成绩:"); Scanner in = new Scanner(System.in); int n = in.nextInt(); char level = n>=60?(n>89?'A':'B'):'C'; System.out.println("该同学的成绩等级为:"+level); } }
6 【程序 6 求最大公约数及最小公倍数】
题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数。
程序分析:利用辗除法。
package LCMandHCF6; import java.util.Scanner; public class LCMandHCF { public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.println("请输入第一个整数:"); int A = input.nextInt(); System.out.println("请输入第二个整数:"); int B = input.nextInt(); System.out.println("最大公约数为:"+getLCM(A,B)); System.out.println("最小公倍数为:"+getHCF(A,B)); } private static int getLCM(int A,int B){ //求最大公约数,辗转相除法 int max=A>B?A:B; //得到A,B的较大值 int min=A>B?B:A; //得到A,B的较小值 int k=max%min; //余数 while(k!=0){ max=min; min=k; k=max%min; } return min; } private static int getHCF(int A,int B){ //求最小公倍数(最大公约数*最小公倍数=A*B) return A*B/getLCM(A,B); } }
7 【程序 7 处理字符串】
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析:利用 while 语句,条件为输入的字符不为'\n'.
package CountString7; import java.util.Scanner; public class CountString { public static void main(String[] args){ System.out.print("请输入一串字符:"); Scanner input = new Scanner(System.in); String str = input.nextLine(); input.close(); count(str); } private static void count(String str){ String E1 = "[\u4e00-\u9fa5]";//汉字 String E2 = "[a-zA-Z]"; String E3 = "[0-9]"; String E4 = "\\s";//空格 int countChinese = 0; int countEnglish = 0; int countNumber = 0; int countSpace = 0; int countOthers = 0; String[] s = str.split(""); //将字符串转化为字符串数组 /* char[] array_Char = str.toCharArray(); //将字符串转化为字符数组 for (int j=0;j<array_Char.length;j++){ System.out.println(array_Char[j]); }*/ for(int i=0;i<s.length;i++){ if(s[i].matches(E1)) countChinese++; else if(s[i].matches(E2)) countEnglish++; else if(s[i].matches(E3)) countNumber++; else if(s[i].matches(E4)) countSpace++; else countOthers++; } System.out.println("输入的汉字个数:"+countChinese); System.out.println("输入的字母个数:"+countEnglish); System.out.println("输入的数字个数:"+countNumber); System.out.println("输入的空格个数:"+countSpace); System.out.println("输入的其它字符个数:"+countOthers); } }
8 【程序 8 输入数字求和】
题目:求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222(此时共有 5 个
数相加),几个数相加有键盘控制。
程序分析:关键是计算出每一项的值。
package Sum8; import java.util.Scanner; public class Sum { public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.println("请输入a数字:"); int a = input.nextInt(); System.out.println("请输入相加的个数:"); int b = input.nextInt(); System.out.println("和为:"+Sum(a,b)); } private static int Sum(int a,int b){ int sum=0; for(int i=b,j=0;i>0;i--,j++){ sum=sum+i*a*(int)Math.pow(10,j); } return sum; } }
9 【程序 9 求完数】
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如 6=1+2+3.编程找出 1000 以内的
所有完数。
package PerfectNumber9; public class PerfectNumber { //题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如 6=1+2+3.编程找出 1000 以内的 //所有完数。 public static void main(String[] args){ int sum; System.out.println("1000以内的完数有:"); for(int i=2;i<=1000;i++){ //从2遍历到1000 sum=0; for(int j=1;j<i;j++){ //j从1遍历到i-1 if(i%j==0) //若j是i的因数 sum=sum+j; } if(sum==i){ //i是完数 System.out.println(i); } } } }
10 【程序 10 *落体】
题目:一球从 100 米高度*落下,每次落地后反跳回原高度的一半;再落下,求它在 第 10 次落地时,
共经过多少米?第 10 次反弹多高?
package FreeFall10; public class FreeFall { public static void main(String[] args){ //题目:一球从 100 米高度*落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时, //共经过多少米?第 10 次反弹多高? double h0=100; double sum=h0,high=0; //sum为经过的长度,high为反弹的高度 int n=10; //第n次 for(int i=1;i<n;i++){ sum=sum+h0*Math.pow(0.5,i)*2; } high=h0*Math.pow(0.5,n); System.out.println("第"+n+"次落地时共经过"+sum+"米"); System.out.println("第"+n+"次的反弹高度"+high+"米"); } }
11 【程序 11 求不重复数字】
题目:有 1、 2、 3、 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是 1、 2、 3、 4。组成所有的排列后再去 掉不满足条件的排
列。
package NoRepetitionNumber11;
public class NoRepetitionNumber {
public static void main(String[] args){
//题目:有 1、 2、 3、 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
int i,j,k; //i为百位,j为十位,k为个位
int n=4; //n为数字个数
int count=0;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
for(k=1;k<=n;k++){
if(i!=j&&i!=k&&j!=k){
count++;
System.out.println(i*100+j*10+k);
}
}
}
}
System.out.println(n+"个数字共能组成"+count+"种互不相同且无重复数字的三位数");
}
}
12 【程序 12 计算奖金】
题目:企业发放的奖金根据利润提成。利润(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%提成,从键盘输
入当月利润 I,求应发放奖金总数?
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
package CalculationBonus12; import java.util.Scanner; public class CalculationBonus { public static void main(String[] args){ //题目:企业发放的奖金根据利润提成。利润(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%提成,从键盘输 //入当月利润 I,求应发放奖金总数? System.out.println("请输入当月利润(万元):"); Scanner input = new Scanner(System.in); long n = input.nextLong(); double sum=0; if(n<=10){ sum = (n*0.1); }else if(n<=20){ sum = (10*0.1+(n-10)*0.075); }else if(n<=40){ sum = (10*0.1+10*0.075+(n-20)*0.05); }else if(n<=60){ sum = (10*0.1+10*0.075+20*0.05+(n-40)*0.03); }else if(n<=100){ sum = (10*0.1+10*0.075+20*0.05+20*0.03+(n-60)*0.015); }else{ sum = (10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(n-100)*0.01); } System.out.println("奖金为:"+sum+"万元"); } }
13 【程序 13 根据条件求数字】
题目:一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?
程序分析:在 10 万以内判断,先将该数加上 100 后再开方,再将该数加上 268 后再开方,如果开方后的结
果满足如下条件,即是结果。
package CalculateNumber13; public class CalculateNumber { public static void main(String[] args){ //题目:一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少? double m,n; for(double i=0;i<=10000;i++){ //从0遍历到10000 m = Math.sqrt(i+100); n = Math.sqrt(i+168); if((int)m==m && (int)n==n){ //若开方后的数字是整数 System.out.println(i); } } } }
14 【程序 14 求日期】
题目:输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以 3 月 5 日为例,应该先把前两个月的加起来,然后再加上 5 天即本年的第几天,特殊情况,
闰年且输入月份大于 3 时需考虑多加一天。
package CalculateDate14; import java.util.Scanner; public class CalculateDate { //题目:输入某年某月某日,判断这一天是这一年的第几天? public static void main(String[] args){ int sum=0,flag=0; Scanner input = new Scanner(System.in); System.out.println("请输入年份:"); int y = input.nextInt(); System.out.println("请输入月份:"); int m = input.nextInt(); System.out.println("请输入几号:"); int d = input.nextInt(); int[] mouth={0,31,28,31,30,31,30,31,31,30,31,30,31}; for(int i=0;i<m;i++){ //加上之前所有月份的天数 sum = sum+mouth[i]; } sum += d; //加上当月的天数 if(y%400==0 || (y%100!=0 && y%4==0)) //判断若是闰年 flag=1; if(flag==1 && m>2) //若该年是闰年且月份大于2月 sum++; System.out.println(y+"年"+m+"月"+d+"日是这一年的第"+sum+"天"); } }
15 【程序 15 排序】
题目:输入三个整数 x,y,z,请把这三个数由小到大输出。
程序分析:我们想办法把最小的数放到 x 上,先将 x 与 y 进行比较,如果 x>y 则将 x 与 y 的值进行交换,
然后再用 x 与 z 进行比较,如果 x>z 则将 x 与 z 的值进行交换,这样能使 x 最小。
package Sort15; import java.util.Scanner; public class Sort { public static void main(String[] args){ //题目:输入三个整数 x,y,z,请把这三个数由小到大输出。 System.out.println("请输入三个整数:"); Scanner input=new Scanner(System.in); int[] num =new int[3]; for (int i = 0; i < num.length; i++) { num[i]=input.nextInt(); } /* int num1,num2,num3; num1=input.nextInt(); num2=input.nextInt(); num3=input.nextInt(); System.out.println(num1+" "+num2+" "+num3); */ int temp; if(num[0]>num[1]){ temp=num[0]; num[0]=num[1]; num[1]=temp; } if(num[0]>num[2]){ temp=num[0]; num[0]=num[2]; num[2]=temp; } if(num[1]>num[2]){ temp=num[1]; num[1]=num[2]; num[2]=temp; } for (int i = 0; i < num.length; i++) { System.out.println(num[i]); } } }
16 【程序 16 输入 9*9 表】
题目:输出 9*9 口诀。
程序分析:分行与列考虑,共 9 行 9 列, i 控制行, j 控制列
package NineNineTasble16; public class NineNineTasble { //题目:输出 9*9 口诀。 public static void main(String[] args){ for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ System.out.print(j+"*"+i+"="+i*j+'\t'); } System.out.println(); } } }
17 【 程序 17 猴子吃桃问题】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又
将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想
再吃时,见只剩下一个桃子了。求第一天共摘了多少。
程序分析:采取逆向思维的方法,从后往前推断。
package MonkeyEatPeach17; public class MonkeyEatPeach { //题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又 //将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想 //再吃时,见只剩下一个桃子了。求第一天共摘了多少。 public static void main(String[] args){ int n=10; int sum=1; for(int i=1;i<n;i++){ sum = (sum+1)*2; } System.out.println("第一天共摘了"+sum+"个桃子"); } }
18 【程序 18 乒乓球赛】
题目:两个乒乓球队进行比赛,各出三人。甲队为 a,b,c 三人,乙队为 x,y,z 三人。已抽签决定比赛名单。
有人向队员打听比赛的名单。 a 说他不和 x 比, c 说他不和 x,z 比,请编程序找出三队赛手的名单。
package PingPong18; public class PingPong { //题目:两个乒乓球队进行比赛,各出三人。甲队为 a,b,c 三人,乙队为 x,y,z 三人。已抽签决定比赛名单。 //有人向队员打听比赛的名单。 a 说他不和 x 比, c 说他不和 x,z 比,请编程序找出三队赛手的名单。 public static void main(String[] args){ char i,j,k; for(i='x';i<='z';i++){ for(j='x';j<='z';j++){ for(k='x';k<='z';k++){ if(i==j||j==k||i==k||i=='x'||k=='x'||k=='z') continue; else System.out.println("Rivals of a,b,c are "+i+","+j+","+k); } } } } }
19 【程序 19 打印菱形图案】
题目:打印出如下图案(菱形)
*
***
******
********
******
***
*
程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for 循环,第一层
控制行,第二层控制列。
package PrintDiamond19; public class PrintDiamond { //题目:打印出如下图案(菱形) public static void main(String[] args){ int lay; lay = 7;//菱形的总长度 for(int i=1;i<=(lay+1)/2;i++){ //输出上半部分 for(int j=1;j<=(lay+1)/2-i;j++){ //输出空格 System.out.print(" "); } for(int k=1;k<=2*i-1;k++){ //输出* System.out.print("*"); } System.out.println(); //换行 } for(int i=(lay+1)/2+1;i<=lay;i++){ //输出下半部分 for(int j=1;j<=i-(lay+1)/2;j++){ //输出空格 System.out.print(" "); } for(int k=1;k<=lay-(i-(lay+1)/2)*2;k++){ //输出* System.out.print("*"); } System.out.println(); //换行 } } }
20 【程序 20 求前 20 项之和】
题目:有一分数序列: 2/1, 3/2, 5/3, 8/5, 13/8, 21/13...求出这个数列的前 20 项之和。
程序分析:请抓住分子与分母的变化规律。
package TopSum20; public class TopSum { //题目:有一分数序列: 2/1, 3/2, 5/3, 8/5, 13/8, 21/13...求出这个数列的前 20 项之和。 public static void main(String[] args){ int n=20; //前20项 double sum=0; //和 for(int i=1;i<=n;i++){ sum = sum + (double)fib(i+2)/fib(i+1); } System.out.print(sum); } private static int fib(int n){ //斐波那契数列 if(n==1||n==2) return 1; else return fib(n-1)+fib(n-2); } }
21 【程序 21 求阶乘】
题目:求 1+2!+3!+...+20!的和
程序分析:此程序只是把累加变成了累乘。
package Factorial21; public class Factorial { //题目:求 1+2!+3!+...+20!的和 public static void main(String[] args){ int n=20; //n个阶乘和 int sum=0,fac; //fac为阶乘,sum为总和 for(int i=1;i<=n;i++){ fac=1; for(int j=1;j<=i;j++){ fac=j*fac; } sum += fac; } System.out.println(sum); } }
22 【程序 22 递归求阶乘】
题目:利用递归方法求 5!。
程序分析:递归公式: fn=fn_1*4!
package Factorial22; public class Factorial { //题目:利用递归方法求 5!。 public static void main(String[] args){ int n=5; System.out.println(Fac(n)); } private static int Fac(int n){ if(n>0) return Fac(n-1)*n; else return 1; } }
23 【程序 23 求岁数】
题目:有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比第 3 个
人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个人大两岁。最后问第一个人,他
说是 10 岁。请问第五个人多大?
程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁
数,依次类推,推到第一人( 10 岁) ,再往回推。
package GetAge23; public class GetAge { //题目:有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比第 3 个 //人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个人大两岁。最后问第一个人,他 //说是 10 岁。请问第五个人多大? public static void main(String[] args){ int n=5; //n为第几个人 System.out.print(Age(n)); } private static int Age(int n){ if(n==1) return 10; else return Age(n-1)+2; } }
24 【程序 24 根据输入求输出】
题目:给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
package GetInToOut24; import java.util.Scanner; public class GerInToOut { //题目:给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 public static void main(String[] args){ System.out.println("请输入一个不多于5位的正整数:"); Scanner input = new Scanner(System.in); int n = input.nextInt(); System.out.println("它是"+GetBit(n)+"位数"); System.out.println("逆序为"+GetInvert(n)); } private static int GetBit(int n){ //得到n的位数 if(n/10000>0){ return 5; }else if(n/1000>0){ return 4; }else if(n/100>0){ return 3; }else if(n/10>0){ return 2; }else{ return 1; } } private static int GetInvert(int n){ //得到n的逆序 int b = GetBit(n); int out=0; if(b==1){ out=n; }else if(b==2){ out=(n%10)*10+n/10; }else if(b==3){ out=(n%10)*100+(n/10%10)*10+n/100; }else if(b==4){ out=(n%10)*1000+(n%100/10)*100+(n/100%10)*10+n/1000; }else{ out=(n%10)*10000+(n%100/10)*1000+(n/100%10)*100+(n/1000%10)*10+n/10000; } return out; } }
25 【程序 25 求回文数】
题目:一个 5 位数,判断它是不是回文数。即 12321 是回文数,个位与万位相同,十位与千位相同。
package PalindromeNumber25; import java.util.Scanner; public class PalindromeNumber { //题目:一个 5 位数,判断它是不是回文数。即 12321 是回文数,个位与万位相同,十位与千位相同。 public static void main(String[] args){ System.out.println("请输入一个5位数:"); Scanner input = new Scanner(System.in); int n = input.nextInt(); if(IsPalindrome(n)) System.out.println(n+"是一个回文数"); else System.out.println(n+"不是一个回文数"); } private static boolean IsPalindrome(int n){ if(n/10000==n%10 && (n/1000%10)==(n%100/10)) //万位=个位,千位=十位 return true; else return false; } }
26 【程序 26 求星期】
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。
程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或 if 语句判断第二个字母。
方法一:利用map
import java.util.Scanner; public class GetWeek { //题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。 public static void main(String[] args){ Map<String,String> map = new HashMap<String,String>(); map.put("m","星期一"); map.put("tu","星期二"); map.put("w","星期三"); map.put("th","星期四"); map.put("f","星期五"); map.put("sa","星期六"); map.put("su","星期日"); Scanner input = new Scanner(System.in); System.out.println("请输入星期几第一个字母:"); String str= input.next(); //方法二 if(map.get(str)==null){ System.out.println("目前无法判断,请输入第二个字母:"); str= str + input.next(); if(map.get(str)==null){ System.out.println("输入字母匹配不到任意天,请检查。"); }else System.out.println(map.get(str)); }else System.out.println(map.get(str)); }
package GetWeek26; import java.io.IOException; import java.util.Scanner; public class GetWeek { //题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。 public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.println("请输入星期几第一个字母:"); String str= input.next(); char a = str.charAt(0); /* char a=' '; try{ a = (char)System.in.read(); }catch (IOException e){} */ if(a=='M'||a=='m'){ System.out.println("星期一"); }else if(a=='W'||a=='w'){ System.out.println("星期三"); }else if(a=='F'||a=='f'){ System.out.println("星期五"); }else if(a=='T'||a=='t'||a=='S'||a=='s'){ System.out.println("目前无法判断,请输入第二个字母:"); String str1= input.next(); char b= str1.charAt(0); /* char b=' '; try{ b = (char)System.in.read(); }catch (IOException e){} */ if(a=='T'||a=='t'){ if(b=='U'||b=='u'){ System.out.println("星期二"); }else if(b=='H'||b=='h'){ System.out.println("星期四"); }else{ System.out.println("输入字母匹配不到任意天,请检查。"); } } if(a=='S'||a=='s'){ if(b=='U'||b=='u'){ System.out.println("星期日"); }else if(b=='A'||b=='a'){ System.out.println("星期六"); }else{ System.out.println("输入字母匹配不到任意天,请检查。"); } } }else{ System.out.println("输入字母匹配不到任意天,请检查。"); } } }
其中注释部分写法有问题,无法正确读入b。原因是b会读入第一次敲得的回车导致结果出错。不知如何解决?
27 【程序 27 求素数】
题目:求 100 之内的素数
package FindPrimeNumber27; public class FindPrimeNumber { //并输出100以内所有素数。 public static void main(String[] args){ int count=0; //记录素数的个数 int flag; //flag为1则不是素数 int i,j; //用于for循环 System.out.println("100以内的素数为:"); for(i=2;i<=100;i++){ int max = (int) Math.sqrt(i); flag=0; for(j=2;j<=max;j++){ if(i%j==0){ flag=1; break; } } if(flag==0){ System.out.print(i+" "); count++; } } System.out.println("共有"+count+"个素数"); } }
28 【程序 28 排序算法】
题目:对 10 个数进行排序
程序分析:可以利用选择法,即从后 9 个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即
用第二个元素与后 8 个进行比较,并进行交换。
package SelectSort28; import java.util.Scanner; public class SelectSort { //题目:对 10 个数进行排序(选择排序) public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.println("请输入10个数"); int[] n = new int[10]; for(int i=0;i<n.length;i++){ //读入10个数 n[i] = input.nextInt(); } int min,p=0,temp; //min记录每趟最小的值,p记录最小值下表,temp用于交换 for(int j=0;j<n.length-1;j++){ //循环n-1次 min=n[j]; for(int k=j+1;k<n.length;k++){ //从j+1开始遍历寻找最小值 if(n[k]<min){ min=n[k]; p=k; } } if(p>j){ //存在n[j]后的数比它小,则交换两者 temp=n[j]; n[j]=n[p]; n[p]=temp; p=0; } } for(int i=0;i<n.length;i++){ //输出10个数 System.out.print(n[i]+" "); } } }
29 【程序 29 求矩阵对角线之和】
题目:求一个 3*3 矩阵对角线元素之和
程序分析:利用双重 for 循环控制输入二维数组,再将 a[i][i]累加后输出。
package RectangleMatrix29; import java.util.Scanner; public class RectangleMatrix { //题目:求一个 3*3 矩阵对角线元素之和 public static void main(String[] args){ System.out.println("请输入一个 3*3 矩阵(行优先)"); Scanner input = new Scanner(System.in); int[][] n = new int[3][3]; for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ n[i][j] = input.nextInt(); } } int sum=0; for(int k=0;k<3;k++){ sum += n[k][k]; } System.out.println("该矩阵对角线元素之和为:"+sum); } }
30 【程序 30 插入数字】
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,
依次后移一个位置。
package InsertNumber30; import java.util.ArrayList; import java.util.Scanner; public class InsertNumber { //题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。(递增) public static void main(String[] args){ ArrayList List = new ArrayList(); // add()是添加一个新的元素, remove()删除一个元素, size()获得ArrayList的长度。 for(int i=0;i<10;i++){ //初始化数组 List.add(i); } System.out.println("初始数组为"+List); System.out.println("请输入一个数:"); Scanner input = new Scanner(System.in); int n = input.nextInt(); int length=List.size(); // if(n>= (int) List.get(length-1)){ // List.add(n); // } for(int j=length-1;j>=0;j--){ if(n < (int) List.get(j)) continue; else{ List.add(j+1,n); break; } } System.out.println("插入"+n+"后数组为"+List); } }
31 【程序 31 数组逆序】
题目:将一个数组逆序输出。
程序分析:用第一个与最后一个交换。
package InvertedSequence31; public class InvertedSequence { //题目:将一个数组逆序输出。 public static void main(String[] args) { int lengh=10; int[] n = new int[lengh]; System.out.print("原数组为:"); for(int i=0,j=0;j<lengh;i+=2,j++){ //初始化数组 n[j]=i; System.out.print(n[j]+" "); } int temp; for(int k=0;k<=(n.length-1)/2;k++){ //交换前后两值 temp = n[k]; n[k] = n[n.length-1-k]; n[n.length-1-k] = temp; } System.out.println(); System.out.print("逆序数组为:"); for(int j=0;j<n.length;j++){ System.out.print(n[j]+" "); //输出数组 } } }
32 【程序 32 左移右移】
题目:取一个整数 a 从右端开始的 4~7 位。
程序分析:可以这样考虑:
(1)先使 a 右移 4 位。
(2)设置一个低 4 位全为 1,其余全为 0 的数。可用~(~0<<4)
(3)将上面二者进行&运算。
package LMoveRMove32; import java.util.Scanner; public class LMoveRMove { //题目:取一个整数 a 从右端开始的 4~7 位。 public static void main(String[] args){ System.out.println("请输入一个不小于7位的数:"); Scanner input = new Scanner(System.in); long a = input.nextLong(); //读入a String str = Long.toString(a); //转换成String char[] n = str.toCharArray(); //转换成char数组 int i = n.length; if(i<7){ System.out.println("输入错误!"); }else{ for(int j=3;j>=0;j--) System.out.print(n[i-j-4]); } } }
33 【程序 33 杨辉三角】
题目:打印出杨辉三角形(要求打印出 10 行如下图)
程序分析:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
package YangHuiTriangle33; public class YangHuiTriangle { //题目:打印出杨辉三角形(要求打印出 10 行如下图) public static void main(String[] args){ int n=10; int[][] HY= new int[n][n]; for(int i=0;i<n;i++){ //将杨辉三角存入HY二维数组 for(int j=0;j<=i;j++){ if(j==0){ HY[i][j]=1; //第一列的值均为1 }else{ HY[i][j]=HY[i-1][j]+HY[i-1][j-1]; //每一个值均为上一行同一列的值+上一行左一列的值 } } } for(int i=0;i<n;i++){ //输出杨辉三角 for(int j=1 ;j<n-i;j++){ System.out.print(" "); } for(int k=0;k<n;k++){ if(HY[i][k]>0){ System.out.print(HY[i][k]+" "); } } System.out.println(); } } }
34 【程序 34 三个数排序】
题目:输入 3 个数 a,b,c,按大小顺序输出。
程序分析:利用指针方法。
package Sort34; import java.util.Scanner; public class Sort { //题目:输入 3 个数 a,b,c,按大小顺序输出。 public static void main(String[] args){ System.out.println("请输入三个整数:"); Scanner input=new Scanner(System.in); int a = input.nextInt(); int b = input.nextInt(); int c = input.nextInt(); int max=a>b?(a>c?a:c):(b>c?b:c); int medium=a>b?(a<c?a:c):(b<c?b:c); int min=a<b?(a<c?a:c):(b<c?b:c); System.out.print(max+" "+medium+" "+min); } }
35 【程序 35 最大最小交换】
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
package ChangeMaxMin35; import java.util.Scanner; public class ChangeMaxMin { //题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 public static void main(String[] args){ //读入一个不确定长度的一维数组 System.out.println("请输入一个数组:"); Scanner input = new Scanner(System.in); String str = input.nextLine(); //读入一行string String[] s = str.split("\\s"); //根据空格进行分割 int[] n = new int[s.length]; for(int i=0;i<n.length;i++){ n[i] = Integer.parseInt(s[i]); //将string转为int型 } int max=0,min=0; //记录最大值和最小值得下标 for(int j=0;j<n.length;j++){ //遍历数组,找到最大值和最小值下标 if(n[j]>n[max]){ max=j; } if(n[j]<n[min]){ min=j; } } int temp; //交换时,注意最大最小值出现在两端的情况 if(max>0){ //若最大值不是第一个,则交换 temp=n[0]; n[0]=n[max]; n[max]=temp; } if(min==0){ //若最小值是第一个值,则需更新min值,因为最大值已经与第一个值交换。 min=max; } if(min<n.length-1){ //若最小值不是最后一个,则交换 temp=n[n.length-1]; n[n.length-1]=n[min]; n[min]=temp; } for(int i=0;i<n.length;i++){ //输出交换后的数组 System.out.print(n[i]+" "); } } }
36 【程序 36 移动位置】
题目:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数
package MoveNumber36; import java.util.Scanner; public class MoveNumber { //题目:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数 public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.println("请输入若干个整数:"); String str = input.nextLine(); String[] s = str.split("\\s"); int n = s.length; int[] arr = new int[n]; for(int i=0;i<n;i++){ arr[i] = Integer.parseInt(s[i]); } System.out.println("请输入移动的位数:"); int m = input.nextInt(); if(m>n){ System.out.println("移动的位数过大超过数组长度!"); } //辅助数组b,将数组arr的前n-m为存入b中 int[] b = new int[n-m]; for(int j=0;j<n-m;j++){ b[j] = arr[j]; } for(int k=0;k<m;k++){ //后m位数字前移 arr[k]=arr[k+n-m]; } for(int p=0;p<n-m;p++){ //前n-m位从b中移回arr中 arr[p+m]=b[p]; } for(int i=0;i<n;i++){ //输出移动后的数组 System.out.print(arr[i]+" "); } } }
37 【程序 37 报数】
题目:有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,
问最后留下的是原来第几号的那位。
package CountOff37; import java.util.ArrayList; import java.util.Scanner; public class CountOff { //题目:有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子, //问最后留下的是原来第几号的那位。 public static void main(String[] args){ System.out.println("请输入人数:"); Scanner input = new Scanner(System.in); int n = input.nextInt(); ArrayList list= new ArrayList(); //定义动态数组 for(int i=1;i<=n;i++){ //将号码存入动态数组list list.add(i); } System.out.println("初始编号为:"+list); int length=list.size(); for(int i=1,j=0;length>1;i++,j=(j+1)%length){ //i从1-3循环计数,j为动态数组的下标,同步从0一直增加 if(i==3){ //数到3时,移除对应的人,同时从1重新数。 list.remove(j); length = list.size(); i=1; } } System.out.println("最后剩下的人是"+list.get(0)); } }
38 【程序 38 求字符串长度】
题目:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度。
package LengthOfString38; import java.util.Scanner; public class LengthOfString { //题目:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度。 public static void main(String[] args){ System.out.println("请输入一个字符串"); Scanner input = new Scanner(System.in); String str = input.nextLine(); System.out.println("该字符串的长度为"+getLength(str)); } private static int getLength(String str){ return str.length(); } }
39 【程序 39 分数累加】
题目:编写一个函数,输入 n 为偶数时,调用函数求 1/2+1/4+...+1/n,当输入 n 为奇数时,调用函数
1/1+1/3+...+1/n
package SumOfFraction39; import java.util.Scanner; public class SumOfFraction { //题目:编写一个函数,输入 n 为偶数时,调用函数求 1/2+1/4+...+1/n,当输入 n 为奇数时,调用函数 //1/1+1/3+...+1/n public static void main(String[] args){ System.out.print("请输入n:"); Scanner input = new Scanner(System.in); double n = input.nextDouble(); System.out.print("分数之和为:"); if(n%2==0){ //n为偶数 System.out.println(even(n)); }else{ //n为奇数 System.out.println(odd(n)); } } private static double even(double n){ double sum = 0; for(double i=2;i<=n;i+=2){ sum += 1/i; } return sum; } private static double odd(double n){ double sum = 0; for(double i=1;i<=n;i+=2){ sum += 1/i; } return sum; } }
40 【程序 40 字符串排序】
题目:字符串排序。
package SortOfString40; import java.util.Scanner; public class SortOfString { //题目:字符串排序。 public static void main(String[] args) { System.out.print("请输入一个字符串:"); Scanner input = new Scanner(System.in); String str = input.nextLine(); System.out.println("排序后的字符串为:"+sort(str)); } private static String sort(String str){ char[] c = str.toCharArray(); int L =c.length; //采用冒泡排序 boolean flag; char temp; for(int i=0;i<L-1;i++){ flag=false; for(int j=L-1;j>0;j--){ if(c[j-1]>c[j]){ temp=c[j]; c[j]=c[j-1]; c[j-1]=temp; flag=true; } } if(flag==false){ break; } } //再次将字符数组转换为字符串,也可以直接利用String.valueOf(c)转换 String str1 = new String(c); return str1; // String str2 = String.valueOf(c); // return str2; } }
41 【程序 41 猴子分桃】
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把
多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的
一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
package MonkeySplitPeach40; public class MonkeySplitPeach { //题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把 //多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的 //一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? public static void main(String[] args) { int n=5; //总共5只猴子 int i; //用于for循环 int x; //最后一个猴子分到的数目 double sum; //每一轮分配前的数目 for(x=1;;x++){ //x为最后一个猴子分到的数量,从1开始遍历 sum = 5*x+1; //最后一只猴子分配前的总数 for(i=1;i<n;i++){ sum = (5.0/4.0)*sum+1; //上一轮分配前的总数 if((int)sum != sum){ //若该数不是整数 i=1; break; } } if(i==n) break; } System.out.println("最后一个猴子分到的数目:"+x); System.out.println("海滩上原来最少有"+(int)sum+"个桃子"); } }
42 【程序 42 求数字】
题目: 809*??=800*??+9*??+1
其中??代表的两位数,8*??的结果为两位数, 9*??的结果为 3 位数。求??代表的两位数,及 809*??后的结
果。
package FindNumber42; public class FindNumber { //题目: 809*??=800*??+9*??+1 public static void main(String[] args) { int x=0,i; boolean flag=false; for(i=10;i<100;i++){ if(8*i<100 && 9*i>99 ){ if(809*i==800*i+9*i+1){ x=i; flag=true; break; } } } if (flag){ System.out.println("??是"+x); System.out.println("809*??="+809*x); }else{ System.out.println("无解"); } } }
疑问:这个等式显然无解。
43 【程序 43 求奇数个数】
题目:求 0—7 所能组成的奇数个数。
package OddNumber43; public class OddNumber { //题目:求 0—7 所能组成的奇数个数。 public static void main(String[] args) { sum1(8); sum2(8); } private static void sum1(int n){ //可重复 int sum = 0,total = 0; for(int i=1; i<=n; i++){ //最大位数为8位 //4*7*8*8*8*8*8*8 if(i == 1 ){ total = 4; // 1,3,5,7 }else if(i ==2){ total = total*7; }else{ total *= 8; } System.out.println("0~7组成" + i + "位数,有:" + total + "个"); sum += total; } System.out.println("总计为:" + sum); } private static void sum2(int n){ //不可重复 int sum = 0,total = 0; for(int i=1; i<=n; i++){ //最大位数为8位 //4*6*6*5*4*3*2*1 if(i == 1 ){ total = 4; // 1,3,5,7 }else if(i ==2){ total = total*6; }else{ total *= (n+1-i); } System.out.println("0~7组成" + i + "位数,有:" + total + "个"); sum += total; } System.out.println("总计为:" + sum); } }
疑问:不是很懂题目意思??
44 【程序 44 偶数的素数和】
题目:一个偶数总能表示为两个素数之和。
package EvenEqualSumOfPrime44; import java.util.Scanner; import java.util.ArrayList; public class EvenEqualSumOfPrime { //题目:一个偶数总能表示为两个素数之和。 public static void main(String[] args) { System.out.print("请输入一个偶数:"); Scanner input = new Scanner(System.in); int n = input.nextInt(); //用动态数组x,y记录分解的素数,因为有多种可能 ArrayList x = new ArrayList(); ArrayList y = new ArrayList(); for(int i=2;i<=n/2;i++){ if(IsPrime(i)){ int j=n-i; if(IsPrime(j)){ //符合条件则加入数组x,y; x.add(i); y.add(j); } } } for(int k=0;k<x.size();k++){ //输出结果 System.out.println(n+"="+x.get(k)+"+"+y.get(k)); } } private static boolean IsPrime(int n){ //判断n是否是素数 int max = (int) Math.sqrt(n); int flag=0; for(int j=2;j<=max;j++){ if(n%j==0){ flag=1; break; } } if(flag==0){ return true; } return false; } }
45 【程序 45 被 9 整除】
题目:判断一个素数能被几个 9 整除
package DivideByNine45; import java.util.Scanner; public class DivideByNine { public static void main(String[] args) { System.out.print("请输入一个素数:"); Scanner input = new Scanner(System.in); int n = input.nextInt(); if(IsPrime(n)==false){ System.out.println("您输入的数不是素数,请重新输入"); }else{ if(count(n)==0){ System.out.println(n+"不能被9整除"); }else{ System.out.println(n+"能被"+count(n)+"个9整除"); } } } private static boolean IsPrime(int n){ //判断n是否是素数 int max = (int) Math.sqrt(n); int flag=0; for(int j=2;j<=max;j++){ if(n%j==0){ flag=1; break; } } if(flag==0){ return true; } return false; } private static int count(int n){ //被9整除的个数 int count=0; while(n%9==0){ n=n/9; count++; } return count; } }
疑问:素数怎么可能被9整除??
46 【程序 46 字符串连接】
题目:两个字符串连接程序
package ConnectTwoString46; import java.util.Scanner; public class ConnectTwoString { //题目:两个字符串连接程序 public static void main(String[] args) { System.out.println("请输入两个字符串:"); Scanner input = new Scanner(System.in); //读入两个字符串 String str1 = input.nextLine(); String str2 = input.nextLine(); //字符串转换为字符数组 char[] c1 = str1.toCharArray(); char[] c2 = str2.toCharArray(); char[] c = new char[c1.length+c2.length]; //用于存放连接的字符数组 for(int i=0;i<c1.length;i++){ c[i]=c1[i]; } for(int j=0;j<c2.length;j++){ c[j+c1.length]=c2[j]; } //将连接后的新字符数组转换成字符串,输出 String str = new String(c); System.out.println("连接后的字符串为:"+str); } }
47 【程序 47 打印星号】
题目:读取 7 个数( 1—50)的整数值,每读取一个值,程序打印出该值个数的*。
package PrintStar47; import java.util.Scanner; public class PrintStar { //题目:读取 7 个数( 1—50)的整数值,每读取一个值,程序打印出该值个数的*。 public static void main(String[] args) { System.out.println("请输入七个(1--50)整数:"); Scanner input = new Scanner(System.in); int n; for(int i=0;i<7;i++){ n = input.nextInt(); for(int j=0;j<n;j++){ System.out.print("*"); } System.out.println(); } } }
48 【程序 48 加密】
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密
规则如下:每位数字都加上 5,然后用和除以 10 的余数代替该数字,再将第一位和第四位交
换,第二位和第三位交换。
package Encryption48; import java.util.Scanner; public class Encryption { //题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密 //规则如下:每位数字都加上 5,然后用和除以 10 的余数代替该数字,再将第一位和第四位交 //换,第二位和第三位交换。 public static void main(String[] args) { System.out.println("请要传递的四位整数:"); Scanner input = new Scanner(System.in); int n = input.nextInt(); int[] a = {n/1000,n/100%10,n%100/10,n%100}; //将n的各位存入a数组 for(int i=0;i<a.length;i++){ //加密 a[i] = (a[i]+5)%10; } //交换一四位,二三位 int temp; temp=a[0]; a[0]=a[3]; a[3]=temp; temp=a[1]; a[1]=a[2]; a[2]=temp; //输出加密后的数字 System.out.print("加密后的数字为"); //int n1=0; for(int j=0;j<a.length;j++){ //n1 = n1 + a[j]*(int)Math.pow(10,a.length-1-j); System.out.print(a[j]); } //System.out.println(n1); } }
49 【程序 49 子串出现的个数】
题目:计算字符串中子串出现的次数
package SubstringNumber49; import java.util.Scanner; public class SubstringNumber { //题目:计算字符串中子串出现的次数 public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入一个整串:"); String str1= input.nextLine(); System.out.println("请输入一个子串:"); String str2= input.nextLine(); System.out.println("字符串中子串出现的次数为:"+count(str1,str2)); System.out.println("字符串中子串出现的次数为:"+count2(str1,str2)); } //方法一:采用split private static int count(String str1,String str2){ //str1为整串,str2位子串 str1 = " "+str1+" "; //母串两端补空格,防止子串出现在两端时计数出错。 String[] c = str1.split(str2); return c.length-1; } //方法二:利用indexOf private static int count2(String str1,String str2){ //str1为整串,str2位子串 int count=0; int d=0; if(str1.contains(str2)==false){ count=0; }else{ while((d=str1.indexOf(str2,d))!=-1){ //匹配到子串 str1 = str1.substring(d+str2.length()); //得到匹配子串位置后面的字符串 count++; } } return count; } }
50 【程序 50 文件 IO】
题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),
计算出平均成绩, 将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
package FileIO50; import java.io.*; public class FileIO { //题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩), //计算出平均成绩, 将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。 //定义学生模型 String[] number = new String[5]; String[] name = new String[5]; float[][] grade = new float[5][3]; float[] sum = new float[5]; public static void main(String[] args) { FileIO stud = new FileIO(); try { stud.input(); stud.output(); }catch(IOException e){} } //输入学号、姓名、成绩 void input() throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try{ for(int i=0;i<5;i++){ System.out.print("请输入学号:"); number[i] = br.readLine(); System.out.print("请输入姓名:"); name[i] = br.readLine(); for(int j=0;j<3;j++){ System.out.print("请输入第"+(j+1)+"门课成绩:"); grade[i][j] = Integer.parseInt(br.readLine()); } System.out.println(); sum[i] = grade[i][0]+grade[i][1]+grade[i][2]; } }catch(NumberFormatException e){ System.out.println("请输入一个数字!"); } } //输出文件 void output() throws IOException{ FileWriter fw = new FileWriter("stud.txt"); BufferedWriter bw = new BufferedWriter(fw); bw.write("学号"+"\t"+"姓名"+"\t"+"成绩1"+"\t"+"成绩2 "+"\t"+"成绩3 "+"\t"+"平均成绩"); bw.newLine(); for(int i=0;i<5;i++){ bw.write(number[i]+"\t"); bw.write(" "+name[i]+"\t"); for(int j=0;j<3;j++) bw.write(" "+grade[i][j]+"\t"); bw.write(" "+(sum[i]/3)+"\t"); bw.newLine(); } bw.close(); } }
}