前言:java基础课程学习第一篇博客,主要对java基础的内容进行复习,包括:基本语法格式、程序流程控制、数组这三大部分。
特此说明,此专栏学习内容,是本人在极客上学习的Java基础课程做的整理,有的内容是课程上的代码,课程非常详细,安利一波!
目录
一、基本语法格式
1.1 程序的开始
Hello World!
第一个大括号里是类的内容;第二个大括号里是方法体。
类=修饰符+类名+类的内容
方法=修饰符+方法名+参数+方法体
HelloWorld是类名,文件名需要与类名一致
紫色标识的是修饰符
main是方法名,main方法是程序执行的入口
小括号里是方法的参数
双引号引起来的Hello World是字符串
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World.");
}
}
1.2 基本数据类型
1.3 运算符
位移运算符:^异或 相同取0,不同取1;~是按位取反
具体应用可以移步:算法(位运算)
基本数据类型的运算,其中精度高低,上图类型种类里按从低到高进行的排序
注意自增自减运算符,a++是先赋值再计算,++a是先计算再赋值
举例,可理解一下下面的代码:
1.4 应用
1.4.1 整除的程序
找出1-100可以被7整除的数
用到了自增方法、字符串的拼接、布尔值、数学运算取余
但输出的每行代码都要写,整除余数如果为0,打印true,否则打印false,可以看到程序非常繁琐,后面学到If else、for循环再对此代码做整理。
二、程序流程控制
前面做的整除的程序,非常繁琐,能否用几行代码简单实现呢?
接下来看java中的程序流程控制方法:
2.1 for循环应用
针对上面写的整除的例子,用if else、for循环来实现
从1开始,如果数小于等于100,就加1,直到加到100,当数大于100时,跳出循环,否则进行判断,如果可以整除,进行打印
public class FindDiv1 {
public static void main(String[] args) {
int divsor = 7;
for (int div = 1; div <= 100; div++) {
if (div % divsor == 0) {
System.out.println(div + "可以整除" + divsor);
}
}
}
}
可以看到这次的代码要比上面的简洁不少,并且只输出了可以整除的数
2.2 while循环应用
用while循环去计算
结束条件是数大于100,如果不满足,则数加1,并且进行判断,可以整除则进行打印
public class FindDiv1 {
public static void main(String[] args) {
int divsor = 7;
int div = 1;
while (div <= 100) {
div++;
if (div % divsor == 0)
System.out.println(div + "可以整除" + divsor);
}
}
}
2.3 猜数字程序
要求:
1、随机生成一个数字;
2、用户猜一个数字,提示用户输入一个指定范围的数字;
3、用户输入数字,输入的次数有限制,不能超出最大限制;
4、如果用户猜的数字大于随机生成的数字,则提示数字猜大了,小于随机生成的数字,提示输入小了,如果猜对了,提示猜对了;
5、每次输入结束后,提示用户还剩几次输入的限制,输入次数为0时,结束本轮游戏,每一轮结束后,提示用户共猜了几次,如果没有猜对,则将随机生成的数字展示出来。
6、提示用户如果想退出程序,输入-1,退出程序后,提示用户猜了几次,如果没有猜对,则将随机生成的数字展示出来。
import java.util.Scanner;
public class GuessNum {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int rangeStart = 30;
int rangeEnd = 50;
int guessTotal = 5;
int correntGuessCount = 0;
boolean gameEnd = false;
while (!gameEnd) {
int totalGameCount = 0;
int mod = rangeEnd - rangeStart;
if (rangeStart < 0 || rangeEnd < 0) {
System.out.println("开始结束必须是正数或0");
}
if (mod <= 1) {
System.out.println("非法的范围:(" + rangeStart + rangeEnd + ")");
}
int bigRandom = (int) (Math.random() * rangeEnd * 100);
int numberToGuess = (bigRandom % mod) + rangeStart;
if (numberToGuess <= rangeStart) {
numberToGuess = rangeStart + 1;
} else if (numberToGuess > rangeEnd) {
numberToGuess = rangeEnd - 1;
}
int leftToGuess = guessTotal;
boolean currentGameCount = false;
boolean currentCuess = false;
totalGameCount++;
System.out.println("请输入猜测的数字,范围在(" + rangeStart + "," + rangeEnd + ")" + ",输入-1结束游戏");
while (leftToGuess > 0) {
System.out.println("剩余猜测次数" + leftToGuess + ",请输入本次猜测的数字:");
int guess = in.nextInt();
if (guess < 0) {
gameEnd = true;
System.out.println("结束游戏");
break;
}
if (!currentGameCount) {
totalGameCount++;
currentGameCount = true;
}
leftToGuess--;
if (guess > numberToGuess) {
System.out.println("输入的数字比目标数字大");
} else if (guess < guessTotal) {
System.out.println("输入的数字比目标数字小");
} else {
currentCuess = true;
correntGuessCount++;
System.out.println("输入的数字正确!");
break;
}
}
if(!currentCuess){
System.out.println("本次的目标数字是"+numberToGuess);
}
System.out.println("共进行了" + (totalGameCount-1) + "次游戏,猜中的次数是" + correntGuessCount);
}
}
}
说明:
获取控制台的输入时用到了这行代码:
Scanner in = new Scanner(System.in);
声明一个类Scanner,in是一个实例,new创建了一个对象Scanner,其特征是括号里的System.in,表示可以在控制台输入。详细可见后面的面向对象编程部分。
Math.random()这个方法用于获取0-1内的小数,精度是double。
猜数字这个程序用到了基本数据类型int、boolean、类型的转换、while循环,if else语句,应该多加练习,多阅读代码。
三、数组
数组的创建与类的实例化方式相似,后面博客涉及到类的实例化相关知识点的整理
3.1 成绩查询程序
设计一个程序,存放每一年每一科的成绩,可以查询指定年份的平均成绩,所有科目加起来的平均成绩最好的年份,哪门课程哪一年的最好成绩。
这套程序用到了二维数组、switch语句、for循环、while语句、if语句等。
import java.util.Scanner;
public class ExampleArray3 {
public static void main(String[] args) {
int YuwenIndex = 0;
int ShuxueIndex = 1;
int EnglishIndex = 2;
int WuliIndex = 3;
int LishiIndex = 4;
int ShengwuIndex = 5;
String[] names = new String[6];
names[YuwenIndex] = "语文";
names[ShuxueIndex] = "数学";
names[EnglishIndex] = "英语";
names[WuliIndex] = "物理";
names[LishiIndex] = "历史";
names[ShengwuIndex] = "生物";
Scanner scanner = new Scanner(System.in);
System.out.println("请输入共有多少年的成绩:");
int yearToStore = scanner.nextInt();
double[][] scores = new double[yearToStore][names.length];
for (int i = 0; i < yearToStore; i++) {
for (int j = 0; j < names.length; j++) {
scores[i][j] = 80 + Math.random() * 20;
System.out.println("第" + (i + 1) + "年" + names[j] + "成绩为:" + scores[i][j]);
}
}
boolean cont = true;
while (cont) {
System.out.println("请输入需要进行的操作编号:");
System.out.println("1、求某年最好成绩\n" + "2、求某年的平均成绩\n" + "3、求所有年份最好的成绩\n" + "4、求某门课历年最好的成绩");
int year = 0;
int oprId = scanner.nextInt();
switch (oprId) {
case 1:
System.out.println("请输入要求哪一年的平均成绩?");
year = scanner.nextInt() - 1;
if (year < 0 || year >= yearToStore) {
System.out.println("非法年份");
}
int bestOfYearScoreId = 0;
for (int i = 1; i < scores[year].length; i++) {
if (scores[year][bestOfYearScoreId] < scores[year][i]) {
bestOfYearScoreId = i;
}
}
System.out.println("第" + (year + 1) + "年最好成绩是" + names[bestOfYearScoreId] + ":" + scores[year][bestOfYearScoreId]);
break;
case 2:
System.out.println("请输入要求哪一年的最好成绩");
year = scanner.nextInt() - 1;
if (year < 0 || year >= yearToStore) {
System.out.println("非法年份");
}
double totalScore = 0;
for (int i = 0; i < scores[year].length; i++) {
totalScore += scores[year][i];
}
System.out.println("第" + (year + 1) + "年的平均成绩是:" + (totalScore / names.length));
break;
case 3:
int BestOfYearScoreId = 0;
year = 0;
for (int i = 0; i < scores.length; i++) {
for (int j = 0; j < scores[i].length; j++) {
if (scores[year][BestOfYearScoreId] < scores[i][j]) {
year = i;
BestOfYearScoreId = j;
}
}
}
System.out.println("历年最好成绩是第" + (year + 1) + "年的" + names[BestOfYearScoreId] + "成绩:" + scores[year][BestOfYearScoreId]);
break;
case 4:
System.out.println("请问要查询哪门课的最好成绩?");
int scoreId = scanner.nextInt() - 1;
year = 0;
for (int i = 0; i < scores.length; i++) {
if (scores[year][scoreId] < scores[i][scoreId]) {
year = i;
}
}
System.out.println(names[scoreId] + "历年最好成绩为" + (year + 1) + "年,成绩为" + scores[year][scoreId]);
break;
default:
System.out.println("程序结束");
cont = false;
}
}
}
}