第六天 知识点练习与回顾【悟空教程】

第06天 知识点练习与回顾

第1章 练习

1.1.1 看循环的执行流程

  • 1-5求和案例

public class Demo02DebugTest {

public static void main(String[] args) {

// 定义求和变量

int sum = 0;

// 循环获取每一个数据

for (int x = 1; x <= 5; x++) {

sum += x;

}

System.out.println("sum:" + sum);

}

}

1.1.2 看方法的调用流程

  • 求和方法的调用
  • 带有录入数据的如何看执行流程
  • 建议: 有方法调用的时候,要想看到完整的流程,每个方法都要加断点,建议方法进入的第一条有效语句加断点

public class Demo03DebugTest {

public static void main(String[] args) {

// 创建对象

Scanner sc = new Scanner(System.in);

// 接收数据d

System.out.println("请输入第一个数据:");

int a = sc.nextInt();

System.out.println("请输入第二个数据:");

int b = sc.nextInt();

// 调用方法

int result = sum(a, b);

// 输出结果

System.out.println("result:" + result);

}

// 求和方法

public static int sum(int a, int b) {

return a + b;

}

}

1.1.3 看方法参数传递案例执行流程

  • 参数是基本类型: 形式参数的改变不影响实际参数。

public class Demo04DebugTest {

public static void main(String[] args) {

int a = 10;

int b = 20;

System.out.println("a:" + a + ",b:" + b);

change(a, b);

System.out.println("a:" + a + ",b:" + b);

}

public static void change(int a, int b) {

System.out.println("a:" + a + ",b:" + b);

a = b;

b = a + b;

System.out.println("a:" + a + ",b:" + b);

}

}

  • 参数是引用类型: 形式参数的改变直接影响实际参数。

public class Demo05DebugTest {

public static void main(String[] args) {

int[] arr = { 1, 2, 3, 4, 5 };

for (int x = 0; x < arr.length; x++) {

System.out.println(arr[x]);

}

System.out.println("-----------调用change------------");

change(arr);

for (int x = 0; x < arr.length; x++) {

System.out.println(arr[x]);

}

}

public static void change(int[] arr) {

for (int x = 0; x < arr.length; x++) {

if (arr[x] % 2 == 0) {

arr[x] *= 2;

}

}

}

}

第2章 强化训练

2.1 键盘录入月份,输出对应的季节

  • 需求:

一年有四季;3,4,5春季;6,7,8夏季;9,10,11秋季;12,1,2冬季

  • 使用if语句实现

public class Demo01Test {

public static void main(String[] args) {

// 键盘录入一个月份,用Scanner实现

Scanner sc = new Scanner(System.in);

// 接收数据

System.out.println("请输入一个月份(1-12):");

int month = sc.nextInt();

// 判断该月份是几月,根据月份输出对应的季节

/*

if (month == 1) {

System.out.println("冬季");

} else if (month == 2) {

System.out.println("冬季");

} else if (month == 3) {

System.out.println("春季");

} else if (month == 4) {

System.out.println("春季");

} else if (month == 5) {

System.out.println("春季");

} else if (month == 6) {

System.out.println("夏季");

} else if (month == 7) {

System.out.println("夏季");

} else if (month == 8) {

System.out.println("夏季");

} else if (month == 9) {

System.out.println("秋季");

} else if (month == 10) {

System.out.println("秋季");

} else if (month == 11) {

System.out.println("秋季");

} else if (month == 12) {

System.out.println("冬季");

} else {

System.out.println("你输入的月份有误");

}

*/

//代码太长了,能不能简单一些呢?

//能,如何简单一些呢?

//我们可以把相同季节的月份放到一起来判断

//(month==3 || month==4 || month==5)

if(month==1 || month==2 || month==12) {

System.out.println("冬季");

}else if(month==3 || month==4 || month==5) {

System.out.println("春季");

}else if(month==6 || month==7|| month==8) {

System.out.println("夏季");

}else if(month==9 || month==10 || month==11) {

System.out.println("秋季");

}else {

System.out.println("你输入的月份有误");

}

}

}

  • 使用switch语句实现
    • 普通switch方式代码实现

