随堂笔记
Scanner对象
- 背景
(为了实现程序和人的交互)java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner是java5的新特征,我们可以通过scanner类获取用户的输入。 - 基本语法
Scanner s = new Scanner(System.in)
- 通过Scanner类的next()与nextLine()方法获取输入的字符串,在获取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。
- Next()方式接收
package Scanner;
import java.util.Scanner;//导入了scanner的包
public class D1 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner s = new Scanner(System.in);
System.out.println("使用next方式接受") ;
//判断用户有没有输入字符串
if(s.hasNext()){//判断它s是否还有下一个
//如果还有
String str = s.next() ;
System.out.println("输入的内容为:"+str);
}
//凡是属于IO流的类如果不关掉会一直占用资源,所以要养成关掉的好习惯
s.close();
}
}
运行结果:
5.NextLine()方式接收
package Scanner;
import java.util.Scanner;
public class D2 {
public static void main(String[] args) {
Scanner s= new Scanner(System.in);
System.out.println("使用nextline的方式接受");
if(s.hasNextLine()){
String str = s.nextLine();
System.out.println("接受的内容:"+str);
}
s.close();
}
}
运行结果:
6. Next()与NextLine()的区别
- Next()
- 一定要读取到有效的字符后才可以结束输入
- 对输入有效字符之前遇到的空白,Next()方法将会自动将其去掉。
- 只有输入有效字符后才将其后面输入的空白作为分隔符或结束符。
- Next()不能得到到有空格的字符串。
- NextLine()
- 以回车键为结束符,也就是说NextLine()返回的是输入回车之前的所有字符。
- 可以获得空格。
- 在IDEA里怎么查看Scanner等的源码:
- 按住ctrl鼠标右键点击
- 按住fn+f4
- 代码
package Scanner;
import java.util.Scanner;
public class D3 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int i;
float f;
if(s.hasNextInt())
{
i = s.nextInt();
System.out.println("输出的整数:"+i);
}
else
System.out.println("输入的不是整数");
if(s.hasNextFloat()){
f = s.nextFloat() ;
System.out.println("输入的小数:"+f);
}
else System.out.println("输入的不是小数");
s.close();
}
}
运行结果:
9. 小练习
package Scanner;
import java.util.Scanner;
public class D4 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
float sum=0.0f;
float avg=0.0f;
int cnt=0;
while(s.hasNextFloat()) {//如果输入的不是数字就会跳出循环,但是现在的我觉得没有c语言好用
float n = s.nextFloat() ;
sum +=n;
cnt++;
}
avg=sum/cnt;
System.out.println("和:"+sum);
System.out.println("平均数:"+avg);
s.close();
}
}
运行结果:
顺序结构
- Java的基本结构就是顺序结构,ps:除非特别说明否则都是按照顺序一句一句执行。
- 顺序结构是最简单的算法结构,它是任何一个算法都离不开的一种基本算法结构。
选择结构
- if单选择结构
if(布尔表达式){
//如果布尔表达式为true那么执行该语句
}
- if双选择结构
两者只会选择其中的一个输出
if(布尔表达式){ 1
//如果布尔表达式为true那么将执行该语句
}
else{ 2
//否则就将执行该语句(else括号内的)
}
- if多选择结构
if(布尔表达式1){ 1
//如果布尔表达式1为true,那么执行语句1
}
else if(布尔表达式2){ 2
//如果布尔表达式2为true,那么执行语句2
}
else if(布尔表达式3){ 3
//如果布尔表达式3为true,那么将执行语句3
}
else{ 4
//以上布尔表达式都不正确,那么执行语句4
}
- 嵌套的if结构
if(布尔表达式1){
//如果布尔表达式1的值为true执行代码
if(布尔表达式2){
//如果布尔表达式2的值也为true就执行该代码
}
}
- switch多选择结构
- 多选择结构还有一个实现方式就是switch case语句。
- switch case语句判断一个变量与一系列值中某一个值是否相等,每个值称为一个分支。
- switch语句中的变量类型可以是:
1. byte、short、int或者char
2. 从java SE7开始(JDK7以后支持 switch 支持字符串String类型)
3. 同时case标签必须为字符串常量或字面量。
switch(表达式){
case 值:
//语句
break;//可选
case 值:
//语句
break;//可选
defauult ://可选
//语句
}
如果没有break,那么只要它匹配成功,就会将以下的东西输出。
- 字符的本质还是数字,会生成.class文件,通过IDEA反编译,可以看到源码是啥样子。
按图片顺序完成:点击图一的图标,将图二的地址复制在此电脑中打开,然后双击图三的包,选择打开文件,然后像图四那样,将.class文件拖入.java文件中。
循环结构
- while循环
while(布尔表达式){ //循环内容 }
- 只要布尔表达式为true,循环就会一直执行下去
- 但是我们大多数情况下不会让代码一直循环,我们需要一个表达式使得循环失效,从而结束循环。
- 少部分情况需要循环一直执行,比如服务器的请求响应监听等。
- 循环条件一直为true就会造成死循环,尽量避免死循环,否则会影响程序性能或者造成程序卡死奔溃。
package ShunXu;
public class D4 {
public static void main(String[] args) {
int i=1;
int sum=0;
/*while(i<=10){
sum+=i;
++i;
}*/
sum=(1+100)*100/2;
//能用数学解就用,减少花费时间
System.out.println(sum);
}
}
- do…while循环
- do…while即使我们不满足条件,但是至少也能执行一次
do{
//代码语句
}while(布尔表达式);
- while是先判断后执行,do …while是先执行后判断。
- do…while总是保证循环体会被至少执行一次。
如下:
package ShunXu;
public class D5 {
public static void main(String[] args) {
/* int i=1;
int sum=0;
do {
sum += i;
++i;
}while(i<=100);
System.out.println(sum);
*/
int a=0;
while(a<0){
System.out.println(a);
a++;
}
System.out.println("==================================");
do {
System.out.println(a);
a++;
}while(a<0);
}
}
- for循环
for(初始值;判断式;更新)
{
//代码语句
}
嵌套类型
package ShunXu;
public class D6 {
public static void main(String[] args) {
int c=0;
for(int i=0;i<=1000;i++){
if(i%5==0&&i!=0) {
System.out.print(i + " ");
c++;
if (c % 3 == 0) {
//if(i%(5*3)==0)//表示每行三个
// System.out.print("\n");
System.out.println();//一样的换行结果
}
}
}
}
}
非嵌套类型
package ShunXu;
public class D6 {
public static void main(String[] args) {
for(int i=0;i<=1000;i++){
if(i%5==0&&i!=0) {
System.out.print(i + " ");
}
if(i%(5*3)==0)//表示每行三个
System.out.println();//一样的换行结果
println //输出会自动换行
print //输出不换行
- 增强for循环
- Java5引入了一种主要用于数组或集合的增强型for循环。
- 格式如下:
for(声明语句:表达式){
//代码句子
}
- 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配,其作用域限定在循环语句块,其值与此时数组元素的值相等。
- 表达式:表达式是要访问的数组名,或者返回值为数组的方法。
package ShunXu;
public class D8 {
public static void main(String[] args) {
int[] numbers ={10,20,30,40,50};//定义一个数组
for (int i = 0; i < 5; i++) {
System.out.println(numbers[i]);
}
System.out.println("====================");
for(int x:numbers)
System.out.println(x);
}
}
运行结构:
break、continue、goto
-
break在任何循环语句的主体部分,均可用break控制循环的过程。break用于强行退出循环,不执行循环中剩余的语句(break语句在switch语句中使用),不会终止程序。
-
continue语句在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的额判定。
-
goto
- goto关键字很早就在程序设计语言中出现,尽管goto仍是java的一个保留字,但未在语言中得到正式使用;java没有goto,然而,在break和continue这两个关键字的身上,我们仍然能看出goto的影子-------带上break和continue。
- “标签”是指后面跟一个冒号的标识符如:label
- 对java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前的循环,但若随同标签使用,他们就会中断到存在标签的地方。
package ShunXu;
public class D9 {
public static void main(String[] args) {
outer: for (int i = 101; i < 150; i++) {
for (int j = 2; j < i/2; j++) {
//如果符合if条件的,那就跳到outer那个循环
if(i%j==0)
continue outer;
}
System.out.print(i+" ");
}
}
}