本专栏开启,目的在于帮助大家更好的掌握学习Java
,特别是一些Java学习者
难以在网上找到系统地算法学习资料帮助自身入门算法,同时对于专栏内的内容有任何疑问都可在文章末尾添加我的微信给你进行一对一的讲解。
但最最主要的还是需要独立思考,对于本专栏的所有内容,能够进行完全掌握,自己完完全全将代码写过一遍,对于算法入门肯定是没有问题的。
算法的学习肯定不能缺少总结,这里我推荐大家可以到高校算法社区将学过的知识进行打卡,以此来进行巩固以及复习。
学好算法的唯一途径那一定是题海战略,大量练习的堆积才能练就一身本领。专栏的任何题目我将会从【题目描述】【解题思路】【模板代码】【代码解析】等四板块进行讲解。
无论是任何语言,都一定是需要有循环
功能的,它的使用是大量复杂算法的基础。使用它可以帮助我们使用短短几行代码让计算机完成大量的计算。可以说掌握不好循环,就像没穿鞋的攀登者,简直是寸步难行。
for
循环是所有循环使用最广泛的循环,它的大致主体为以下形式:
for (表达式1;表达式2:表达式3) {
//body
}
布尔表达式
,用于判断循环是否进行进行;
隔开,注意不是逗号 while
循环同样是非常常用的循环,它的组成与for
循环相比更加简单,在上一章我们也粗略介绍过它。
while(布尔表达式){
//body
}
dowhile
循环是三个循环中最冷门的循环,它只是在while
的基础上做了一点变形。能遇见的场景屈指可数,使用的场景更是少之又少,不过还是必须掌握的基础内容。
do{
//body
}while (布尔表达式);
dowhile
循环相当于先执行代码体,再进行布尔判断。while
循环则是先进行布尔表达式判断再执行代码体。dowhile
相比while
的区别就是dowhile
一定会执行1
次代码体,而while
循环可能一次循环都不会进行。具体从循环流程图对比即可知道。 continue
和break
是Java
中循环体内使用的关键字。
continue
的作用是终止当前循环,直接跳到下一次循环。具体作用见例题二。
break
的作用是立刻结束循环,跳出循环。具体作用见例题三。
给定一个整数 N ( 1 ≤ N ≤ 1000 ) N(1\leq N\leq1000) N(1≤N≤1000),请在控制台打印出 [ 1 , N ] [1,N] [1,N],并在输出[1,N]的和。
题目难度:⭐️
由于需要使用变量表示,而且变量的值需要改变,这里我们使用for
循环完成更佳,同时用一个int
类型变量res来累加和。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int res=0;
for (int i = 1; i <=n; i++) {
System.out.println(i);
res=res+i;
}
System.out.println(res);
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for (int i = 1; i <=n; i++) {
System.out.println(i);
}
System.out.println(n*(n+1)/2);
}
}
for
循环更佳i
的值,res
累加上i
的值给定一个整数 N ( 1 ≤ N ≤ 1000 ) N(1\leq N\leq1000) N(1≤N≤1000),请在控制台打印出 [ 1 , N ] [1,N] [1,N]中所有的奇数。
题目难度:⭐️
做法非常多,我们考虑使用continue
关键字,我们只需要奇数,所以如果我们判断到是偶数则可以使用continue
跳过,直接进入下一次循环。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for (int i = 1; i <=n; i++) {
if (i%2==0) continue;
System.out.println(i);
}
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for (int i = 1; i <=n; i+=2) {
System.out.println(i);
}
}
}
i
为偶数时,不会执行下面的输出语句直接进入下一个循环,奇数可以完成打印操作。1
为奇数,所以在表达式3的位置每次让i+=2
,这样每次i
的值都会是奇数,直接打印即可。给定一个整数 N ( 1 ≤ N ≤ 1000 ) N(1\leq N\leq1000) N(1≤N≤1000),接下来给定 N N N个整数,请输出第 1 1 1个既是既是 2 2 2的倍数又是 7 7 7的倍数的数,如果不存在则输出 − 1 -1 −1。
题目难度:⭐️
由于需要接收 N N N个数,所以我们需要使用数组先接收所有的数,然后通过for
循环来遍历数组。因为是找第1
个满足要求的数,所以找到以后后面的数就不需要再考虑了,可以直接break
跳出循环了。
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] a=new int[n];
for (int i = 0; i <n; i++) {
a[i]=sc.nextInt();
}
int res=-1;
for (int i = 1; i <=n; i+=2) {
if (a[i]%2==0&&a[i]%7==0){
res=a[i];
break;
}
}
System.out.println(res);
}
}
0
开始,我们需要先使用数组通过for
循环接收所有的值。int
类型的变量res为-1
,这样如果在循环内未找到符合的数字时,它最后的值也会是-1
。res
的值更改,由于不需要再考虑后面的结果,我们使用break
关键字直接退出循环。序号 | 题目链接 | 难度评级 |
---|---|---|
1 | 两数之和 | 2 |
2 | 找最小值 | 1 |
3 | 一尺之锤 | 1 |