public class Demo02Test {

public static void main(String[] args) {

// 键盘录入一个月份,用Scanner实现

Scanner sc = new Scanner(System.in);

// 接收数据

System.out.println("请输入月份(1-12):");

int month = sc.nextInt();

// 用switch语句实现

switch (month) {

case 1:

System.out.println("冬季");

break;

case 2:

System.out.println("冬季");

break;

case 3:

System.out.println("春季");

break;

case 4:

System.out.println("春季");

break;

case 5:

System.out.println("春季");

break;

case 6:

System.out.println("夏季");

break;

case 7:

System.out.println("夏季");

break;

case 8:

System.out.println("夏季");

break;

case 9:

System.out.println("秋季");

break;

case 10:

System.out.println("秋季");

break;

case 11:

System.out.println("秋季");

break;

case 12:

System.out.println("冬季");

break;

default:

System.out.println("你输入的月份有误");

break;

}

}

}

  • case穿透原理

public class Demo02Test{

public static void main(String[] args) {

// 键盘录入一个月份,用Scanner实现

Scanner sc = new Scanner(System.in);

// 接收数据

System.out.println("请输入月份(1-12):");

int month = sc.nextInt();

//case 穿透

switch(month) {

case 1:

System.out.println("hello");

//break;

case 2:

System.out.println("world");

break;

default:

System.out.println("over");

break;

}

}

}

  • 通过case穿透现象改进代码

public class Demo02Test {

public static void main(String[] args) {

// 键盘录入一个月份,用Scanner实现

Scanner sc = new Scanner(System.in);

// 接收数据

System.out.println("请输入月份(1-12):");

int month = sc.nextInt();

//通过case穿透现象改进代码

switch(month) {

case 1:

case 2:

case 12:

System.out.println("冬季");

break;

case 3:

case 4:

case 5:

System.out.println("春季");

break;

case 6:

case 7:

case 8:

System.out.println("夏季");

break;

case 9:

case 10:

case 11:

System.out.println("秋季");

break;

default:

System.out.println("你输入的月份有误");

break;

}

}

}

2.2 打印5位数中所有的回文数

  • 需求:

什么是回文数呢?举例:12321是回文数,个位与万位相同,十位与千位相同。

public class Demo03Test {

public static void main(String[] args) {

//5位数告诉了我们数据的范围,用for循环实现

for(int x=10000; x<100000; x++) {

//获取每一个5位数,然后得到它的个位,十位,千位,万位

int ge = x%10;

int shi = x/10%10;

int qian = x/10/10/10%10;

int wan = x/10/10/10/10%10;

//把满足条件的数据输出即可

if((ge==wan) && (shi==qian)) {

System.out.println(x);

}

}

}

}

2.3 不死神兔问题(斐波那契数列)

  • 需求:

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?

public class Demo04Test {

public static void main(String[] args) {

//定义数组

int[] arr = new int[20];

//初始化第一个月和第二个月的兔子对数

arr[0] = 1;

arr[1] = 1;

//从第三个月开始,每个月的兔子对数是前两个月的兔子对数之和

for(int x=2; x<arr.length; x++) {

arr[x] = arr[x-2] + arr[x-1];

}

System.out.println("第二十个月的时候的兔子对数是:"+arr[19]);

}

}

2.4 求数组中满足要求的元素和

  • 需求:

(1)定义一个int类型的一维数组,内容为{171,72,19,16,118,51,210,7,18}

(2)求出该数组中满足要求的元素和。

(3)求和的元素的个位和十位不能包含7,并且只能为偶数。

public class Demo05Test {

public static void main(String[] args) {

//定义一个int类型的一维数组

int[] arr = {171,72,19,16,118,51,210,7,18};

//定义一个求和变量

int sum = 0;

//遍历数组,获取到数组中的每一个元素

for(int x=0; x<arr.length; x++) {

//判断该元素是否满足如下要求,如果是就累加,否则,不处理它

if((arr[x]%10 != 7) && (arr[x]/10%10 !=7) && (arr[x]%2 == 0)) {

sum += arr[x];

}

}

//输出结果

System.out.println("sum:"+sum);

}

}

2.5 裁判评分

  • 需求:

(1)在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。

(2)选手的最后得分为:去掉一个最高分和一个最低分后 其余4个选手的平均值。

(3)请写代码实现。(不考虑小数部分)

