1、用户交互Scanner
java.util.Scanner是Java5的新特征,可以通过Scanner类来获取用户的输入。
-
基本语法:Scanner s=new Scanner(System.in);
-
通过Scanner类的next( )与nextLine( )方法获取输入的字符串,在读取前用hasNext( )与hasNextLine( )判断是否还有输入的数据。
-
next():一定要读取到有效字符后才可以结束输入。对输入有效字符之前遇到的空白,next()方法会自动将其去掉。只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。next()不能得到带有空格的字符串。
package com.wmj.scanner;
import java.util.Scanner;
public class Demo01 {
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);
}
//凡是属于IO流的类不关闭会一直占用资源
scanner.close();
}
}
-
nextLine():以enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。可以获得空白。
package com.wmj.scanner;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
//从键盘接收数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方式接收:");
//判断是否还有收入
if(scanner.hasNextLine()){
String str=scanner.nextLine();
System.out.println("输出的内容为"+str);
}
scanner.close();
}
}
package com.wmj.scanner;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//从键盘接收数据
int i=0;
float b=88L;
System.out.println("请输入一个整数:");
if(scanner.hasNextInt()){
i=scanner.nextInt();
System.out.println("整数数据:"+i);
}else{
System.out.println("输入的不是整数数据!!!");
}
System.out.println("请输入一个小数:");
if(scanner.hasNextFloat()){
b=scanner.nextFloat();
System.out.println("小数数据:"+b);
}else{
System.out.println("输入的不是整数数据!!!");
}
scanner.close();
}
}
package com.wmj.scanner;
import java.util.Scanner;
public class Demo04 {
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+x;
System.out.println("你输入了第"+m+"个数据,当前结果sum="+sum);
}
System.out.println(m+"个数的和为:"+sum);
System.out.println(m+"个数的平均数为:"+sum/m);
scanner.close();
}
}
2、顺序结构
JAVA的基本结构就是顺序结构。一句一句执行。是任何一个算法都离不开的一种基本算法结构。
package com.wmj.struct;
public class sequence {
public static void main(String[] args) {
System.out.println("1");
System.out.println("2");
System.out.println("3");
System.out.println("4");
}
}
3、选择结构
(1)if 单选择结构
package com.wmj.struct;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容:");
String s=scanner.nextLine();
if(s.equals("hello")){
System.out.println(s);
}
System.out.println("End");
scanner.close();
}
}
(2)if 双选择结构
package com.wmj.struct;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
//考试分数大于60及格,小于60不及格
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩:");
int score=scanner.nextInt();
if(score>60){
System.out.println("成绩合格");
}
else{
System.out.println("成绩不合格");
}
}
}
(3)if 多选择结构
package com.wmj.struct;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
//考试分数大于60及格,小于60不及格
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("成绩优秀");
} else if (score<90&&score>=80) {
System.out.println("成绩良好");
} else if (score<70&&score>=60) {
System.out.println("成绩及格");
} else if (score<60&&score>=0) {
System.out.println("成绩不及格");
} else {
System.out.println("成绩不合法");
}
scanner.close();
}
}
(4)嵌套的 if 结构
对if或if...else语句可以进行嵌套。
(5)switch 多选择结构
-
switch支持字符串String类型;
-
case标签必须为字符串常量或字面量。
package com.wmj.struct;
public class Switch {
public static void main(String[] args) {
//case穿透
//switch匹配一个具体的值
char grade='C';
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 com.wmj.struct;
public class SwitchDemo02 {
public static void main(String[] args) {
String name="王疯疯";
//JDK7的特性,表达式结果可以是字符串!!!
//字符的本质还是数字
//反编译 java--class(字节码文件)------反编译
switch(name){
case "王丰丰":
System.out.println("王丰丰");
break;
case "王疯疯":
System.out.println("王疯疯");
break;
default:
System.out.println("???!");
}
}
}
4、循环结构
(1)while 循环
-
只要布尔表达式为True,循环就会一直执行下去;
-
在大部分情况下会让循环停止下来,少部分情况需要一直循环执行,比如服务器的请求响应监听;
-
正常的编程应避免死循环,会影响程序性能。
package com.wmj.struct;
public class whileDemo01 {
public static void main(String[] args) {
//输出0-100
int i=0;
while(i<100){
i++;
System.out.println(i);
}
}
}
package com.wmj.struct;
public class WhileDemo02 {
public static void main(String[] args) {
//死循环
while(true){
//等待客户端连接
//定时检查
//
}
}
}
package com.wmj.struct;
public class WhileDemo03 {
public static void main(String[] args) {
//计算1+2+3+...+100=?
int i=0;
int sum=0;
while(i<=100){
sum=sum+i;
i++;
}
System.out.println(sum);
}
}
(2)do...while 循环
-
对于while语句,若不满足条件,则不进入循环,但有时候即使不满足条件,也至少需要执行一次;不同的是,do...while循环至少执行一次。
-
while与do...while 的区别:
(1)while 是先判断后执行,do...while是先执行后判断;
(2)do...while 总是保证循环体会被执行一次。
package com.wmj.struct;
public class DoWhileDemo02 {
public static void main(String[] args) {
int a=0;
while(a<0){
System.out.println(a);
a++;
}
System.out.println("================================");
do{
System.out.println("--------------------------------");
}while(a<0);
}
}
(3)for 循环
for循环语句(最灵活、最有效)是支持迭代的一种通用结构,for循环执行的次数是在执行前就确定的。
package com.wmj.struct;
public class ForDemo01 {
public static void main(String[] args) {
int a=1;//初始化条件
while(a<=100){ //条件判断
System.out.println(a); //循环体
a+=2; //迭代
}
System.out.println("while循环结束");
//初始化//条件判断//迭代
//100.for加上回车可自动生成for语句
for(int i=1;i<=100;i++){
System.out.println(i);
}
System.out.println("for循环结束");
/*
关于for循环的说明:
最先执行初始化步骤,可以声明一种类型,但可初始化一个或多个循环
控制变量,也可以是空语句。然后,检测布尔表达式的值,如果为true,循环体
被执行;如果为false,循环终止,开始执行循环体后面的语句。执行一次循环后,
更新循环控制变量(迭代因子控制循环变量的增减)。再次检测布尔表达式,循环
执行上面的过程。
*/
//死循环
for(;;){
}
}
}
练习1:计算0-100之间的奇数和与偶数和
package com.wmj.struct;
public class ForDemo02 {
public static void main(String[] args) {
//练习1:计算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);
}
}
练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个
package com.wmj.struct;
public class ForDemo03 {
public static void main(String[] args) {
//练习2:用while或for循环输出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();
// System.out.println("\n");
}
}
//print 输出会换行
//println 输出完不会换行
}
}
九九乘法表
package com.wmj.struct;
public class ForDemo04 {
public static void main(String[] args) {
//九九乘法表
//1.打印第一列
//2.把固定的1再用一个循环包起来
//3.去掉重复项,i<=j
//4.调整样式
for (int j = 0; j <= 9; j++) {
for (int i = 0; i <=j; i++) {
System.out.print(j+"*"+i+"="+(j*i)+"\t");
}
System.out.println();
}
}
}
-
用于数组的增强型for循环:遍历数组和集合对象
package com.wmj.struct;
public class ForDemo05 {
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]);
}
//遍历数组元素
//增强for循环
for(int x:numbers){
System.out.println(x);
}
}
}
5、break&continue
-
break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(也可用于switch语句中)
package com.wmj.struct;
public class BreakDemo01 {
public static void main(String[] args) {
int i=0;
while (i<100) {
i++;
System.out.println(i);
if(i==0){
break;
}
}
System.out.println("123");
}
}
-
continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
package com.wmj.struct;
public class ContinueDemo {
public static void main(String[] args) {
int i=0;
while(i<100){
i++;
if(i%10==0){
System.out.println();
continue;
}
System.out.println(i);
}
}
}
-
关于goto关键字 ---是JAVA的保留字,但未在语言中得到正式使用(带标签的break和continue)。
-
对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:在其中嵌套一个另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的位置。
package com.wmj.struct;
public class LabelDemo {
public static void main(String[] args) {
//打印101-150之间所有的质数
int count=0;
//不建议使用!!!!
outer:for (int i = 101; i <150; i++) {
for(int j=2;j<i/2;j++){
if(i%j==0){
continue outer;
}
}
System.out.print(i+"");
}
}
}
6、练习
打印三角形及debug
package com.wmj.struct;
public class TestDemo01 {
public static void main(String[] args) {
//打印三角形
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();
}
}
}