目录
4.2 第二种:通过if来设置范围并用设置变量(记号)用来表示,再使用switch来输出(繁琐版)
8.判断100-200之间有多少个素数,并输出所有素数。所谓素数表示该数只能被1和本身整除
10.百元买百鸡问题:公鸡每只5元,母鸡每只3元,小鸡每3只1元;
11. 循环输入字符串,将这些输入的字符串都连接起来,直到输入的字符串为“esc”就结束循环,最后显示这个连接起来的字符串。提示"" 不区分大小写 退出的位置问题
13.定义一个长度为5的字符串数组。循环输入5个姓名。然后再输入一个用户的姓名,检查数组中是否有这个人的姓名,并输出所在下标。
14.定义一个长度为10的整型数组,并且为其赋值,将其奇数位的数值与偶数位的数值进行交换;并将其用foreach输出
17. (挑战题)定义一个长度为10的整型数组,循环输入10个整数。然后判断这个数组中有几个偶数,再定义一个正好能存放这几个偶数的数组,将上一个数组中的所有偶数复制过来。最后循环输出这些偶数。
一、利用Java语法案例实现(综合提升)
1.题目要求:与电脑猜拳游戏(判断胜负)
1.1 第一种方式(if嵌套):
//第一种方式:
//电脑(1 2 3)石头 剪刀 布
Random rd = new Random();
//电脑随机产生一个1-3之间的数字 分别代表石头 剪刀 布
int dn = rd.nextInt(3)+1;//1-3
//通过扫描器让用户输入指定的数字(1-3)
Scanner sc = new Scanner(System.in);
System.out.println("请出拳(1.石头 2.剪刀 3.布)");
int yh = sc.nextInt();
//判断
if(yh == 1) {//用户输入的是1 1代表石头
//电脑3种情况
if(dn == 1) {
System.out.println("用户出的是1(石头),电脑出的是1(石头),结果:平局");
}else if(dn == 2) {
System.out.println("用户出的是1(石头),电脑出的是2(剪刀),结果:用户赢");
}else if(dn == 3) {
System.out.println("用户出的是1(石头),电脑出的是3(布),结果:电脑赢");
}
}else if(yh == 2) {
//电脑3种情况
if(dn == 1) {
System.out.println("用户出的是2(剪刀),电脑出的是1(石头),结果:电脑赢");
}else if(dn == 2) {
System.out.println("用户出的是2(剪刀),电脑出的是2(剪刀),结果:平局");
}else if(dn == 3) {
System.out.println("用户出的是2(剪刀),电脑出的是3(布),结果:用户赢");
}
}else if(yh == 3) {
//电脑3种情况
if(dn == 1) {
System.out.println("用户出的是3(布),电脑出的是1(石头),结果:用户赢");
}else if(dn == 2) {
System.out.println("用户出的是3(布),电脑出的是2(剪刀),结果:用电脑赢");
}else if(dn == 3) {
System.out.println("用户出的是3(布),电脑出的是3(布),结果:平局");
}
}else {
System.out.println("出拳失败,不符合要求~请重新运行程序进行猜拳");
总结:采用了if嵌套,主要思路是分析所有的结果,整理逻辑,套用合适的结构即可。
1.2 第二种方式(switch与if结合):
//第二种方式:
一把出拳游戏,跟电脑猜拳(switch)
//Scanner Random的结合使用 用户:Scanner 电脑:Random
Random rd = new Random();
int dn = rd.nextInt(3);// 0 1 2
// 用户输入
Scanner sc = new Scanner(System.in);
System.out.println("请出拳:(0-石头 1-剪刀 2-布)");
int yh = sc.nextInt();
if (yh >= 0 && yh <= 2) {
switch (yh) {
case 0:
if (dn == 0) {
System.out.println("用户出得是石头(0),电脑出得是石头(0),即平局");
} else if (dn == 1) {
System.out.println("用户出得是石头(0),电脑出得是剪刀(1),即用户赢");
} else {
System.out.println("用户出得是石头(0),电脑出得是布(2),即电脑赢");
} // 最后是否还需要使用else if==>不需要 随机器所产生的数字是固定范围
// 中断程序
break;
case 1:
if (dn == 0) {
System.out.println("用户出得是剪刀(1),电脑出得是石头(0),即电脑赢");
} else if (dn == 1) {
System.out.println("用户出得是剪刀(1),电脑出得是剪刀(1),即平局");
} else {
System.out.println("用户出得是剪刀(1),电脑出得是布(2),即用户赢");
} // 最后是否还需要使用else if==>不需要 随机器所产生的数字是固定范围
// 中断程序
break;
case 2:
if (dn == 0) {
System.out.println("用户出得是布(2),电脑出得是石头(0),即用户赢");
} else if (dn == 1) {
System.out.println("用户出得是布(2),电脑出得是剪刀(1),即电脑赢");
} else {
System.out.println("用户出得是布(2),电脑出得是石头(2),即平局");
} // 最后是否还需要使用else if==>不需要 随机器所产生的数字是固定范围
// 中断程序
break;
}
} else {
System.out.println("您的出拳不符合要求~请重新运行后再次出拳进行比赛。");
}
总结:以用户为第一视角利用switch结构和if结构,分别分析用户不同的出拳结果情况所对应的电脑出拳情况,进行相对应的结论判定。条件语句有两种:if switch。
2. 题目要求:编写一个程序,要求用户输入今天星期几(int),根据用户的输入判断是工作日还是周末,并显示合适的问候语。如果输入的数字不在1~7之间,显示“日子过懵了吧?”,如果输入数字为6或7, 显示“周末愉快”,如果输入数字1-5,显示“工作日愉快”
Scanner sc = new Scanner(System.in);
System.out.println("请输入今天星期几: ");
String week = sc.nextLine();
// 学习了逻辑运算符 && || !
if ("星期一".equals(week) || "星期二".equals(week) || "星期三".equals(week) || "星期四".equals(week)
|| "星期五".equals(week)) {
System.out.println("工作日愉快");
} else if ("星期六".equals(week) || "星期日".equals(week)) {
System.out.println("周末愉快");
} else {
System.out.println("日子过懵了吧~");
}
总结:采用String类型存储中文符号,利用if结构,再利用条件运算符的equals。
3.题目要求:系统界面
// 利用if语句结构开发系统选择界面
// (1代表算加法 2代表算减法 3代表算乘法 4代表算求整 5计算闰年 6代表猜数字游戏)
System.out.println("******** 欢迎进入276小网站系统 ***********\n");
System.out.println("************功能1:加法运算 ************");
System.out.println("************功能2:减法运算 ************");
System.out.println("************功能3:乘法运算 ************");
System.out.println("************功能4:求整运算 ************");
System.out.println("************功能5:闰年运算 ************");
System.out.println("************功能6:猜数字游戏***********");
System.out.println("选项(1-6)代表不同的程序功能,请进行选择操作");
// 立刻要使用扫描器进行输入不同的数字去选择不同的功能了~
Scanner sc = new Scanner(System.in);
System.out.println("请您进行选择功能:(1-6)");
int num = sc.nextInt();// 有没有必要判断num是否在1-6之间。
if (num >= 1 && num <= 6) {
// 满足该条件后才能使用该网站上的功能
if (num == 1) {
System.out.println("***-_-您选择的是加法运算功能-_-***");
System.out.println("请输入第一个数字: ");
int a1 = sc.nextInt();
System.out.println("请输入第二个数字: ");
int b1 = sc.nextInt();
int c1 = a1 + b1;
System.out.println("通过加法运算功能得到2个数字的和为: " + c1);
} else if (num == 2) {
System.out.println("***-_-您选择的是减法运算功能-_-***");
System.out.println("请输入第一个数字: ");
int a2 = sc.nextInt();
System.out.println("请输入第二个数字: ");
int b2 = sc.nextInt();
int c2 = a2 - b2;
System.out.println("通过减法运算功能得到2个数字的差为: " + c2);
} else if (num == 3) {
System.out.println("***-_-您选择的是乘法运算功能-_-***");
System.out.println("请输入第一个数字: ");
int a3 = sc.nextInt();
System.out.println("请输入第二个数字: ");
int b3 = sc.nextInt();
int c3 = a3 * b3;
System.out.println("通过乘法运算功能得到2个数字的积为: " + c3);
} else if (num == 4) {
System.out.println("***-_-您选择的是求整运算功能-_-***");
System.out.println("请输入第一个数字: ");
int a4 = sc.nextInt();
System.out.println("请输入第二个数字: ");
int b4 = sc.nextInt();
int c4 = a4 / b4;
System.out.println("通过求整运算功能得到2个数字的商为: " + c4);
} else if (num == 5) {
System.out.println("***-_-您选择的是闰年运算功能-_-***");
System.out.println("请输入一个年份: ");
int year = sc.nextInt();
// 求闰年的标准:4年一闰 百年不闰 四百年一闰
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
System.out.println(year + "年是闰年");
} else {
System.out.println(year + "年是平年");
}
} else if (num == 6) {
System.out.println("***-_-您选择的是猜数字游戏运算功能-_-***");
// 通过随机数产生一个指定范围的数字
Random rd = new Random();
int sj = rd.nextInt(10) + 1;
System.out.println("请输入一个1-10之间的数字进行猜测: ");
int yh = sc.nextInt();
if (yh >= 1 && yh <= 10) {
if (yh == sj) {
System.out.println("恭喜中奖500万");
} else {
System.out.println("很遗憾~未中奖;电脑产生的数字是: " + sj);
}
} else {
System.out.println("您输入的数字超出范围~请重新运行程序进行猜测");
}
}
} else {
System.out.println("该选项功能尚未开发~敬请期待!!!");
}
总结:创建输入器Scanner去接收数据,然后通过if来进行判断,if结构输出条件,在条件内可以再输出其它的运算逻辑。也可以用swicth结构。
4.输入一个成绩,根据不同的条件来判断等级
4.1 第一种方式if与switch的结合(简洁版):
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个成绩: ");
int s = sc.nextInt();
if (s >= 0 && s <= 100) {
switch (s / 10) {
// 输出100 10
case 10:
case 9:
System.out.println("等级A");
break;
case 8:
case 7:
System.out.println("等级B");
break;
case 6:
System.out.println("等级C");
break;
case 5:
default:
System.out.println("等级D");
break;
}
}else{ System.out.println("输入数据错误,请重新输入!");
}
4.2 第二种:通过if来设置范围并用设置变量(记号)用来表示,再使用switch来输出(繁琐版)
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个成绩: ");
int s = sc.nextInt();
if (s >= 0 && s <= 100) {
// 通过标记(记号)去实现。 一个人去原始森林 怕迷路 在树上画一个记号。
int sb = 0;// 定义一个变量保存每一个区间的记号(1.90-100 2.70-90 3.60-70 4.60一下)
if (s >= 90) {
sb = 1;// 1---90-100之间的任意一个数字
} else if (s >= 70) {
sb = 2;
} else if (s >= 60) {
sb = 3;
} else {
sb = 4;
}
// 判断记号就可以知道输入的成绩是处于哪一个区间范围
switch (sb) {
case 1:
System.out.println("等级A");
break;
case 2:
System.out.println("等级B");
break;
case 3:
System.out.println("等级C");
break;
case 4:
System.out.println("等级D");
break;
}
} else {
System.out.println("您录入的成绩不符合要求,请重新运行程序进行录入~");
}
总结:利用if和switch结构的穿透性优化代码。
5. 求1~100偶数和
int sb = 2;
int sum2 = 0;//总和
while(sb<=100) {
sum2+=sb;
sb+=2;
}
System.out.println("sum2 = "+sum2);
//5.1 简写 每次循环 变量+2
5. 1 求1-100的奇数和
int i = 1;
int sum= 0;
while(i<=100) {
if(i%2==1) {//奇数条件
System.out.println(i);
sum+=i;
}
i++;
}
System.out.println("sum的结果为: "+sum);
总结:循环主要参考其思维方式(+=)。循环有三种:1.while 2.dowhile 3.for。
6.编写基本流程的万年历
// 输入一个年份和月份打印对应的日历格式。
//1.固定的日历格式的打印
//2.每个月的1号是星期几
//3.根据②得知,求出星期几就跨几个空格。
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个年份: ");
int year = sc.nextInt();
System.out.println("请输入一个月份: ");
int month = sc.nextInt();
//求出每个月的第一天究竟是星期几?
int sumDay = 0;//保存总天数
//①计算与1900年之间相差的天数---注意一个问题。保证每个年份都需要判断是否为闰年, year--->当前的年份
for(int i = 1900;i<year;i++) {
sumDay+=365;
if(i%4==0&&i%100!=0||i%400==0) {
sumDay++;
}
}
//②求出月份之间相差的天数
for(int i = 1;i<month;i++) {
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) {
sumDay+=31;
}else if(i==4||i==6||i==9||i==11) {
sumDay+=30;
}else if(i==2) {
sumDay+=28;
//判断
if(year%4==0&&year%100!=0||year%400==0) {
sumDay++;
}
}
}
//③加上下一个月的第一天
sumDay++;
//④取模7余下几就是星期几
int week = sumDay % 7;
System.out.println("星期"+week);
int month_to_day = 0;
//根据month求出该月的具体天数
if(month == 1||month==3||month==5||month ==7||month == 8||month==10||month==12) {
month_to_day=31;
}else if(month == 4||month==6||month==9||month ==11) {
month_to_day=30;
}else if(month == 2) {
month_to_day=28;
if(year%4==0&&year%100!=0||year%400==0) {
month_to_day++;
}
}
System.out.println(year+"年"+month+"月,这个月有: "+month_to_day+"天");
//打印固定的日历格式(外国人的显示方式)
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
//求出每个月的第一号是星期几 得到规律后 就跨相对应的空格
for(int i = 1;i<=week;i++) {
System.out.print("\t");
}
for(int i = 1;i<=month_to_day;i++) {
System.out.print(i+"\t");
if((week+i)%7==0) {
System.out.println();
}
}
总结:考虑到的因素:闰年与平年、格式的打印以及数据的对其方式、空格的对齐,以及一些基本信息的掌握。
7. 打印菱形
如图所示:
*
***
*****
*******
*****
***
*
手动输入版本:
Scanner sc = new Scanner(System.in);
System.out.println("请输入菱形的行数: ");
int line = sc.nextInt();
// 判断 目的:为了保证输入的数字永远都是奇数。
if (line % 2 == 0) {// 输入的数字是偶数
System.out.println("由于您输入的数字是偶数,请进行选择 ①加1行 ②减1行");
int num = sc.nextInt();//
if (num == 1) {// 加1行
line++;
System.out.println("您选择的是加1行,所以最终菱形的行数是: " + line + "行");
} else {// 减1行
line--;
System.out.println("您选择的是减1行,所以最终菱形的行数是: " + line + "行");
}
} else {
System.out.println("您输入的数字是奇数,满足要求。所以最终菱形的行数是: " + line + "行");
}
// 将菱形分为2部分去打印
// 上部分 一半 +1
for (int i = 1; i <= line / 2 + 1; i++) {
// 空格 的规律 4 3 2 1 0
for (int m = 1; m <= 5 - i; m++) {
System.out.print(" ");
}
// 星星的个数规律 1 3 5 7 9.... 2*n-1
for (int j = 1; j <= 2 * i - 1; j++) {
System.out.print("*");
}
System.out.println();
}
// 下部分 1半
for (int i = 1; i <= line / 2; i++) {
// 空格的规律 1 2 3 4
for (int m = 1; m <= i; m++) {
System.out.print(" ");
}
// 星星的规律 7 5 3 1
for (int j = 1; j <= line - 2 * i; j++) {
System.out.print("*");
}
System.out.println();
}
总结:采用分层把菱形分成两个三角形,找规律在进行拼合。利用循环+规律
8.判断100-200之间有多少个素数,并输出所有素数。所谓素数表示该数只能被1和本身整除
int count = 0;
for(int i = 100;i<=200;i++) {//100-200
boolean f = true;//假设每一个i都是素数
//验证,每个i是否为素数
for(int j = 2;j < i;j++) {
if(i % j == 0) {//说明i不是素数
f = false;//假设推翻
break;
}
}
if(f == true) {
System.out.println(i+"是素数");
count++;
}
}
System.out.println("素数的总个数: "+count);
总结:利用布尔值来进行一个判断,通过素数的性质来进行条件判断。
9. 求10!
第一种写法:
// 1!+2!+3!+4!+....+10!=?
// 10! = 9! * 10 9! = 8! * 9
int mySum = 0;
for(int m = 1;m<=10;m++) {//m-->循环的数字的个数 1-10
int sum = 1;
for (int i = 1; i <= m; i++) {//每每个数字的阶乘
sum = sum * i;
}
System.out.println(m+"的阶乘是: "+sum);
mySum += sum;
}
System.out.println("总和为: "+mySum);
}
第二种写法:
int sum = 1;//阶乘和
int mySum = 0;//求总和
for(int i = 1;i<=10;i++) {
//10的阶乘 = 9! * 10
sum = sum * i;
System.out.println(i+"的阶乘是: "+sum);
// i = 1 求1的阶乘 结果保存在sum中
// 需要将1的阶乘 追加到mySum中即可。
mySum+=sum;
}
System.out.println("总和为: "+mySum);
总结:利用规律for循环结构来进行运算。
10.百元买百鸡问题:公鸡每只5元,母鸡每只3元,小鸡每3只1元;
// 一百元买一百只鸡,要求三种鸡都要买,有多少种购买组合?
// 记住一个事情: 100元----100只鸡
// 设x只公鸡,y只母鸡,z只小鸡
// x+y+z = 100;只数
// x*5 +y*3 + z/3 = 100;100元
// 程序问题:
// 公鸡 1 母鸡买的范围----》最多能买31只
// 母鸡1 公鸡买的额范围---》最多能买19只
// 公鸡买1只 母鸡买1只 情况 小鸡----》96只
//
// 公1 母1 3 6 9 12...96
// 公1 母2 3 6 9 12...96
int count = 0;
for(int i = 1;i<=19;i++) {//i代表的公鸡的个数(1-19)
for(int j = 1;j<=31;j++) {//j代表的是母鸡的个数(1-31)
for(int m = 3;m<=96;m+=3) {//m代表的是小鸡的个数(3-96)3的倍数
//个数必须是100只
int gs = i+j+m;
// 价格必须是100粤安
int jq = 5*i+3*j+m/3;
if(gs == 100 && jq == 100) {
System.out.println("组合---公鸡的个数: "+i+"只,母鸡的个数: "+j+",小鸡的个数: "+m);
count++;
}
}
}
}
System.out.println("\t组合: "+count+"种情况");
总结:考虑到各种情况,利用合适的方式语法来进行判断。
11. 循环输入字符串,将这些输入的字符串都连接起来,直到输入的字符串为“esc”就结束循环,最后显示这个连接起来的字符串。提示"" 不区分大小写 退出的位置问题
比如:输入abc 输入def 输入Esc
就输出abcdef*/
//用来保存所有字符串的的变量
String b ="";
Scanner sc =new Scanner(System.in);
System.out.println("欢迎进入本人开发的小程序,本程序可以对字符串进行一个整合。");
//通过死循环多次输出所要输出的字符串
while(true) {
System.out.println("请输入字符串,输入Esc退出,不区分大小写,请输入:");
//不区分大小写的语法: .equalsIgnoreCase
String a =sc.nextLine();
if("esc".equalsIgnoreCase(a)) {
break;
}
b+=a;
}
System.out.println("你刚才输入的字符串进行整合的结果是:"+b);
总结:这个需要进行一些新的尝试,例如String类型的存储其它的数据,再利用break的中断结束掉死循环, .equalsIgnoreCase不区分大小写。
12.循环 输入5个学生的成绩, 求出最高分和最低分
int[] scores = new int[5];
for(int i = 0;i<scores.length;i++) {
System.out.println("请输入第"+(i+1)+"个学生的成绩: ");
int s = sc.nextInt();
scores[i] = s;
}
//假设法
//打擂台的思想---假设数组中的第一个元素是最大值或者最小值
int max = scores[0];
int min = scores[0];
for(int i = 1;i<scores.length;i++) {
if(max < scores[i]) {
max = scores[i];
}
if(min > scores[i]) {
min = scores[i];
}
}
System.out.println("最大值是: "+max);
System.out.println("最小值是: "+min);
总结:利用假设法,假设最大值最小值是数组中的第一个元素,通过if来进行对比,比最大值大的数就给它重新赋值进去,最小值也是一样的道理。
13.定义一个长度为5的字符串数组。循环输入5个姓名。然后再输入一个用户的姓名,检查数组中是否有这个人的姓名,并输出所在下标。
String[] names= {"张三","李四","王老五","张远山","宋青青"};
Scanner sc = new Scanner(System.in);
boolean flag = false;//假设没有找到
System.out.println("亲输入一个姓名: ");
String name = sc.next();
//遍历输出数组中所有的元素
for(int i= 0;i<names.length;i++) {
System.out.println(names[i]);
if(names[i].equals(name)) {//成立
flag = true;
//说数组中有这个名字
System.out.println(name+"这个人在数组中的第"+(i+1)+"个位置,下标是: "+i);
break;
}
}
if(flag == false) {进行优化 !flag
System.out.println("没有这个鬼");
}
总结:利用boolean的假设法来避免循环的途中没必要的循环条件
14.定义一个长度为10的整型数组,并且为其赋值,将其奇数位的数值与偶数位的数值进行交换;并将其用foreach输出
int[] arr = {11,22,33,44,55,66,77,88,99,100};
System.out.println("交换前: "+Arrays.toString(arr));
arr[0]----arr[1]
arr[2]----arr[3]
arr[4]----arr[5]
for(int i = 0;i<arr.length;i++) {
if(i%2==0) {
int temp = 0;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("交换后: "+Arrays.toString(arr));
for(int i = 0;i < arr.length/2;i++) {
i = 0 1 2 3 4
i = 0 arr[0] 2*i arr[1] i*2+1
i = 1 arr[2] 2*i arr[3] i*2+1
i = 2 arr[4] 2*i arr[5] i*2+1
int temp = 0;
temp = arr[2*i];
arr[2*i] = arr[2*i+1];
arr[2*i+1] = temp;
}
System.out.println("交换后: "+Arrays.toString(arr));
总结:利用中间商的思想来进行数据转换。
15.求斐波拉契数列前21项:
//1,1,2,3,5,8,13,21,34......
int[] arr = new int[21];
arr[0] = 1;
arr[1] = 1;
for(int i = 2;i<arr.length;i++) {
arr[i] = arr[i-2]+arr[i-1];
System.out.println(arr[i]);
}
arr[2] = arr[0]+arr[1];2
arr[3] = arr[1]+arr[2];3
arr[20] = arr[18]+arr[19];
arr[n] = arr[n-2]+arr[n-1];
总结:找到规律,定义初始化的值,利用规律进行赋值。
16.如何做到随机抽取学员姓名
Random rd = new Random();
String[] names = {"小哈","小呵","小嘻","小青","小小","小笑",
"大大","潇潇","晓晓","肖肖","唐瑞"};
for (int i = 0; i < 3; i++) {
//随机产生3个随机数 ---随机数不要超过数组的范围
int sj = rd.nextInt(names.length);
System.out.println("随机姓名: "+names[sj]);
}
总结:随机器只能产生数字,利用数组的下标特性,数组保存名字,随机数字代表小标即可。
17. (挑战题)定义一个长度为10的整型数组,循环输入10个整数。然后判断这个数组中有几个偶数,再定义一个正好能存放这几个偶数的数组,将上一个数组中的所有偶数复制过来。最后循环输出这些偶数。
//定义一个长度为10的整型数组,循环输入10个整数。
int[] arr = {11,22,33,44,55,66,77,88,99,100};
int count = 0;//统计偶数的个数
for(int i = 0;i<arr.length;i++) {
//然后判断这个数组中有几个偶数
if(arr[i] % 2 == 0) {
count++;
}
}
System.out.println("偶数的个数count = "+count);
//再定义一个正好能存放这
// 几个偶数的数组
int[] copy = new int[count];
//将上一个数组中的所有偶数复制过来。
//定义一个变量来控制新数组的下标,赋值一个后,下标++ 下一个
int index = 0;
//要想将偶数进行复制,先获取所有偶数
for(int i = 0;i<arr.length;i++) {
if(arr[i] % 2 == 0) {
//直接将求出来的偶数赋值到新数组吗?
//copy数组的下标最大值是4 i = 9
copy[index]= arr[i];
//下一个
index++;
}
}
System.out.println("新数组如下: ");
for (int i : copy) {
System.out.println(i);
}
总结:利用计数器来当做数组存储偶数的个数,再通过for循环if来判断之前保存数组中的偶数,设置一个计数器来当做偶数数组的下标来进行存储,每一次+1,这道题目最大的问题就是超过数据的长度。
18. 求10-50之间的完数
完数:这个数字的所有因子之和 等于本身 就是一个完数。
因子:公约数? 这个因子(数字)能被提供的数字整除,说明该数字就是因子,
12 --->因子有哪些? 1 2 3 4 6
28---->因子有哪些? 1 2 4 7 14 1-27
for(int num = 10;num<=1000;num++) {
int sum = 0;//求和
for(int i = 1;i < num ; i++) {28之前的27个数字1-27
//判断因子
if(num % i == 0) {
System.out.println(i);
sum = sum + i;
}
}
//判断sum 与 数字 num是否相等
if(sum == num) {
System.out.println(num+"这个数字就是一个完数");
}
}
总结:了解因数的概念,利用sum与因数的特性即可,sum必须放在里面。
19.定义一个8*8的二维数组,求对角线的和(坐标相同)
int [][]a=new int [8][8] ;
a[0]=new int[] {1,2,3,4,34,43,5,5};
a[1]=new int[] {4,65,0,7,7,7,7,87};
a[2]=new int[] {4,6,5,6,76,87,87,9};
a[3]=new int[] {4,6,5787,3,2,2,31,7};
a[4]=new int[] {45,5,7,6,7,8,87,89};
a[5]=new int[] {2,5,3,6,47,4,3,4};
a[6]=new int[] {6,3,3,7,8,3,4,7};
a[7]=new int[] {325,76,76,87,52,432,432,56};
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j]+" ");
}
System.out.println();
}
int sum=0;
for(int i =0;i<a.length;i++) {
sum+=a[i][a.length-i-1]+a[i][i];
}
System.out.println("对角线的和为:"+sum);
总结:求对角线两边的意思。
二、综合总结
运用思想:学以致用,灵活变通,大胆尝试,多多实践 ,理智思考,逐步分析,细心耐心。