public class Demo06Test {

public static void main(String[] args) {

//定义一个长度为6的数组

int[] arr = new int[6];

//通过键盘录入的方式给出评委的分数

Scanner sc = new Scanner(System.in);

for(int x=0; x<arr.length; x++) {

System.out.println("请给出第"+(x+1)+"个评委的分数(0-100):");

/*int number = sc.nextInt();

arr[x] = number;*/

arr[x] = sc.nextInt();

}

//写方法实现获取数组中的最大值,最小值

int max = getMax(arr);

int min = getMin(arr);

//写方法实现数组元素的求和

int sum = sum(arr);

//(和-最高分-最低分)/(arr.length-2)

int avg = (sum-max-min)/(arr.length-2);

//输出分数即可

System.out.println("该选手的最终得分是:"+avg);

}

//数组元素求和

public static int sum(int[] arr) {

int sum = 0;

for(int x=0; x<arr.length; x++) {

sum += arr[x];

}

return sum;

}

//数组中的最小值

public static int getMin(int[] arr) {

int min = arr[0];

for(int x=1; x<arr.length; x++) {

if(arr[x] < min) {

min = arr[x];

}

}

return min;

}

//数组中的最大值

public static int getMax(int[] arr) {

int max = arr[0];

for(int x=1; x<arr.length; x++) {

if(arr[x] > max) {

max = arr[x];

}

}

return max;

}

}

2.6 数组元素反转

  • 需求:

(1)键盘录入5个int类型的数据存储数组arr中

(2)定义方法将arr数组中的内容反转

(3)定义方法对反转后的数组进行遍历

  • 画图分析

public class Demo07Test {

public static void main(String[] args) {

// 定义一个长度为5的数组

int[] arr = new int[5];

// 通过键盘录入数据给数组中的元素赋值

Scanner sc = new Scanner(System.in);

for (int x = 0; x < arr.length; x++) {

System.out.println("请给出第" + (x + 1) + "个元素");

arr[x] = sc.nextInt();

}

System.out.println("反转前的数组元素:");

printArray(arr);

// 定义方法将arr数组中的内容反转

reverse(arr);

System.out.println("反转后的数组元素:");

//定义方法遍历数组

printArray(arr);

}

//遍历数组

public static void printArray(int[] arr) {

System.out.print("[");

for(int x=0;x<arr.length; x++){

if(x == arr.length-1) {

System.out.println(arr[x]+"]");

}else {

System.out.print(arr[x]+", ");

}

}

}

/*

* 两个明确: 返回值类型:void 参数列表:int[] arr

*/

public static void reverse(int[] arr) {

/*

利用for循环遍历数组

初始化表达式定义两个指针,记录第一个元素和最后一个元素:int min = 0,max = arr.length-1;

布尔表达式:min<max;

步进表达式:min++,max--;

*/

for(int min=0,max=arr.length-1;min<=max;min++,max--) {

//利用第三方变量完成数组中的元素交换

int temp = arr[min];

arr[min] = arr[max];

arr[max] = temp;

}

}

}

2.7 数组元素基本查找

  • 需求:数组元素查找(查找指定元素第一次在数组中出现的索引)

(1)给定数组int[] arr = {5,7,3,2,5};

(2)要查询的元素通过键盘录入的方式确定

(3)定义一个查找数组元素第一次出现位置的方法(注,要查找的元素就是键盘录入的数据)

public class Demo08Test {

public static void main(String[] args) {

// 给定数组int[] arr = {5,7,3,2,5};

int[] arr = { 5, 7, 3, 2, 5 };

//要查询的元素通过键盘录入的方式确定

Scanner sc = new Scanner(System.in);

System.out.println("请输入要查找的元素:");

int number = sc.nextInt();

//定义一个查找数组元素第一次出现位置的方法

//调用方法

int index =getIndex(arr, number);

System.out.println("index:"+index);

}

/*

* 两个明确:

* 返回值类型:int

* 参数列表:int[] arr,int value

*/

public static int getIndex(int[] arr,int value) {

//遍历数组,获取到每一个元素和要查找的元素进行比较,

/*

for(int x=0; x<arr.length; x++) {

if(arr[x] == value) {

//如果相等,就直接把该处的索引返回。

return x;

}

}

//遍历完毕,没有相等的返回-1。

return -1;

*/

int index = -1;

for(int x=0; x<arr.length; x++) {

if(arr[x] == value) {

index = x;

break;

}

}

return index;

}

}

2.8 数据加密

  • 需求:键盘录入数据,要求数据是四位的整数,现需要对数据进行加密,加密规则如下:

(1)每位数字都加上5,然后除以10的余数代替该数字,

(2)再将第一位和第四位交换,第二位和第三位交换,

(3)请把加密后的数据输出到控制台

