Day2
Java流程控制
Scanner对象
-
可以获取用户的输入。java.util.Scanner
-
基本语法:
Scanner s = new Scanner(System.in);
-
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前一般需要使用hasNext()与hasNextLine()判断是否有输入的数据。
-
next():
- 一定要读取到有效字符串后才可以结束输入
- 对输入有效字符串之前遇到的空白,next()方法会自动去掉
- 只有输入有效字符串后才将其后面的空白作为分割符或者结束符
- next()不能得到带有空格的字符串
-
nextLine():
- 以Enter为结束符,返回的是回车之前的所有字符。
- 可以获得空白。
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args) {
//创建一个扫描对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
//判断用户有没有输入字符串
//if(scanner.hasNext()){
//使用next方式接收
// String str = scanner.next();//程序会等待用户输入完毕
// System.out.println("输出的内容为:"+str);
// }
if(scanner.hasNextLine()){
//使用nextLine方式接收
String str = scanner.nextLine();//程序会等待用户输入完毕
System.out.println("输出的内容为:"+str);
}
//凡是属于io流的类如果不关闭会一直占用资源,要养成良好习惯关掉
scanner.close();
}
}
小练习
package Day02;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
//输入多喝数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出结果:
Scanner scanner = new Scanner(System.in);
//和
double sum = 0;
//计算输入了多少个数字
int m = 0;
while (scanner.hasNextDouble()){
double x = scanner.nextDouble();
m=m+1;
sum=sum+m;
System.out.println("你输入了第"+m+"个数,当前总和为:"+sum);
}
System.out.println("总和为:"+sum);
System.out.println("平均数为:"+sum/m);
scanner.close();
}
}
流程结构
Java的流程结构可以分为: 一顺二选三循环
一个顺序结构,两个选择结构,三个循环结构。
顺序结构
除非特别指明,否则就一句话一句话往下执行。
public class ShunXuDemo {
public static void main(String[] args) {
System.out.println("hello1");
System.out.println("hello2");
System.out.println("hello3");
System.out.println("hello4");
}
}
选择结构
二选一
if单选择
package Day02;
import java.util.Scanner;
public class IfDemo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入分数:");
int score = scanner.nextInt();
if (score>60){
System.out.println("及格");
}else{
System.out.println("不及格");
}
scanner.close();
}
}
if多选择
package Day02;
import java.util.Scanner;
public class IfDemo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入分数:");
int score = scanner.nextInt();
if (score==100){
System.out.println("恭喜满分");
}else if (score<100 && score>=90){
System.out.println("A");
}else if (score<90 && score>=80){
System.out.println("B");
}else if (score<80 && score>=70){
System.out.println("C");
}else if (score<70 && score>=60){
System.out.println("D");
}else if (score<60 && score>=0){
System.out.println("不及格");
}else{
System.out.println("成绩不合法");
}
scanner.close();
}
}
多选一
package Day02;
public class SwitchDemo {
public static void main(String[] args) {
//case穿透 不加break匹配后不跳出循环 switch匹配一个具体的值
char grade = 'B';
switch (grade){
case 'A':
System.out.println("牛逼");
break;//可选
case 'B':
System.out.println("还行");
// break;//可选
case 'C':
System.out.println("可以了");
break;//可选
case 'D':
System.out.println("真菜");
break;//可选
default:
System.out.println("未知");
}
}
}
//输出结果为 还行 可以了
package Day02;
public class SwitchDemo02 {
public static void main(String[] args) {
String name = "迪迦";
//JDK7新特性,表达式结果可以是字符串
switch (name){
case "迪迦":
System.out.println("你也可以变成光");
break;
case "沃尼玛":
System.out.println("哎哟哎哟不行了");
break;
default:
break;
}
}
}
循环结构
知道循环次数
for循环
package Day02;
public class ForDemo01 {
public static void main(String[] args) {
//计算0到100之间的奇数和 偶数和
int oddSum = 0;
int evenSum = 0;
for (int i=0;i<=100;i++){
if (i%2!=0){
oddSum+=i;
}else
evenSum+=i;
}
System.out.println("奇数和为:"+oddSum);
System.out.println("偶数和为:"+evenSum);
}
}
package Day02;
public class ForDemo02 {
public static void main(String[] args) {
//输出1-1000之间能被5整除的数,并且每行输出3个
for (int i=0;i<=1000;i++){
if (i%5==0){
System.out.print(i+"\t");
}
if (i%(5*3)==0){
System.out.println();
}
}
}
}
package Day02;
public class ForDemo03 {
public static void main(String[] args) {
//打印乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i+"*"+j+"="+(i*j)+"\t");
}
System.out.println();
}
}
}
增强for循环
Java5引入了一种主要用于数组和集合的增强型for循环
package Day02;
public class Demo05 {
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("----------------------------");
//遍历数组元素 把numbers的每个元素赋值给x
for (int x:numbers){
System.out.println(x);
}
}
}
不知道循环次数
while循环
只要判断条件(布尔表达式)为true,循环就会一直执行下去。
我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环。
少部分情况需要循环一直执行,比如服务器的请求响应监听等。
循环条件一直为true就会造成无限循环(死循环),正常的业务编程中应该尽量避免死循环。否则影响程序性能或造成程序卡死崩溃。
package Day02;
public class WhileDemo01 {
public static void main(String[] args) {
//1~100的和
int i=0;
int sum=0;
while (i<=100){
sum=sum+i;
i++;
}
System.out.println(sum);
}
}
先做一次,再循环
do whlie循环
和while的区别
while先判断后执行。
do…while先执行后判断。总是保证循环体会被至少执行一次。
package Day02;
public class DoWhileDemo01 {
public static void main(String[] args) {
int i = 0;
int sum = 0;
do {
sum = sum + i;
i++;
}while (i<=100);
System.out.println(sum);
}
}
打印金字塔
package Day02;
public class TestDemo {
public static void main(String[] args) {
//打印三角形 5行
for (int i = 1; i <= 5; i++) {
for (int j = 5;j >= i; j--){
//打印空白三角形
System.out.print(" ");
}
for (int j = 1; j <= i ;j++ ){
//打印三角形
System.out.print("*");
}
for (int j = 1; j < i ;j++ ){
//打印镜像三角形
System.out.print("*");
}
System.out.println();
}
}
}
Java方法
什么是方法
Java方法是语句的集合,它们在一起执行一个功能。
-
方法是解决一类问题的步骤的有序组合
-
方法包含于类或对象中
-
方法在程序中被创建,在其他地方被引用
package Day02; public class Demo06 { //main方法 public static void main(String[] args) { int sum= add(1,2); System.out.println(sum); } //加法 public static int add(int a,int b){ return a+b; } }
设计方法的原则
方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样利于后期的拓展。
方法的定义
Java的方法类似于其他语言的函数,是用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:
-
修饰符:修饰符是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
-
返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值,这个时候的returnValueType关键字是void。
-
方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
-
参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
- 形式参数:在方法被调用时用于接收外界输入的数据。
- 实参:调用方法时实际传递给方法的数据。
-
方法体:方法体包含具体的语句,定义该方法的功能。
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
修饰符:修饰符是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
-
返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值,这个时候的returnValueType关键字是void。
-
方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
-
参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
- 形式参数:在方法被调用时用于接收外界输入的数据。
- 实参:调用方法时实际传递给方法的数据。
-
方法体:方法体包含具体的语句,定义该方法的功能。
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}