JAVA入门第一季学习补充
要有良好的编程习惯!!!
0、关于java:跨平台是指跨越操作系统。java源代码 .java--编译-->字节码文件 .class---运行。java是开源的。JDK包含JRE,JRE包含JVM,对于开发人员,需要安装JDK。对于普通用户只需要安装JRE(java运行环境)。
1、java关键字区分大小写。void是,但是Void不是。
2、java标识符适用于给Java中变量、类、方法命名的符号,严格区分大小写。
3、java中标点符号是英文的。
4、java变量名没有长度限制。
5、Java中基本数据类型变量保存数据本身,引用数据类型保存数据的空间地址。
6、Java中的变量需要先声明后使用。可以在声明变量的同时进行初始化,也可以先声明后复制,每次只能为一个变量赋一次值,但是可以修改多次。main方法中定义的变量必须先赋值,才可以输出。变量名不建议使用中文。
7、通过强制类型转换将 75.8 赋值给 int 型变量后,结果为 75,数值上并未进行四舍五入,而是直接将小数位截断。强制类型转换可能会造成数据的丢失哦
8、常量的值设定之后在程序运行的过程中不允许被改变,使用常量可提高代码的可维护性。常量名称全拼大写。
final double PI=3.15;
9、char定义字符,使用单引号,String 是字符串,使用双引号。
public static void main(String[] args) {` `final char GIRL='女';` `final char BOY='男';` `System.out.println(GIRL);` `System.out.println(BOY);}
10、int b=++a;
a先自增再赋值给b;
11、< 、>、 <=、 >=只支持左右两边操作数是数值类型;==、!=、两边的操作数既可以是数值类型,也可以是引用类型。
12、异或 a^b;
13、三元运算符: 布尔表达式 ?表达式1 :表达式2( ? : 要使用英文状态)
14、优先级:
15、判断一个int型数值是否介于另外两个数值之间:
我的代码:else if(40>age>18)
正确代码:else if((age<40)&&(age>18))
错误原因:if中需要一个Boolean的表达式,而我的代码中第一个是‘40’为int类型。
16、当需要对选项进行等值判断时,使用switch语句会更加简洁明了。
执行过程:当 switch 后表达式的值和 case 语句后的值相同时,从该位置开始向下执行,直到遇到 break 语句或者 switch 语句块结束;如果没有匹配的 case 语句则执行 default 块的代码。
不得不说的几点小秘密:
16.1、 switch 后面小括号中表达式的值必须是整型或字符型
16.2、 case 后面的值可以是常量数值,如 1、2;也可以是一个常量表达式,如 2+2 ;但不能是变量或带有变量的表达式,如 a * 2
16.3、 case 匹配后,执行匹配块里的程序代码,如果没有遇见 break 会继续执行下一个的 case 块的内容,直到遇到 break 语句或者 switch 语句块结束。
16.4、 可以把功能相同的 case 语句合并起来,如:
case 1:
case 2:
…
16.5、 default 块可以出现在任意位置,也可以省略
17、关于for循环
for循环中循环变量初始化、循环次数、循环变量变化都可以省略,但是“;”不可以省略。其中,变量的初始化可以再循环体之前定义好,循环次数省略的话,会出现死循环,但是可以使用break跳出循环,循环变量的变化可以在循环体内进行定义。
for 循环变量初始化和循环变量变化部分,可以是使用 “,” 同时初始化或改变多个循环变量的值,如:
for(int i=8,j=9;i<=8,j<=10;i++,j--)
循环条件部分可以使用逻辑运算符组合的表达式,表示复杂判断条件,但一定注意运算的优先级
18、do...while 循环结束的条件是 while 后的条件不成立。
19、给定一个小于10位的数,判断它是几位数。例如:输入999,则输出 “它是个3位的数!”
我的错误代码:
int num = 999;
int count = 0;
while(num/10!=0){
count++;
num/=10;
}
System.out.println("它是个"+count+"位的数");
逻辑错误,改变了两次num的值。
正确代码:
int num = 999;
int count = 0;
while(num!=0){
count++;
num/=10;
}
System.out.println("它是个"+count+"位的数");
除法和取余一定要区分清楚作用。int除法用来除去位数,取余取每一位上的数字。
20、练习:实现接受三个班级的阁寺名学生的成绩,并求出平均分数。
我的错误代码:
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
double a1=scanner.nextDouble();
double a2=scanner.nextDouble();
double a3=scanner.nextDouble();
double a4=scanner.nextDouble();
System.out.println((a1+a2+a3+a4)/4);
}
}
存在的错误:没有考虑到需要控制班级数量。我的代码是需要手动停止输入。
第一次改正的代码:(使用了二重嵌套循环)
int sum=0;
for(int i=0;i<3;i++){
for(int j=0;j<4;j++){
int s=new Scanner(System.in).nextInt();
sum+=s;
}
System.out.println(sum/4);
}
存在的错误:在计算后面的班级成绩总和时候,sum并没有归零。
正确的代码:
int sum=0;
for(int i=0;i<3;i++){
sum=0;
for(int j=0;j<4;j++){
int s=new Scanner(System.in).nextInt();
sum+=s;
}
System.out.println(sum/4);
}
}
21、使用Java中的数组:
第一步:声明数组 数据类型[] 数组名;
第二步:分配空间 数组名 =new 数据类型[数组长度];
也可以直接创建数组:int[] score={12,2,2,11};
等价于: int[] score=new int[]{12,2,2,11};
第二个[]中必须为空,不可以指定长度。
第三步:赋值 数组名[下标]=值;
第四步:处理数组中数据。
22、数组中找到并保存最大值,用数组中的某一个位置的元素,比如先假定第一个元素为最大值,max=nums[1]
;
23、编程练习:
任务
一、 存储35周学习内容(已提供部分完成的功能)
提示:
1、 创建String数组,并为每一个元素赋值,内容为【第X周】XXX
2、 利用int型的变量接收输入的数字
二、 计算今天处于第几周
提示:
1、根据输入的数字,计算今天是第几个月
(例如:4对应第一月第四周,5代表第二月第一周)
2、换算一下,输入的周是这个月的第几周
三、 遍历并输出本月的学习内容,并标记本周内容
提示:
1、利用for循环,找到数组中对应这个月的内容输出
2、根据当前月第几周,在输出此行时,前面添加“√”
我的第一个错误代码:
package javademo;
import java.util.Scanner;
public class Arrays05 {
public static void main(String[] args) {
//创建String数组,并为每一个元素赋值。赋值内容为第几周+学习内容
String[] contentList = new String[35];
contentList[0] = "【第1周】环境搭建与语法入门";
contentList[1] = "【第2周】Java语法之循环、数组与方法";
contentList[2] = "【第3周】面向对象之封装与继承";
contentList[3] = "【第4周】面向对象之单例模式与多态";
contentList[4] = "【第5周】常用工具类(上)";
contentList[5] = "【第6周】常用工具类(下)";
contentList[6] = "【第7周】常用工具类(下)";
contentList[7] = "【第8周】前端基础之HTML与CSS";
contentList[8] = "【第9周】前端基础之JavaScript与综合案例";
contentList[9] = "【第10周】Java Web基础";
contentList[10] = "【第11周】Java Web基础";
contentList[11] = "【第12周】常用功能与过滤器";
contentList[12] = "【第13周】监听器与项目实战";
contentList[13] = "【第14周】监听器与项目实战";
contentList[14] = "【第15周】MySQL基础";
contentList[15] = "【第16周】MySQL基础";
contentList[16] = "【第17周】Java数据库开发基础";
contentList[17] = "【第18周】框架前置知识";
contentList[18] = "【第19周】MyBatis基础";
contentList[19] = "【第20周】MyBatis实现OA系统项目实战";
contentList[20] = "【第21周】MyBatis实现OA系统项目实战";
contentList[21] = "【第22周】Linux环境搭建与Redis应用";
contentList[22] = "【第23周】Spring基础";
contentList[23] = "【第24周】Spring基础";
contentList[24] = "【第25周】Spring基础";
contentList[25] = "【第26周】SSM开发社交网站";
contentList[26] = "【第27周】Spring Boot电商项目实战";
contentList[27] = "【第28周】Spring Boot电商项目实战";
contentList[28] = "【第29周】面试";
contentList[29] = "【第30周】多线程与分布式";
contentList[30] = "【第31周】多线程与分布式";
contentList[31] = "【第32周】Spring Cloud基础";
contentList[32] = "【第33周】Spring Cloud电商实战";
contentList[33] = "【第34周】Spring Cloud电商实战";
contentList[34] = "【第35周】Zookeeper+Dubbo应用与面试";
//提示信息
System.out.print("您要开始第几周学习啦,直接输入数字吧:");
//设置变量存储接收到的数据
int num = new Scanner(System.in).nextInt();
//计算今天是几月(1-月第一周、4-月第4周)
int month=0;
month=(num-1)/4+1;
//计算输入的周是这个月的第几周
int week=0;
week=num%4;
//提示信息
System.out.println("以下是您本月的学习计划, √ 代表当周学习任务");
System.out.println("=======================================");
//利用for循环,找到数组中对应这个月的内容输出
if(month==1){
for (int i = 0; i <4 ; i++) {
if(week==(i%4+1)){
System.out.print("√"+contentList[i]);
}
System.out.println(contentList[i]);
}
}
if(month==2){
for (int i = 4; i <8 ; i++) {
if(week==(i%4+1)){
System.out.print("√"+contentList[i]);
}
System.out.println(contentList[i]);
}
}
if(month==3){
for (int i = 8; i <12 ; i++) {
if(week==(i%4+1)){
System.out.print("√"+contentList[i]);
}
System.out.println(contentList[i]);
}
}
if(month==4){
for (int i = 12; i <16 ; i++) {
if(week==(i%4+1)){
System.out.print("√"+contentList[i]);
}
System.out.println(contentList[i]);
}
}
if(month==5){
for (int i = 16; i <20 ; i++) {
if(week==(i%4+1)){
System.out.print("√"+contentList[i]);
}
System.out.println(contentList[i]);
}
}
if(month==6){
for (int i = 20; i <24 ; i++) {
if(week==(i%4+1)){
System.out.print("√"+contentList[i]);
}
System.out.println(contentList[i]);
}
}
if(month==7){
for (int i = 24; i <28 ; i++) {
if(week==(i%4+1)){
System.out.print("√"+contentList[i]);
}
System.out.println(contentList[i]);
}
}
if(month==8){
for (int i = 28; i <32 ; i++) {
if(week==(i%4+1)){
System.out.print("√"+contentList[i]);
}
System.out.println(contentList[i]);
}
}
if(month==9){
for (int i = 32; i <35 ; i++) {
//根据当前月第几周,在输出此行时,前面添加“√”
if(week==(i%4+1)){
System.out.print("√"+contentList[i]);
}
System.out.println(contentList[i]);
}
}
}
}
错在:我不知道怎么去循环找到月份,所以去一个一个的循环,主要是没有理解了循环的意义。应该是为循环变量设置良好的初始值和循环次数,结合if条件找到和 输入值对应月份 相同的用循环变量表示的月份, 就是找到了那个月份。这也是定义了month这个变量的原因。
循环体中我没有想到,使用了暴力枚举,但是实际可以这种表示:
for(int i=(month-1)*4;i<month*4;i++);
但是存在的bug:
如果输入第35周以后的数字:会越界。可以使用try catch处理异常。
我的第二个正确代码:
package javademo;
import java.util.Scanner;
public class Arrays06 {
public static void main(String[] args) {
//创建String数组,并为每一个元素赋值。赋值内容为第几周+学习内容
String[] contentList = new String[35];
contentList[0] = "【第1周】环境搭建与语法入门";
contentList[1] = "【第2周】Java语法之循环、数组与方法";
contentList[2] = "【第3周】面向对象之封装与继承";
contentList[3] = "【第4周】面向对象之单例模式与多态";
contentList[4] = "【第5周】常用工具类(上)";
contentList[5] = "【第6周】常用工具类(下)";
contentList[6] = "【第7周】常用工具类(下)";
contentList[7] = "【第8周】前端基础之HTML与CSS";
contentList[8] = "【第9周】前端基础之JavaScript与综合案例";
contentList[9] = "【第10周】Java Web基础";
contentList[10] = "【第11周】Java Web基础";
contentList[11] = "【第12周】常用功能与过滤器";
contentList[12] = "【第13周】监听器与项目实战";
contentList[13] = "【第14周】监听器与项目实战";
contentList[14] = "【第15周】MySQL基础";
contentList[15] = "【第16周】MySQL基础";
contentList[16] = "【第17周】Java数据库开发基础";
contentList[17] = "【第18周】框架前置知识";
contentList[18] = "【第19周】MyBatis基础";
contentList[19] = "【第20周】MyBatis实现OA系统项目实战";
contentList[20] = "【第21周】MyBatis实现OA系统项目实战";
contentList[21] = "【第22周】Linux环境搭建与Redis应用";
contentList[22] = "【第23周】Spring基础";
contentList[23] = "【第24周】Spring基础";
contentList[24] = "【第25周】Spring基础";
contentList[25] = "【第26周】SSM开发社交网站";
contentList[26] = "【第27周】Spring Boot电商项目实战";
contentList[27] = "【第28周】Spring Boot电商项目实战";
contentList[28] = "【第29周】面试";
contentList[29] = "【第30周】多线程与分布式";
contentList[30] = "【第31周】多线程与分布式";
contentList[31] = "【第32周】Spring Cloud基础";
contentList[32] = "【第33周】Spring Cloud电商实战";
contentList[33] = "【第34周】Spring Cloud电商实战";
contentList[34] = "【第35周】Zookeeper+Dubbo应用与面试";
//提示信息
System.out.print("您要开始第几周学习啦,直接输入数字吧:");
//设置变量存储接收到的数据
int num = new Scanner(System.in).nextInt();
//计算今天是几月(1-月第一周、4-月第4周)
int month=0;
month=(num-1)/4+1;
//计算输入的周是这个月的第几周
int week=0;
week=num%4;
//提示信息
System.out.println("以下是您本月的学习计划, √ 代表当周学习任务");
System.out.println("=======================================");
//利用for循环,找到数组中对应这个月的内容输出
for (int i = 0; i <(contentList.length) ; i++) {
if(month==((i/4)+1)){
System.out.println(contentList[i]);
if(week==((i+1)%4)){
System.out.println("√"+contentList[i]);
}
}
}
//
}
}
心得:要学好数学,要有良好的逻辑思维才行啊。
在我的idea是可以运行出结果的,在网页慕课上报了错:
运行失败
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at HelloWorld.main(HelloWorld.java:46)
您要开始第几周学习啦,直接输入数字吧:
//设置变量存储接收到的数据
46: int nums = new Scanner(System.in).nextInt();
定义month的时候也可以用if判断一下。如果可以被4整除则month=nums/4
;如果不可以被4整除
,month=nums/4+1;