public class Demo09Test {

public static void main(String[] args) {

//键盘录入一个四位数

Scanner sc = new Scanner(System.in);

//接收数据

System.out.println("请输入一个四位数:");

int number = sc.nextInt();

//分别得到该数据的每一个位上的数据

int ge = number%10;

int shi = number/10%10;

int bai = number/10/10%10;

int qian = number/10/10/10%10;

//定义一个数组

int[] arr = new int[4];

arr[0] = qian;

arr[1] = bai;

arr[2] = shi;

arr[3] = ge;

//遍历数组进行加密

for(int x=0; x<arr.length; x++) {

//加密规则

//每位数字都加上5,然后除以10的余数代替该数字

arr[x] += 5;

arr[x] %= 10;

}

//再将第一位和第四位交换,第二位和第三位交换

int temp = arr[0];

arr[0] = arr[3];

arr[3] = temp;

temp = arr[1];

arr[1] = arr[2];

arr[2] = temp;

//输出加密后的数据

for(int x=0; x<arr.length; x++) {

System.out.print(arr[x]);

}

System.out.println();

}

}

第3章 知识点相关题

3.1 定义一个方法,可以计算一个int数组所有元素的奇数累加和、偶数累加和的差值;将结果返回;要求结果为正数;

public class Test01 {

public static void main(String[] args) {

int[] arr = {1,2,3,4,5,6,7,8,9,10};

int num = getNum(arr);

System.out.println("数组中奇偶数和之差为:"+num);

}

private static int getNum(int[] arr) {

int jSum = 0;

int oSum = 0;

for (int i = 0; i < arr.length; i++) {

if(arr[i] % 2 == 0){

oSum += arr[i];

}else{

jSum += arr[i];

}

}

if(oSum > jSum)

return oSum-jSum;

else

return jSum - oSum;

}

}

3.2 接收一个字符串类型的数组,返回该数组中第2个元素,如果数组长度小于2,就返回”对不起,没有这个人”

public class Test02 {

public static void main(String[] args) {

String[] str= {"Java","C++","前端移动","UI"};

String string = getS(str);

System.out.println(string);

}

private static String getS(String[] str) {

if(str.length < 2)

return "对不起,没有这个人";

else

return str[1];

}

}

3.3 现在有如下的一个数组:int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} 要求定义一个方法将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为:int newArr[]={1,3,4,5,6,6,5,4,7,6,7,5}最后遍历两个数组

public class Test03 {

public static void main(String[] args) {

int[] oldArr = {1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};

getArr(oldArr);

}

private static void getArr(int[] oldArr) {

int len = 0;

for (int i = 0; i < oldArr.length; i++) {

if(oldArr[i] != 0){

len++;

}

}

System.out.println(len);

int[] arr = new int[len];

int index = 0;

for (int i = 0; i < oldArr.length; i++) {

if(oldArr[i] != 0){

arr[index] = oldArr[i];

index++;

}

}

for (int i = 0; i < oldArr.length; i++) {

System.out.print(oldArr[i]);

}

System.out.println();

for (int i = 0; i < arr.length; i++) {

System.out.print(arr[i]);

}

}

}

3.4 定义一个方法传入一个5-10之间的随机数,根据传入的随机数创建数组,并向该数组再次存入5-10之间的几个随机元素。最后返回该数组并遍历

import java.util.Random;

public class Test04 {

public static void main(String[] args) {

Random r = new Random();

int num = r.nextInt(6)+5;

int [] arr = getArr(num);

for (int i = 0; i < arr.length; i++) {

System.out.println(arr[i]);

}

}

private static int[] getArr(int num) {

Random r = new Random();

int[] arr = new int[num];

for (int i = 0; i < arr.length; i++) {

arr[i] = r.nextInt(6)+5;

}

return arr;

}

}

3.5 编写一个方法,实现如下功能:遍历数组并打印,要求打印格式为[11, 22, 33, 44, 55]。在主方法里定义数组{11,22,33,44,55},调用方法遍历数组。

public class Test05 {

public static void main(String[] args) {

int[] arr = {11,22,33,44,55};

printArr(arr);

}

private static void printArr(int[] arr) {

System.out.print("{");

for (int i = 0; i < arr.length; i++) {

if(i != arr.length-1){

System.out.print(arr[i]+",");

}else{

System.out.print(arr[i]+"}");

}

}

}

}

第4章 代码题

4.1 定义一个方法:接收一个int数组,将数组中所有偶数放入到一个新数组中并返回

答案:

