华清远见重庆中心—JAVA基础阶段技术总结/个人总结
文章目录
- Java基础知识
- 概述
- Java程序运行过程
- Java的分类
- Java为什么流行
- Java能够跨平台运行的原理
- JDK和JRE
- 第一个Java程序
- Java程序的运行流程
- 集成开发环境IDE
- Java程序中的注意事项
- Java程序中的注释
- IDEA快捷键
- 编程语言的命名规则
- Java中的标识符
- Java中标识符的命名规则
- Java中的数据类型
- 原始类型
- 转义字符
- 原始类型之间的数据类型转换
- 引用类型
- 变量
- 定义变量
- 给变量赋值
- 变量初始化
- 变量注意事项
- 运算符
- 算术运算符
- 关系运算符
- 逻辑运算符
- 补充:位运算符
- 赋值和复合赋值运算符
- 自增自减运算符
- 条件运算符
- 运算符的优先级
- 条件语句
- if语句
- switch语句
- if语句与switch语句的选择
- if语句和switch语句中的return关键字
- 循环
- while
- do-while
- while和do-while的区别
- for
- for循环特殊情况
- 循环控制
- break和return
- continue
- 循环总结
- 循环嵌套
- 穷举法
- 数组
- 概念
- 关于数组
- 定义数组
- 数组初始化
- 定义数组的同时初始化
- 给数据赋值
- 动态赋值
- 静态赋值
- 注意
- 读取数组中的元素
- 可以通过循环给数组赋值和读取元素
- 增强for循环
- 冒泡排序
- 数组工具类Arrays
- 学习的sample
- 定义变量表示一个小写字母,输出它的大写形式
- 控制台输入圆的半径,计算圆的周长和面积并输出
- 控制台输入3个数,输出最大值、最小值、总和和平均值
- 控制台输入1个4位数,输出所有数之和
- 控制台输入金额,根据金额输出吃什么
- 用空格切分字符串并输出
- 打印如下菜单
- 输入一个四位号码,判断个位和百位之和
- 输入年份和月份,输出共多少天
- 1000~1999中有两个数字相同的次数(1个数字)
- 打印99乘法表
- 计算1!+2!+...+10!
- 猴子吃桃。假如一只猴子第一天摘了若干桃子,吃了一半多一个,第二天继续吃了剩下的一半多一 个。。。到第十天吃了最后一个。第一天摘了几个?
- 打印1-10000以内的完数。完数:如果一个数的非自身因子和等于它本身,这个数称为完数。 如6的因子1+2+3=6,所以称6是一个完数 如28的因子1+2+4+7+14=28,所以称28是一个完数
- 实现猜数游戏
- 实现石头剪刀布游戏
- 模拟双色球开奖购买
- 学习中遇见的问题
- Scanner输入问题使用方法netInt()后netLine()会为空
- ArrayIndexOutOfBoundsException数组索引错误
- 错题解析
- 基础总结
Java基础知识
概述
Java是1995年Sun公司发布,如今被Oracle收购
下载安装Java时从Oracle官网下载,最好下载LTS长期维护版本。Java8,Java11,Java17
Java是一门半编译半解释的面向对象语言
由于Java虚拟机JVM的存在,可以全平台运行。
Java程序运行过程
public class Test{public static void main(String[] ars){System.out.println("Hello world");}
}
编辑的是.java文件,称为源文件。通过javac命令进行编译,生成同名的 .class字节码文件,再虚拟机上解释该文件运行。
Java的分类
JavaSE
JavaEE
JavaME
JavaME称为Java微型版,用于开发移动应用,早期的塞班系统中会使用,如今已经淘汰
JavaSE称为Java标准版,是java的核心和基础,也是JavaME和JavaEE的核心。可以用于开发桌面端程序。如IDEA就是用java开发的。
JavaEE称为Java企业版,用于开发WEB应用。Java 的留下全靠JavaEE。WEB应用如门户网站、电子商务、电子政务等服务器都是由JavaEE实现。
Java为什么流行
java是一门“半解释半编译”的“面向对象”语言
java有很多优点,尤其是这几点:
简单
安全
开源
多线程
半解释半编译
面向对象
Java能够跨平台运行的原理
Java有一个最大的特点就是跨平台:“一处编译,处处运行”。
Java有一个核心:JVM,Java Virtual Machine称为Java虚拟机,它用于解释Java的字节码文件。
在不同的平台上,安装JVM后,就能解释当时编译的字节码文件。
开发人员在编辑Java代码后,会保存为.java的源文件,
将源文件金国编译后,会生成。class的字节码文件,
由JVM解释字节码文件。
安装Java后,会安装JVM和JRE。
JDK和JRE
JDK全程Java开发工具包Java Development Kit。包含了JRE,Java的调试、编译等工具。
JRE全程Java运行环境Java Runtime Environment。包含了JVM,java运行工具等。
(jdk(jre(jvm)))
第一个Java程序
public class Main {public static void main(String[] args) {System.out.println("Hello world");}
}
Java程序的运行流程
编辑.java源文件——》javac命令编译——》生产.class文件——》java命令由JVM解释运行
集成开发环境IDE
Integrated Development Environment
集成了编辑源代码、调试、运行等功能的工具称为IDE。
Java的IDE有很多,如Eclipse、MyEclipsse、STS、IDEA等都是集成开发环境。
当前的主流是IDEA。
Java程序中的注意事项
- 要写代码,必须想创建class,class称为类,是一个java程序的基本组成单位
- 每个能够运行的java程序,有且只有一个main方法,称为主方法/入口函数,是程序的启动
- 符合
- Java中的符号全部都是英文状态下的符号,可以在输入法中设置中文状态使用英文标点
- “{}”必须成对出现。用于定义类、定义方法和定义代码块
- “[]”必须成对出现。用于定义数组、使用数组
- “()”必须成对出现。用于表示方法的参数
- “空格”用于分割关键字和代码。可以是一个空格,也可以是多个
- “.”用于调用某个类或对象的属性和方法
- “;”用于表示一句代码的结束,大括号后不需要加分号
- 换行和缩进
- 在每出现一次大括号时,就要进行一次缩进
Java程序中的注释
注释可以对代码进行解释说明或屏蔽不用的代码。 编译时无视注释,注释分为
- 单行注释 快捷键:ctrl + /
//123
- 多行注释 快捷键:ctrl + shift + /
/* 123123123
*/
- 文档注释
/*** 文档注释* 通常用于解释整个java类或某个方法或某个变量,* 最终可以通过java命令自动生成文档*/
IDEA快捷键
ctrl+X 删除一行
ctrl+shift+f10 运行
ctrl+shift+方向键 移动选中的代码块
变量.sout 回车 快捷输出
ctrl+alt+L 调格式
条件 . if 快速生成if
IDEA在粘贴多行字符时自动转义符换行加拼接
编程语言的命名规则
- 驼峰命名法
如果用多个单词描述一个内容,除首字母外,其他单纯首字母大写。
如studentsName、empId
- 帕斯卡命名法
使用单词首字母去全部大写
Java中的标识符
Java中的英文、方法名和变量名称统称为标识符。
- 类名使用帕斯卡命名法
- 方法名和变量名使用驼峰命名法
- 命名时做到“见名知意”
非强制性,约定俗成的内容
Java中标识符的命名规则
- 标识符使用字母、数字、下划线和$组成
- 不能以数字开头
- 不能使用Java中的关键字(保留字)
强制要求,无法编译
Example:
类名 Test Person Animal Cat UserController StudentService
变量名 age lastName firstName
方法名 login() findEmpById(int id)
常量 COUNTRY_NAME
Java中的数据类型
Java中分为两大数据类型:原始(基本)类型和引用类型
原始类型
整型
1Byte=8bit 00000000~11111111 256
- byte
- short
- int
- long
浮点型
- float单精度浮点型,赋值时在数字后加f或F
- double双精度浮点型
字符型
- char,赋值时可以用单引号引起来的字符或一个数字,或是数字ascii中的数字或者是一个转义字符ascii码(\t、\n)
转义字符
\t
\n 换行
\"
\'
\b 退格
\r 回车
\\ 字符“\”
\0 null
- 布尔型
boolean
类型名 | 所占字节大小 | 范围 |
---|---|---|
byte | 1字节 | -128~127 |
short | 2字节 | -32768~32767 |
int | 4字节 | -2,147,483,648~2,147,483,647 |
long | 8字节 | -9,223,372,036,854,775,808~9,223,372,036,854,775,807 |
float | 4字节 | |
double | 8字节 | |
char | 2字节 | 单引号的一个字符 |
boolean | true/false |
再程序中直接写出的整数默认是int类型
再程序中直接写出的小数默认是double类型
原始类型之间的数据类型转换
- 隐式类型转换(自动)
- 整型数据可以直接保存到浮点型中
占用字节小的数据类型的变量,可以直接保持到占用字节大数据类型的变量中
short s=123;
int i=s;
- 显示类型转换
占用字节大的数据类型的变量,默认无法保持到占用字节小的数据类型的变量中,
如果要强制保存,需要强制类型转换。
语法:(目标类型)带转换的变量
int num=123;
byte a=(byte)num;//未超出范围,结果无误
byte a=(byte)128;//超出范围,溢出-128
引用类型
- 类
- 接口
- 数组
变量
在内存中的一款取悦。由于这块区域终端数据可以发送变化,所以称为变量。
内存中的变量,相当于酒店中的房间。房间的类型就是变量的类型,房间的房号就是变量的名称,房间中住的人就是变量的值。
定义变量,就是在内存中申请一块想要数据类型的空间,并对其密码的过程。
定义变量
语法:数据类型 变量名;
如果要同时定义多个相同类型的变量,可以羞恶做: 数据了些 变量名1, 变量名2.。。;
如
//年龄
int age=18;
//年月日
int year;
int month;
int day;
//利率
double interestRate;
//电话号码
String phoneNumber;
给变量赋值
语法:变量名 = 值;
int i;
i=10;
变量初始化
语法:数据类型 变量名 = 值;
如果在定义变量的时候能确定其中保存的数据,可以直接在定义变量的时候赋值。
将定义变量和给变量赋值
int i =19;
变量注意事项
在一对大括号中变量只能出现一次
给变量赋值是,赋值符号“=”左边通常是一个变量名,右边可以是一个具体值也可以是另一个赋了值的变量名(不超出其范围),再可以是一个表达式(不超出其范围)。
如果同时定义多个类型系统的变量,可以只写一个数据类型
必须以字母、下划线、或者美元符开头;以美元符开头;以美元符开头;以美元符 开头命名的变量虽然能够编译通过但是不建议使用;
中文也可以作为命名开头且编译也能通过,但是不建议使用。
除开头外后面的部分可以有字母、下划线、美元符$以及数字组成;
虽然变量名不限制长度,但能表达清楚命名的含义即可;
变量名不可以和java的关键字冲突;
再命名中大小写是又区别的,即使由同一个单词命名但是有个别字母的大小写的区别,产生的就是两个不同的变量。
int a=1,b=2,c=3,d=4,e=5,f=6;
运算符
算术运算符
需要两个操作数参与,如果由浮点数参与运算,结果为浮点型。
符号 | 作用 | 说明 |
---|---|---|
+ | 加 | 如果两个操作数都是数值型的数据,+用于计算。如果两个操作数有一端是字符串,+用于拼接字符串。 |
- | 减 | 只能用于数值型数据。 |
* | 乘 | 只能用于数值型数据。 |
/ | 除 | 只能用于数值型数据。如果两个整数相除,结果只保留整数部分(商)。 |
% | 模 | 只能用于数值型数据。商一定是整数。 |
注意
- 如果同时多个符号一起使用,遵循数学中的四则运算规则,先乘除,后加减
- 运算时最终结果的数据类型,以所以参与运算的操作数中所占字节最大的类型为准
关系运算符
需要两个操作数参与
符号 | 作业 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
!= | 不等于 |
== | 等于 |
注意
==用于判断相等,=用于赋值
==用于比较两个原始类型的值或引用类型的内存地址
关系运算的结果为true/false
逻辑运算符
符号 | 作业 | 说明 |
---|---|---|
&& | and与 | 符号两端需要两个表达式,判断如果都为true,整体结果则为true,如果有一段姐夫哦为false整体结果为false。 |
|| | or或 | 符号垄断需要两个表达式,判断如果都为false,整体结果则为false,如果有一端结果为true,整体结果为true。 |
! | not非 | 是一个弹幕运算符,只有一个表达式参与运算。“!表达式”不是对原表达式的结果取相反值。 |
补充:位运算符
符号 | 作业 |
---|---|
& | 按位与。计算的结果与&&相同,但过程不同。符号两端的表示都会执行判断。 |
| | 按位或。计算的结果与||相同,但过程不同。符号两端的不是都会执行判断。 |
^ | 按位异或。将操作数转换为二进制后,按位比较,如果相同结果为0,不同结果为1,最终二进制结果转换为十进制。 |
>> | 按位右移。将第一个操作数转换为二进制后,向右移第二个这才是对于的位数,再将结果装换位十进制。 |
<< | 按位左移。 |
注意
- &&和||也称为短路运算。如果能通过第一个表达式觉得最终的结果,则不用判断第二个表达式。
- 通常情况下,使用&&和||提高代码执行效率。
赋值和复合赋值运算符
符号 | 作用 |
---|---|
= | 赋值运算符。将符号右侧的内容赋值给符号左侧的变量。 |
+= | 复合赋值运算符。i+=3;相当于i=i+3; |
-= | i-=1; == |
*= | |
/= | |
%= |
注意
复合赋值运算的流程是:
将符号两端的整体进行对应的算数运算后,将结果赋值给符号左侧的变量中。
自增自减运算符
只有一个操作数参与运算,称为单目运算符
符号 | 作用 |
---|---|
++ | 将结果加一 |
– | 将结果减一 |
注意
- a++或++a相当于a+=1或a=a+1。–同理
- 如果++或–独立成行使用,无论符号在前在后,都将结果+1或-1
- 如果++或–不是单独成行
- 符号再去,先+1或-1计算后在使用值
- 符号灾后,先使用值后在+1或–1计算
条件运算符
三目运算符,有三个操作数参与。是一个简化版的双分支条件语句。
表达式1?表达式2:表达式3
首先运算表达式1,如果结果为true,执行问号后的表达式2; 如果结果为false,执行冒号后的表达式3。 整个表达式的最终结果为表达式2或表达3。
三位一体,运算后的值为其中范围最大的值
((x>4) ? 99.9 :9)
其结果为:9.0
运算符的优先级
小括号>>单目运算符>>算术运算符>>关系运算符>>逻辑运算符>>条件运算符>>赋值/复合赋值运算符
多种数据类型参与运算,其结果以字节最大的为准。
条件语句
if语句
- 单分支if语句
如果一件事情满足则执行
if(判断条件){//布尔值条件执行代码
}
- 双分支
if(){}else{}
- 多分支
if(){}else if(){}else if(){}else{}
- if嵌套
if(){if(){}
}
if嵌套不要嵌套太多层,会导致代码可读性变低
if嵌套可以改造成if(){return}形式,让程序满足条件时,不再执行后续内容。
注意
if或else后的大括号可以不写,但只能跟一句执行语句。
switch语句
开关语句
如果一个变量的值能够列举出时,使用switch语句更为简洁。
变量不能为Long类型
switch(变量){case 1:break;case 2:break;case 3:break;default:break;
}
注意
switch小括号中的变量只能是非long的整型、字符型char、字符串String和枚举类型
小括号中的变量类型要与case后的值的类型相匹配
如果有某个case后的内容和变量值匹配,执行case后的代码,如果没有任何case匹配,执行 default后的代码
break和default可以省略。如果不写break,在某个case匹配时,执行玩相应的代码后继续执行后 续case后的代码,直到遇到break或没有代码为止
如果多个case后执行的内容一致,可以省略break,将统一要做的代码放在最后的case后
if语句与switch语句的选择
- 如果条件能够一一列举出来时,使用switch语句更为简洁
- 如果条件是一个范围是,中年使用if语句,如大于100
- switch语句可以改为if语句,if语句不一定能改为switch语句
if语句和switch语句中的return关键字
- if语句中可以使用return关键字不在执行后续的代码。可以使用这一点将原本的嵌套改成if-return的形式。
int a=3,b=4,c=5;
if(a+b<=c || a+c<=b || b+c<=a){System.out.println("不能组成三角形");
return;
}
if(a==b && b==c){System.out.println("等边");
}else if(a==b || a ==c || b==c){System.out.println("等腰");
}else{System.out.println("普通");
}
- switch语句中,也可以使用return,但会造成switch语句之后的代码不执行,所以一般不在switch 语句中使用return;
循环
如果要重复执行某些代码时,使用循环语句。
while
while(循环条件){//小括号中的条件结果为boolean值
满足循环条件时重复执行的代码
}
执行流程 先执行小括号中的内容,如果结果为true,执行大括号中的内容,再循环执行小括号中的内容,判断如 果为false则停止循环。
while循环有可能一次都不执行。
do-while
do{满足循环条件时重复执行的代码
}while(循环条件);
执行流程 先执行一次do大括号中的内容,再判断while小括号中的内容,如果成立,再次执行do大括号中的内 容,如果不成立,停止循环。
do-while循环至少执行一次
while和do-while的区别
while循环可能一次都不执行,do-while循环至少会执行一次
for
//表达式1为定义循环变量
//表达式2为判断循环条件
//表达式3为更新循环变量
for(表达式1;表达式2;表达式3){循环体
}
执行流程 首先执行表达式1,再执行表达式2,如果表达式2的结果为true,执行循环体,再执行表达式3,再执行 表达式2判断,如果表达式2的结果为false,结束循环
for循环特殊情况
//for循环特殊情况
//可以使用外部定义的循环变量
int i = 0;
for (;i<=10;i += 2) {System.out.println(i);
}
//可以在循环体重更新循环变量
int i = 0;
for (;i<=10;) {System.out.println(i);
i += 2;
}
//两个分号必不可少,如果都不写表达式,是一个死循环
int i = 0;
for (; ; ) {if (i > 10) {break;
}
System.out.println(i);
i += 2;
}
循环控制
break和return
所有的循环都可以使用break和return停止循环。
break是停止循环后,继续执行循环之外的内容。
return是结束方法,不再执行return之后的内容。
continue
在循环语句中,使用continue,可以停止本次循环,不再执行continue之后的代码,直接进行下一次循环。
循环总结
如果已知循环次数,推荐使用for循环。如遍历数组、集合等。
如果未知循环次数,推荐使用while循环。 while循环和for循环可以相互转换
do-while循环至少执行一次,for循环和while循环有可能一次都不执行
循环嵌套
如果一个重复的过程还需要将其整体重复执行时,可以使用循环嵌套。
如循环判断密码是否输入正确,正确后循环打印功能菜单。
循环嵌套就是循环一个循环。
//用*打印矩形
//将循环一行这件事再循环5次
for (int n = 1; n <= 5; n++) {//循环打印一行
for (int i = 1; i <= 10; i++) {System.out.print("*");
}
System.out.println();
}
穷举法
将所有可能的情况一一列举出来
//鸡兔同笼 笼子里有若干鸡和兔,头一共35,腿一共94,鸡兔各几只?
for (int ji = 0; ji <= 35; ji++) {for (int tu = 0; tu <= 35; tu++) {if (ji + tu == 35 && 2 * ji + 4 * tu == 94) {System.out.println("鸡:" + ji + "兔:" + tu);}}
}
//百元买百蛋 花够100元买够100个蛋 鸡蛋3个1元 鸭蛋1个3元 鹅蛋1个5元
for (int jd = 0; jd <= 100; jd++) {for (int yd = 0; yd <= 100; yd++) {for (int ed = 0; ed <= 100; ed++) {//整数间相除为整数,这里鸡蛋的价格需要用浮点数表示if (jd + ed + yd == 100 && 3 * yd + 5 * ed + jd / 3.0 == 100){System.out.println("鸡蛋:" + jd + "鸭蛋:" + yd + "鹅蛋:" + ed);}}}
}
数组
概念
一组类型相同的数据的有序集合。
关于数组
实际在内存中是一块连续的空间。是保存数据的区域
数组定义是需要确定大小和数据类型,不可改变
定义数组是的变量保存的是实际内存空间的地址。
实际中保存的数据称为元素,每个元素 有一个唯一的位置,称为索引(下标)从0开始。
可以通过数组的索引给数组赋值或读取数组中某个索引的值。
定义数组
数据类型[] 数组名 =new 数据类型[数组大小];
数组初始化
语法:数组名 = new 数据类型[数据大小];
数据类型[] 数组名 =new 数据类型[]{元素1,元素2,元素3、、、};
数据类型[] 数组名 ={元素1,元素2,元素3.。。。};
//定义一个保存数组的变量nameList
String[] nameList;
//在内存中申请一块连续空间,将这个空间的地址板寸到变量nameList中
nameList = new String[10];
定义数组的同时初始化
语法:数据类型[] = new 数据类型[数据大小];
double[] = new double[10];
给数据赋值
动态赋值
int[] list = new int[10];
list[0]=123;
list[1]=123;
list[2]=123;
静态赋值
注意
- 数组一但初始化后,数组大小不能该v,其中的元素类型要统一
- 数组的索引范围是[0,大小-1],使用时不能超出范围。在编译时无法识别的是否超出,但运行时会抛出“数组索引溢出”异常
- 数组一但初始化后,如果没有赋值,默认有初始值
- 数组可以通过“数组名.length()”获取长度
数组数据类型 | 默认值 |
---|---|
String 引用类型 | null |
Int 整型 | 0 |
boolean | false |
char 字符 | 空白字符 |
float 浮点 | 0.0 |
读取数组中的元素
通过"数组名[索引]"来读取元素
String[] nameList={"王海","刘涛","赵敏"};
System.out.println(nameList[0]);
System.out.println(nameList[1]);
System.out.println(nameList[2]);
可以通过循环给数组赋值和读取元素
//定义一个数组保存同学的姓名,循环接收后打印所有。
Scanner sc = new Scanner(System.in);
//定义数组
String[] stuName = new String[3];
//循环赋值
for (int i = 0; i < 3; i++) {System.out.println("请输入第"+(i+1)+"位同学的姓名");
stuName[i] = sc.next();
}
//循环读取
System.out.println("当前学生列表");
for (int i = 0; i < stuName.length; i++) {//通过“数组名.length”获取数组的长度
System.out.print(stuName[i]+"\t");
}
//增强for循环 for(数据类型 变量名 : 数组或集合){}
for (String name : stuName) {System.out.print(name + "\t");
}
System.out.println()
增强for循环
专门用于遍历数组或集合元素的一种循环 语法:for(数据类型 变量名 : 数组名){}
String[] list = {"admin","qwe","aaa"};
//使用增强for循环遍历
for(String name : list){System.out.println(name);
}
冒泡排序
数组中每相邻的两个元素进行比较,如果不满足排序的规则,交换位置。
int[] num = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};//长度-1轮for (int i = 0; i < num.length - 1; i++) {//一轮交换12次for (int i1 = 0; i1 < num.length - 1; i1++) {//交换int tem = 0;if (num[i1] > num[i1 + 1]) {tem = num[i1 + 1];num[i1 + 1] = num[i1];num[i1] = tem;}}//输出System.out.print((i + 1) + "轮");for (int a : num) {System.out.print(a + " ");}//每轮换行System.out.println();}
数组工具类Arrays
Arrays是jdk提供的用于处理数组的工具类。包含了如排序、复制、填充等方法,这些方法都是静态方 法,直接通过Arrays调用。
常用方法 | 作业 |
---|---|
sort(数组) | 将输入中的元素升序排序。 |
sort(数组,起始位置,结束位置) | 对数组中**[起始位置,结束卫视)**区间的元素升序排序 |
fill(数组,值) | 使用指定值对数组中的所有元素进行填充。 |
fill(数组,起始位置,结束位置) | 使用指定值对数组中[起始位置,结束位置)区间的元素进行填充。 |
copyOf(数组,新数组长度) | 赋值数组并指定复制后的数组的长度。得到复制后的新数组。 |
asList(一组数据) | 减一组数据装换为List集合。 |
equals(数组1,数组2) | 判断两个数字是否相同,得到判断的布尔值。一模一样才得true。 |
学习的sample
定义变量表示一个小写字母,输出它的大写形式
如定义char word=‘q’,输出Q
import java.util.Scanner;public class Work01 {public static void main(String[] args) {System.out.print("请输入一个小写字母:");Scanner scanner = new Scanner(System.in);String b = scanner.next();char c = b.charAt(0);System.out.println((char) (c-32));}
}
控制台输入圆的半径,计算圆的周长和面积并输出
如输入2,输出周长:xxxx,面积:xxxx
Scanner scanner = new Scanner(System.in);System.out.print("请输入输入圆的半径:");int a = scanner.nextInt();System.out.println("周长为:"+Math.PI*2*a+"面积为:"+a*a*Math.PI);
控制台输入3个数,输出最大值、最小值、总和和平均值
如输入1,2,2,输出最大为2,最小为1,总和为5,评价为1.7
Scanner scanner = new Scanner(System.in);System.out.print("请输入第一个数:");int a = scanner.nextInt();System.out.print("请输入第二个数:");int b = scanner.nextInt();System.out.print("请输入第三个数:");int c = scanner.nextInt();int max = a > b ? a:b;max = max > c ? max: c;int min = a > b ? b:a;min = min > c ? c: min;int sum=a+b+c;float svg=(float) sum/3;System.out.println("Max:"+max+"min:"+min+"sum:"+sum+"svg:"+svg);
控制台输入1个4位数,输出所有数之和
如输入3257,输出17
Scanner scanner = new Scanner(System.in);System.out.print("请输入一个四位数:");int a = scanner.nextInt();int ge = a%10;int shi = a/10%10;int bai = a/100%10;int qian = a/1000;System.out.println(ge+shi+bai+qian);
控制台输入金额,根据金额输出吃什么
如输入10,输出吃小面
Scanner scanner = new Scanner(System.in);System.out.println("小面10¥;抄手11¥;饺子12¥;炒饭13¥");System.out.println("您想要吃什么呢?");String a = scanner.next();if (a.equals("小面")) {System.out.println("收费10¥");} else if (a.equals("抄手")) {System.out.println("收费11¥");} else if (a.equals("饺子")){System.out.println("收费12¥");} else if (a.equals("炒饭")){System.out.println("收费13¥");}
用空格切分字符串并输出
Scanner scanner = new Scanner(System.in);System.out.print("请输入输入:");String a = scanner.nextLine();String [] arr = a.split("\\s+");System.out.println(arr.toString());for(String ss : arr){System.out.println(ss);}
打印如下菜单
请选择功能:
1:注册
2:登录
3:退出
输入:1
进入注册功能/*** 请选择功能:* 1:注册* 2:登录* 3:退出* 输入:1* 进入注册功能*/System.out.println("请选择功能:\n" +"1:注册\n" +"2:登录\n" +"3:退出\n");Scanner scanner = new Scanner(System.in);int a = scanner.nextInt();switch (a){case 1:System.out.println("进入注册界面");break;case 2:System.out.println("进入登录页面");break;case 3:System.out.println("您已退出");break;}
输入一个四位号码,判断个位和百位之和
8的倍数,一等奖
5,二等奖
3,三等奖
其他,谢谢参与
如输入1234,三等奖
int a = 0;Scanner scanner = new Scanner(System.in);while (a<999||a>10000) {System.out.println("输入一个四位号码");a = scanner.nextInt();}int ge = a%10, bai = a/100%10, sum=ge+bai;if (sum%8==0) System.out.println("一等奖");else if (sum%5==0) System.out.println("二等奖");else if (sum%3==0) System.out.println("三等奖");else System.out.println("谢谢参与");
输入年份和月份,输出共多少天
/*** 输入年份和月份,输出共多少天* 1、3、5、7、8、10、12是大月,有31天;2月平年是28天,闰年是29天;* 4、6、9、11是小月,有30天。*/Scanner scanner = new Scanner(System.in);System.out.print("输入年份和月份:");String a = scanner.nextLine();;String out="";String[] arr = a.split("\\s+");while (Integer.parseInt(arr[1])>12||Integer.parseInt(arr[1])<1){System.out.print("输入年份和月份:");a = scanner.nextLine();arr = a.split("\\s+");}switch (Integer.parseInt(arr[1])){case 1:case 3:case 5:case 7:case 8:case 10:case 12:out = "31";break;case 4:case 6:case 9:case 11:out = "30";break;case 2:if (isRunnian_v2(Integer.parseInt(arr[0]))) out = "29";else out = "28";break;}System.out.println(arr[0] + "年的"+ arr[1] +"月有" + out + "天");
isRunnian_v2()
public static boolean isRunnian_v2(int year){boolean a = false;a = (year%4==0&&year%100!=0)||year%400==0?true:false;return a;}
1000~1999中有两个数字相同的次数(1个数字)
/*** 1000~1999中有两个数字相同的次数(1个数字)* 分析有三种形式* 1100* 1001* 1010* 每种形式的1都不能与0相同* 1100 一位!=三位&&一位!=四位 && 二位!=三位&& 二位!=四位*/int num=0;for (int i = 1000; i < 2000; i++) {int ge = i%10;int shi = i/10%10;int bai = i/100%10;int qian = i/1000;if(qian==bai&&shi!=ge&&qian!=shi&&qian!=ge&&bai!=shi&&bai!=ge || qian!=bai&&shi==ge&&qian!=shi&&qian!=ge&&bai!=shi&&bai!=ge || bai==shi&&qian!=ge&&bai!=qian&&bai!=ge&&shi!=qian&&shi!=ge || bai!=shi&&qian==ge&&bai!=qian&&bai!=ge&&shi!=qian&&shi!=ge || qian==shi&&bai!=ge&&qian!=bai&&qian!=ge&&shi!=bai&&shi!=ge || qian!=shi&&bai==ge&&qian!=bai&&qian!=ge&&shi!=bai&&shi!=ge){//个位与十位相同num++;System.out.print(i+" ");if(num%30==0) System.out.println("");}}System.out.println(num);
打印99乘法表
/*** 99乘法表*/for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {System.out.print(j + "*" + i + "=" + i * j + "\t");}System.out.print("\n");}
计算1!+2!+…+10!
/*** 1!+2!+3!++++10!==?*/int sum = 0;//最终for (int i = 1; i <= 10; i++) {int sum1 = 1;//阶乘for (int j = 1; j <= i; j++) {sum1*=j;//}System.out.println(i+"的阶乘:"+sum1);sum+=sum1;}System.out.println(sum);
猴子吃桃。假如一只猴子第一天摘了若干桃子,吃了一半多一个,第二天继续吃了剩下的一半多一 个。。。到第十天吃了最后一个。第一天摘了几个?
int peach =1;//最后的桃子for (int i = 9; i > 0; i--) {peach=(peach+1)*2;System.out.println("第"+ i +"天,有"+ peach +"桃子");}System.out.println("共有:"+peach);
打印1-10000以内的完数。完数:如果一个数的非自身因子和等于它本身,这个数称为完数。 如6的因子1+2+3=6,所以称6是一个完数 如28的因子1+2+4+7+14=28,所以称28是一个完数
for (int i = 1; i < 10000; i++) {int sum = 0;for (int j = 1; j < i; j++) {if (i%j==0)sum+=j;}if (sum==i){System.out.print(i+" ");}}
实现猜数游戏
选择难度:简单[1,100],困难:[1,1000],地狱:[1,10000],生成指定范围内的一个数
进行猜数,如果正确游戏结束,如果错误,继续猜并告知猜大了还是小了
根据猜对时所用的次数输出中几等奖
Scanner s = new Scanner(System.in);System.out.println("你想和我玩个游戏吗??????????????????\nYES or NO");if (s.next().toUpperCase().equals("YES")) {boolean flag = true;System.out.print("欢迎来到幸运儿的游戏!!你会有三个选择:\n1.噩梦:你将在1 ~ 9999999中选择\n2.普通:你将在1 ~ 9999中选择\n3.简单:你将在1 ~ 99中选择\n请做出你的选择:");//模式int mode = 0;//范围int end = 1;//次数int times = 0;switch (s.nextInt()) {case 1:end = 9999999;break;case 2:end = 9999;break;case 3:end = 99;break;default:flag = false;System.out.println("看来你是不想玩这个游戏!!!");break;}while (flag) {//随机数生成Random rd = new Random();int suijis = rd.nextInt(end) + 1;//System.out.println(suijis + "test");//重复玩循环boolean flag1 = true;while (flag1) {System.out.print("那唯一的数字是??--");//猜数字int a = s.nextInt();//次数times++;if (a == suijis) flag1 = false;else if (a > suijis) System.out.println("大了");else if (a < suijis) System.out.println("小了");}if (times == 1) System.out.println(times + "次!你就是天选!");else if (times > 1 && times <= 3) System.out.println(times + "次!这就是命中注定!");else if (times > 3 && times <= 6) System.out.println(times + "次!平庸之辈!");else if (times > 6 && times <= 10) System.out.println(times + "次!下下之选!");else System.out.println(times + "次!你玷污了我的游戏!");System.out.println("再来一次??");if (s.next().toUpperCase().equals("YES")) flag = true;else {System.out.println("那实在是太可惜了!!!!!!!!!!!!!!!");flag = false;}}} else {System.out.println("那实在是太可惜了!!!!!!!!!!!!!!!");}
实现石头剪刀布游戏
用1-2-3表示石头-剪刀-布
用户每次输入一个数,电脑每次自动生成一个数,根据游戏规则判断输赢
三局两胜
Scanner s = new Scanner(System.in);System.out.println("石头剪刀布!听过起来很简单对吧!你有三次机会!?");Random rd = new Random();String[] arr = {"石头", "剪刀", "布", "输了", "赢了", "平局"};boolean flag1 = true;while (flag1) {boolean flag = true;//次数int a = 0;//赢得次数int c = 0;//平局次数int d = 0;//重复玩System.out.println("1.石头\n2.剪刀\n3.布");while (flag) {if (a > 2) break;//随机int suiji = rd.nextInt(3);int suiji1 = rd.nextInt(3);System.out.print("第" + (a + 1) + "把,我出的是" + arr[suiji1] + "你呢?!你的选择是?:");//输入int shuru = s.nextInt();a += 1;switch (shuru) {//你出石头case 1://判断switch (suiji) {//随机石头case 0:System.out.println(arr[5]);if (suiji != suiji1) System.out.println("有点脑子!");d++;break;//随机剪刀case 1:System.out.println("你" + arr[4]);if (suiji != suiji1) System.out.println("有点脑子!");c++;break;//随机布case 2:System.out.println("你" + arr[3]);if (suiji != suiji1) System.out.println("骗到你了!!我出的是" + arr[suiji]);break;}break;//你出剪刀case 2:switch (suiji) {//随机剪刀case 1:System.out.println(arr[5]);if (suiji != suiji1) System.out.println("有点脑子!");d++;break;//随机布case 2:System.out.println("你" + arr[4]);if (suiji != suiji1) System.out.println("有点脑子!");c++;break;//随机石头case 0:System.out.println("你" + arr[3]);if (suiji != suiji1) System.out.println("骗到你了!!我出的是" + arr[suiji]);break;}break;//你出布case 3:switch (suiji) {//随机石头case 2:System.out.println(arr[5]);if (suiji != suiji1) System.out.println("有点脑子!");d++;break;//随机剪刀case 0:System.out.println("你" + arr[4]);if (suiji != suiji1) System.out.println("有点脑子!");c++;break;//随机布case 1:System.out.println("你" + arr[3]);if (suiji != suiji1) System.out.println("骗到你了!!我出的是" + arr[suiji]);break;}break;default:System.out.println("再给你一次机会!");flag = false;break;}}if (c == 2 || c == 3 || c == 1 && d == 2) System.out.println("这局是你赢了!");else if (c == 1 && d == 1 || d == 3) System.out.println("我们打平了!");else System.out.println("你输掉了这局");System.out.println("再玩Y/N?");if (s.next().toUpperCase().equals("Y")) flag1 = true;else flag1 = false;}
模拟双色球开奖购买
//xuanze:选择的模式手动和机选 kaijiangsleeptime:选择后多久开奖suijisseqiusleeptime:开奖显示速度public static int[] abc(int xuanze, int kaijiangsleeptime, int suijisseqiusleeptimetime) throws InterruptedException {int[] tongji = new int[7];System.out.print("\n====================================\n1.自选\n2.机选\n选择:\n");Scanner s = new Scanner(System.in);Scanner s1 = new Scanner(System.in);//自选或机选int xz = 0;//控制台输入//xz = s.nextInt();xz = xuanze;//机选测试//选择后的数组int[] xuanzeseqiu = new int[7];if (xz == 1) {//自选数组int[] zxseqiu = new int[7];//只装6位for (int i = 0; i < zxseqiu.length - 1; i++) {System.out.println("选择" + (i + 1) + "第个红球:");//装入zxseqiu[i] = s.nextInt();//大于31,小于1if (zxseqiu[i] > 31 || zxseqiu[i] < 1) i--;//重复for (int j = 0; j < i; j++) {if (zxseqiu[i] == zxseqiu[j]) i--;}}int lanqiu = 0;System.out.println("选择蓝球:");lanqiu = s.nextInt();while (lanqiu < 1 || lanqiu > 16) {System.out.println("蓝球有误!\n选择蓝球:");lanqiu = s.nextInt();}zxseqiu[6] = lanqiu;//自选色球传给选择后的数组xuanzeseqiu = zxseqiu;System.out.println("您自选的号码如下:");showseqiu(zxseqiu, 0);} else if (xz == 2) {//机选int[] jxseqiu = new int[7];jxseqiu = seqiu();//机选色球传给选择后的数组xuanzeseqiu = jxseqiu;showseqiu(jxseqiu, 0);} else {System.out.println("ERROR");}System.out.println("\n!!!!!!即将开奖!!!!!!");Thread.sleep(kaijiangsleeptime);//随机色球int[] kaijiang = seqiu();showseqiu(kaijiang, suijisseqiusleeptimetime);//红球中的位数int red = 0;//中奖信息String info = "";//那外层for一个一个跟内层for比较(6位red),红球中的位数++for (int i = 0; i < xuanzeseqiu.length - 1; i++) {for (int i1 = 0; i1 < kaijiang.length - 1; i1++) {if (xuanzeseqiu[i] == kaijiang[i1]) red++;}}//判断//中了蓝球if (xuanzeseqiu[6] == kaijiang[6]) {switch (red) {case 0:case 1:case 2:info = "六等奖";tongji[6]++;break;case 3:info = "五等奖";tongji[5]++;break;case 4:info = "四等奖";tongji[4]++;break;case 5:info = "三等奖";tongji[3]++;break;case 6:info = "一等奖";tongji[1]++;break;}} else { //没中蓝球switch (red) {default:info = "倒霉蛋就是你!";tongji[0]++;break;case 4:info = "五等奖";tongji[5]++;break;case 5:info = "四等奖";tongji[4]++;break;case 6:info = "二等奖";tongji[2]++;break;}}System.out.println("\n" + info);for (int i : tongji) {System.out.print(i + " ");}return tongji;}
//生成双色球数组
public static int[] seqiu() {int[] qiu = new int[7];Random rd = new Random();qiu[6] = rd.nextInt(15) + 1;//外层输入数组for (int i = 0; i < qiu.length - 1; i++) {//装进去qiu[i] = rd.nextInt(30) + 1;//循环检测在i之前的数是否重复,j从索引0开始一直到i索引,如果重复,此次输入作废for (int j = 0; j < i; j++) {if (qiu[i] == qiu[j]) i--;}}return qiu;}
//显示public static void showseqiu(int[] qiu, int showsudo) throws InterruptedException {for (int i = 0; i < qiu.length; i++) {if (i == 0) {Thread.sleep(showsudo);System.out.print("红球号码:");}if (i == 6) {System.out.print("\n蓝球号码:");}Thread.sleep(showsudo);System.out.print(qiu[i] + " ");}}
//统计100次
int[] a = new int[7];int[] b = new int[7];for (int i = 0; i < 100; i++) {a = abc(2, 0, 0);for (int j = 0; j < 7; j++) {b[j]+=a[j];}}System.out.println("\n====================================");for (int i : b) {System.out.print(i + " ");}
100次只有6次六等奖
学习中遇见的问题
Scanner输入问题使用方法netInt()后netLine()会为空
ArrayIndexOutOfBoundsException数组索引错误
数组的索引下标为0~长度-1,因为直接访问Array[数组长度]索引报错,访问在范围内即可解决。
数组名[数组名.length-1];
错题解析
以下哪个数据无法使用char类型保存:c
A. ‘a’ B. 100 C. “a” D. ‘\n’
这题靠的是char类型能存储的数据,
- char:赋值时可以单引号引起来的字符或一个数字,或是数字ascii中的数字或者是一个转义字符ascii码
编译运行以下程序后,关于输出结果的说明正确的是:c
public static void main(String args[ ]){
int x=4;
System.out.println(“value is “+ ((x>4) ? 99.9 :9));
}
A.输出结果为:value is 99.99 B.输出结果为:value is 9
C.输出结果为:value is 9.0 D.编译错误
- 三位一体,运算后的值为其中范围最大的值
以下对变量名的定义无法通过编译的是:d
A.$abc B. abc123 C. _a_b_c D.123abc
必须以字母、下划线、或者美元符$开头;以美元符$ 开头命名的变量虽然能够编译通过但是不建议使用;
中文也可以作为命名开头且编译也能通过,但是不建议使用。
下列代码段的输出结果是:c
public static void main(String[] args) {
int x = 5;
boolean b1 = true;
boolean b2 = false;
if ((x >= 4) && !b2)
System.out.print("1 ");
if (b1 && b2)
System.out.print(“3”);
System.out.print("2 ");
}
A. 2 B. 1 C. 1 2 D. 2 3
- 太不细心了第二个if后没有大括号
下列代码段编译和运行的结果是:d
public static void main(String[] args) {
for (int i = 0; i <= 10; i++) {
if (i > 6) break;
}
System.out.println(i);
}
A.输出 6 B.输出 7 C.输出 10 D.编译错误
- 输出在for循环外,变量i未定义
基础总结
因为是科班更多的是复习了一遍Java基础,理解起来很简单,要注意的是逻辑思维的锻炼,怎么用分支,怎么用循环,一个业务的整体逻辑要通顺,最好不要边写边想,用中文注释把流程走一遍了来,按着注释来写,再具体问题具体解决,千万不要,边想边写,写到一半发现整体逻辑错了,或漏了一些功能,太费时间了,也不要一个人闷头一个人想逻辑,借助网络,你所遇到的困难,你的前辈一定遇见过,多善于使用搜索引擎,这并不可耻。
再就是做题的问题,说实话IDE用多了,在纸上的代码就看起来不舒服了,做题的时候就会把{}漏看掉,没有缩进也会不好阅读,看来要锻炼下。以上
华清远见重庆中心—JAVA基础阶段技术总结/个人总结相关推荐
- 华清远见-重庆中心-JAVA基础阶段技术总结
系列文章目录 第一章 华清远见--重庆中心-JAVA基础阶段技术总结 第二章 文章目录 系列文章目录 文章目录 前言 一.关于java 1.发展历程 2.编程开发 3.java架构 4.java的特点 ...
- 华清远见-重庆中心-JAVA基础阶段技术总结/知识点梳理/个人总结/关于JAVA技术的解析(看法)/面试题解析
Java基础知识 概述 什么是java:1.是边编译边解释的面向对象的编程语言. 2.java语言是1995年发布的,发布语言公司是:Sun 3.下载安装Java时从Oracle官网下载,最好下载LT ...
- 华清远见-重庆中心-JAVA面向对象阶段技术总结
华清远见-重庆中心-JAVA面向对象阶段技术总结 面向对象和面向过程的编程思想 面向对象(OOP) 通过创建(new)对象,赋予对象对应的行为和特征,让这些对象相互配合来解决问题 面向过程(POP) ...
- 华清远见重庆中心—后端基础阶段技术总结/个人总结
后端基础阶段技术总结 JAVA概述 1.java的历史 Oak(橡树)语言,由Green开发团队开发,主要用于微型嵌入式设备编程,第一次提出了开源协议 . Java之父 詹姆斯.高斯林 经历过Sun公 ...
- 华清远见重庆中心--后端基础阶段技术总结/个人总结
目录 目录 目录 Java基础知识 java概述 JDK安装 JDK卸载 JDK版本切换 认识JetBrains 安装IDEA IDEA环境的认识 新建一个Java的项目 新建一个文件 第一个Java ...
- 华清远见重庆中心—JAVA面向对象阶段技术总结/个人总结
课后练习回顾,疑难重点总结(二) 目录 课后练习回顾,疑难重点总结(二) 面向对象习题脉络梳理 1.模拟双色球中奖(Java基础补充) 2.模拟"电子宠物"(构造方法的应用) 小结 ...
- 华清远见-重庆中心-JAVA高级阶段技术总结/知识点梳理/面试题解析
String字符串 String是一个类,属于数据类型中的引用类型. Java中一切使用""引起来的内容,都是这个类的实例,称为字符串对象. 字符串在定义后,值不可改变,是一个常量 ...
- 华清远见-重庆中心-JAVA面向对象阶段技术总结/知识点梳理/个人总结
文章目录 面向对象 方法 概念 如何调用方法 通过类名调用 Math类 通过对象调用 在同一个类中,方法A调用方法B 自定义方法 方法的分类 总结 两种编程思想 面向过程编程 面向对象编程 不同思想处 ...
- 华清远见-重庆中心-JAVA高级阶段技术总结/知识点梳理/个人总结
文章目录 String字符串 String类使用时注意 如何创建字符串对象 1.使用""赋值创建! 2.通过构造方法创建 不同方式创建字符串的过程 使用""赋值 ...
最新文章
- 有哪些适合放在程序员办公桌上的高逼格物件?哈哈哈哈哈哈哈!
- 用Java模拟网卡、声卡继承PIC接口,实现网卡、声卡能与主板连接
- jQuery手机菜单
- VTK:可视化之LineWidth
- java:8最小镜像_Java:本地最小语言
- oracle 账户 锁定 密码忘记了,Oracle System密码忘记 密码修改、删除账号锁定lock
- 3.1_ 4连续分配管理方式
- 【java】java 并发编程 BlockingQueue 和 BlockingDeque
- Xamarin自学教程(Android)之一
- 06-图3 六度空间
- 如何从Apple电子钱包中删除旧登机牌
- 清华大学计算机相关夏令营,夏令营报名
- 江苏省专转本计算机专业大类《计算机基础理论 1.2(二)小节习题答案》
- golang中的字符串
- 西南大学计算机考研资料汇总
- 谷歌Fuchsia操作系统对编程语言的支持决议
- html2canvas做pdf导出时字体样式错乱
- 网络唤醒 php,php 远程唤醒电脑 php源码远程唤醒电脑 远程开机
- 【滴水逆向笔记】C语言指针
- spring整合mongoDB 和 Redis 极简入门