用户交互Scanner
Java.util.Scanner 是java5的新特征,可通过Scanner类来获取用户的输入
基本语法
Scanner s =new Scanner (System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前需要使用hasNext()有空格就不往下读了
与hasNextLine()判断是否还有输入往下读完判断是否还有输入数据,
import java.util.Scanner;
public class Dome01 {
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();
}
}
next()
- 一定要读取到有效的字符后才可以结束输入
- 对输入的有效字符之间遇到的空白,next()方法会自动将其去掉
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
- next()不能得到带有空格的字符串
nextLine()
- 以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
- 可以获得空白
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
//从键盘接收、
int i=0;
float f = 0.0f;
System.out.println("请输入整数");
if(scanner.hasNextInt()){
i=scanner.nextInt();
System.out.println("整数数据"+i);
}else{
System.out.println("输入的不是整数");
}
System.out.println("请输入小数");
if(scanner.hasNextFloat()){
f=scanner.nextFloat();
System.out.println("小数数据"+f);
}else{
System.out.println("输入的不是小数");
}
scanner.close();
}
}
顺序结构
- java的基本结构就是顺序结构,除非特别指明,否则就按照一句一句执行
- 顺序机构是最简单的算法结构
- 语句与语句之间,框与框之间是按从上到下的顺序进行的,由若干个依次执行的处理步骤组成,他是任何一个算法都离不开的基本算法结构
选择结构
if单选择结构
-
判断一个东西是否可行,然后才去执行,
-
语法
if(布尔表达式){
//如果布尔表达式为true将执行的语句
}
import java.util.Scanner;
public class Demo03 {
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();
}
}
if双选结构
-
语法
if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果不二表达式的值为false
}
public class Demo03 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容");
int s = scanner.nextInt();
if(s>60) {
System.out.println(s);
}else{
System.out.println("End");}
scanner.close();
}
}
if多选择机构
-
语法
if(){
}else if(){
}else if(){
}…
{
}else
public class Demo03 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容");
int s = scanner.nextInt();
if(s>80) {
System.out.println(s);
}else if(s>60&&s<80){//不严谨
System.out.println("及格");}
else{
System.out.println("不及格");
}
scanner.close();
}
}
if嵌套语句
语法
if(){
if(){
}
}
public class Demo03 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容");
int s = scanner.nextInt();
if(s<80) {
if (s > 60) {
System.out.println("及格");
}
System.out.println("不及格"+s);
}
scanner.close();
}
}
switch多选择结构
-
多选择结构 switch case
-
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值成为一个分支
-
switch语句中的变量类型可以是(byet ,short ,int,char,string)
-
语法
switch (expressio){
case value1:
语句1
break;
case value2
语句2
break;
…
default;
语句n
}
public class Demo04 { public static void main(String[] args) { String grade="c"; //case具有穿透性 switch (grade){ case "a": System.out.println("1"); break; case "b": System.out.println("2"); break; case "c": System.out.println("3"); break; default: System.out.println("4"); } } }
String是jdk7才能用的
但是字符的本质还是数字
//反编译 java—class()
public class Demo04 {
public Demo04() {
}
//反编译,对比上面出现了好多东东哦
public static void main(String[] args) {
String grade = "猫";
byte var3 = -1;
switch(grade.hashCode()) {//每个字都有一个hashCode,通过hashCode对比来判断是否相同
case 21862:
if (grade.equals("啦")) {
var3 = 0;
}
break;
case 22815:
if (grade.equals("够")) {
var3 = 1;
}
break;
case 29483:
if (grade.equals("猫")) {
var3 = 2;
}
}
switch(var3) {
case 0:
System.out.println("为i");
break;
case 1:
System.out.println("反扑");
break;
case 2:
System.out.println("猫");
break;
default:
System.out.println("4");
}
}
}
循环结构
while循环
-
结构
while(布尔表达式){
//循环内容
}
-
只要表达式为ture,循环会一直执行
-
大多数情况是想让循环停下来
-
少部分需要一直执行,如服务器的请求响应
-
循环条件一直为ture会造成无限循环(死循环)
-
例题,计算1+2+3+…100=
public class Dome01 {
public static void main(String[] args){
int i=0;
int a;
a=0;
while (i<100){
i++;
System.out.println(i);
a=a+i;
System.out.println(a);
}
}
}
do…while循环
-
至少执行一次
-
语法
do{
}while(布尔);
While和do-while的区别
- while先判断后执行,do while 是先执行后判断
- do while 保证循环体至少被执行一次
public class Dome02 {
public static void main(String[] args) {
int i=0;
int sum=0;
do {
i++;
System.out.println(i);
sum=sum+i;
System.out.println(sum);
}while (i<=99);//i<100都可
}
}
for循环
重要
- 虽然所有的循环都可以使用while和do-while表示,但是还提供了for循环,使结构变得更简单
- for循环语句是支持迭代的一种通用结构,最有效,最灵活的循环结构
- for循环执行的次数是在执行前就确实的
- 语法
for(初始化;布尔表达式;更新){
//代码
}
-
计算0到100之间的奇数和偶数的和
//偶数 public class Demo03 { public static void main(String[] args) { int sum; sum=0; for (int i=0;i<100;i=i+2){ System.out.println(i); sum=sum+i; System.out.println(sum); } } }
//奇数 public class Demo03 { public static void main(String[] args) { int sum; sum=0; for (int i=1;i<100;i=i+2){ System.out.println(i); sum=sum+i; System.out.println(sum); } } }
-
用while或for循环输出1-1000之间能被3整除的数,每行三个
public class Demo03 { public static void main(String[] args) { int sum; sum=0; for (int i=0;i<1000;i++){ if(i%5==0) { System.out.print(i+" "); } if(i%(5*3)==0){ System.out.print("\n"); } } } }
-
九九乘法表
public class Dome04 {
public static void main(String[] args) {
for (int j = 1; j <= 9; j++) {
for (int i = 1; i <= j; i++) {
System.out.print(j+"*"+i+"="+j*i+"\t");
}
System.out.println();
}
}
}
在java5中引入了一种主要用于数组的增强型for循环
-
语法
for(声明语句:表达式){
//代码语句
}
-
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等
-
表达式:是要访问的数组名,或返回值为数组的方法
public class Demo05 {
public static void main(String[] args) {
int[] n = {1, 2, 3, 4, 5, 6, 7};
//遍历数组
for (int x : n) {
System.out.println(x);
}
for (int i=0;i<n.length;i++){
System.out.println(n[i]);
}
}
}
break continue
一、break和continue的作用
break和continue都是用来控制循环结构的,主要作用是停止循环。
二、break和continue的区别
1、break用于跳出一个循环体或者完全结束一个循环,不仅可以结束其所在的循环,还可结束其外层循环。
注意:
(1)只能在循环体内和switch语句体内使用break。
(2)不管是哪种循环,一旦在循环体中遇到break,系统将完全结束循环,开始执行循环之后的代码。
(3)当break出现在循环体中的switch语句体内时,起作用只是跳出该switch语句体,并不能终止循环体的执行。若想强行终止循环体的执行,可以在循环体中,但并不在switch语句中设置break语句,满足某种条件则跳出本层循环体。
2、continue语句的作用是跳过本次循环体中剩下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为只是中止(跳过)本次循环,接着开始下一次循环。
注意:
(1)continue语句并没有使整个循环终止。
(2)continue 只能在循环语句中使用,即只能在 for、while 和 do…while 语句中使用。
三、案例分析
案例一
public class Demo05 {
public static void main(String[] args) {
for(int i=0; i<12; i++){
if(i==5){
break;
}
System.out.print(i+" ");
}
}
}
运行结果:
0 1 2 3 4
程序分析:
①程序输出了01234 到5的时候跳出了循环。
②break语句导致程序终止包含它的循环,并进行程序的下一阶段(整个循环后面的语句),即:不是跳到下一个循环周期而是退出循环。如果break语句包含在嵌套循环里,它只跳出最里面的循环。
案例二
public class Demo05 {
public static void main(String[] args) {
for(int i=0; i<12; i++){
if(i==5){
continue;
}
System.out.print(i+" ");
}
}
}
运行结果:
0 1 2 3 4 6 7 8 9 10 11
程序分析:
①可以看到只有5没有输出,也即当i=5时没有执行打印操作,直接到下一次循环。
②循环语句里有continue语句时,程序运行到此语句时,不在执行循环体里continue后面的语句而是跳到下一个循环入口处执行下一个循环。
关于goto
goto关键字,用来改变函数内代码的执行顺序,跳转到函数内指定的标签地方运行,goto不能跨函数代码块跳转。java无goto
练习
打印三角
public class Triangle {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
for (int i1 = 5; i1 >= i; i1--) {
System.out.print(" ");
}
for (int i1=1;i1<=i;i1++){
System.out.print("*");
}
for (int i1=1;i1<i;i1++){
System.out.print("*");
}
System.out.println();
}
}
}
*
***
笑死,这个MarkDowm把我的*号直接给翻成线了
块跳转。java无goto
练习
打印三角
public class Triangle {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
for (int i1 = 5; i1 >= i; i1--) {
System.out.print(" ");
}
for (int i1=1;i1<=i;i1++){
System.out.print("*");
}
for (int i1=1;i1<i;i1++){
System.out.print("*");
}
System.out.println();
}
}
}
*
***
笑死,这个MarkDowm把我的*号直接给翻成线了