public class Test01 {public static void main(String[] args) {int[] arr = {1,3,4,6,9,10,200};int[] newArr = getArr(arr);for (int i = 0; i < newArr.length; i++) {int j = newArr[i];System.out.println(j);}}public static int[] getArr(int[] arr){//获取新数组长度int length = 0;for (int i = 0; i < arr.length; i++) {int thisNumber = arr[i];//如果是偶数 长度+1if(thisNumber%2==0){length++;}}//根据长度创建新数组 int[] newArr = new int[length];int j = 0;for (int i = 0; i < arr.length; i++) {int thisNumber = arr[i];if(thisNumber%2==0){newArr[j] =arr[i];j++;}}return newArr;}}

4.2 定义方法,实现查找数组中间值的功能,中间值有一个,就打印一个;中间值有两个,则打印两个。

public class Demo05 {

public static void main(String[] args) {

int[] arr = {1,3,4,5,6,7,4,9};

int[] arr2 = {24,45,56,67,78,89,89};

int[] a = getModdle(arr);

int[] b = getModdle(arr2);

System.out.println("数组arr2中间值为:");

for (int i = 0; i < b.length; i++) {

System.out.print(b[i]+" ");

}

System.out.println();

System.out.println("数组arr中间值为:");

for (int i = 0; i < a.length; i++) {

System.out.print(a[i]+" ");

}

}

private static int[] getModdle(int[] arr) {

int count = arr.length;

if(count % 2 == 0){

int[] array = {arr[arr.length / 2],arr[arr.length / 2 - 1]};

return array;

}else{

int[] array = {arr[arr.length / 2]};

return array;

}

}

}

4.3 1.返回一个存储10个4位数的随机整数 1000-9999的数组(注意思考怎么产生一个4位的随机整数)(不能重复)2.在方法中遍历这个随机数数组

import java.util.Random;

public class Demo{

public static void main(String[] args){

int[] arr = method();

for(int i = 0; i < arr.length; i++){

System.out.println(arr[i]);

}

}

public static int[] method(){

Random r = new Random();

int[] arr = new int[10];

int i = 0;

while(i < 10){

int num = r.nextInt(9000)+1000;

for(int j = 0 ; j < arr.length; j++){

if(num == arr[i]){

break;

}

}

arr[i]=num;

i++;

}

return arr;

}

}

原文发布于微信公众号 - Java帮帮(javahelp)

原文发表时间:2018-05-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Go 语言数据类型

在 Go 编程语言中,数据类型用于声明函数和变量。 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充...

3097
来自专栏yl 成长笔记

链表

链表定义:一种递归的数据结构, 它是在集合类的抽象数据,它或者为空, 或者是指向一个节点 (node) 的引用, 该结点含有一个泛型的元素和一个指向另一条链表的...

991
来自专栏深度学习与计算机视觉

Python3 一些与C++不一样的运算符

Python逻辑运算符 逻辑“与”运算符 and 逻辑表达式 a and b 如果变量a,b中有一个是Flase,那么a and b为Flase ...

2065
来自专栏黑泽君的专栏

调用Thread类的方法:public final String getName() 为什么得到的线程对象的名称默认是:Thread-0、Thread-1、Thread-2、...呢?

调用Thread类的方法:public final String getName() 为什么得到的线程对象的名称默认是:Thread-0、Thread-1、Th...

552
来自专栏爱撒谎的男孩

冒泡排序算法

1393
来自专栏尾尾部落

[剑指offer] 数组中只出现一次的数字

一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。

712
来自专栏从流域到海域

Python set(集合) 这一定是最全的介绍集合的博文

Python的set是一个无序且无重复元素的集合,概念上相当于数学上的无序集,数据结构上相当于dict的键。 既然set是集合,则必然可以实现并、交、...

1965
来自专栏jojo的技术小屋

原 三、基本概念

作者:汪娇娇 时间:2017年11月4日 一、语法 1、区分大小写 2、标识符 指变量、函数、属性的名字,采用驼峰大小写格式。 3、注释 单行:// 多行:/*...

2565
来自专栏Jack-Cui

第十三天、归并排序

题目 用归并排序法对一组数据由小到大进行排序,数据分别为695、458、362、789、12、15、163、23、2、986。 1、程序分析     归...

1800
来自专栏程序猿DD

第二章 正则表达式位置匹配攻略

第二章 正则表达式位置匹配攻略 正则表达式是匹配模式,要么匹配字符,要么匹配位置。请记住这句话。 然而大部分人学习正则时,对于匹配位置的重视程度没有那么高。 本...

19110

扫码关注云+社区