用户交互Scanner
-
之前我们学的基本语法中我们并没有实现程序和人的交互,但是java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner是java5的新特性,我们可以通过Scanner类来获取用户多的输入。
-
基本语法:
Scaner s=new Scanner(System.in);
-
通过Scanner类的 next()与 nextLine()方法获取用户的字符串,读取前一般用hasNext()与hasNextLine()判断是否还有输入的数据。
//创建一个扫描器对象 Scanner scanner = new Scanner(System.in); System.out.println("使用next方式接收"); //判断用户有没有输入字符串 if(scanner.hasNext()){ //使用hasNextLie()会接收一行 "hello word" //使用next方式接收 String str = scanner.next(); System.out.println("输入的内容为:"+str); //input: hello word //输入的内容为:hello } //凡是属于IO流的类如果不关闭会一直占用资源 scanner.close();
next()(不常用)
-
一定要读取到有效字符才可以结束输入
-
对输入有效字符之前遇到的空白,next()方法会将其去掉
-
只有输入有效字符后才将其后面输入的空白作为结束符
-
next()不能得到带有空格的字符串
nextLine()(常用)
-
以Enter作为结束符,即返回输入回车之前所有的字符
-
nextLine()可以获取空白
//从键盘接收数据 Scanner scanner = new Scanner(System.in); System.out.println("使用nextLine方式接受:"); //判断有没有下一行,也就是说判断是否还有输入。 if(scanner.hasNextLine()){ String str = scanner.nextLine();//等待用户去输入,直到输入数据敲下回车之后把你输入的数据变成变量保存在str字符串里 System.out.println("输入的内容为:"+str); } scanner.close();
System.out.println("请输入整数:"); //scanner.hasNextFloat()判断输入是否为小数 //scanner.hasNextInt()判断输入是否为整数 //scanner.hasNextByte()判断输入是否为字节 if(scanner.hasNextInt()){ i=scanner.nextInt(); System.out.println("输入的整数为:"+i); } else { System.out.println("输入的不是整数数据"); }
-
package base;
import java.util.Scanner;
public class Demo08 {
public static void main(String[] args) {
//我们可以输入多个数字,并求其总数和与平均值,每输入一个数字用回车确定,通过输入非数字来结束输入并输出执行结果。
Scanner scanner= new Scanner(System.in);
double sum =0;
int m =0;
//循环语句:判断输入的内容是否为Double类型
while(scanner.hasNextDouble()){
//
double x =scanner.nextDouble();
m =m+1;//m++
sum=sum+x;
}
System.out.println("输入的数字个数是:"+m);
System.out.println(m+"个数字的总和是:"+sum);
System.out.println(m+"个数字的平均数是:"+(sum/m));
scanner.close();
}
}
顺序结构
-
Java的基本结构就是顺序结构,除非特别指明,否则就按语句一条一条执行。
-
顺序结构是最简单的算法结构。
-
语句语句之间是按从上到下执行的,它是由若干个依次执行的处理步骤组成的,它是任何一种算法都离不开的一种基本算法结构。
选择结构
-
if单选择结构 if( 布尔表达式){}
-
if双选择结构 if( ){ }else{ }
-
if多选择结构 if( ){ }else if{ }else{}
-
嵌套的if结构 if( ){ if( ) }
-
switch多选择结构
if双选择结构 if( ){ }else{ }
package base;
import java.util.Scanner;
public class Demo09 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容:");
String s = scanner.nextLine();
//equals:判断字符串是否相等。
if (s.equals("hello")) {
System.out.println("s");
} else {
System.out.println("End");
}
scanner.close();
}
}
if多选择结构 if( ){ }else if{ }else{}
嵌套的if结构 if( ){ if( ) }
int a = 80;
if(a>60){
System.out.println("及格");
if(a>80){
System.out.println("且优秀");
}
}else if(a>0){
System.out.println("不及格");
}else {
System.out.println("缺考");
}
switch多选择结构
char grade = 'C'; //JDK新特性 可以是字符串(字符本质还是数字)
//匹配一个具体的值
switch (grade){
case 'A':
System.out.println("优秀");
break; //可选,跳出当前结构
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("合格");
break;
default: //默认,以上值没匹配到
System.out.println("不及格");
break;
}
switch语句中的变量类型可以是:
-
byte,short,int或者char
-
从javaSE 7开始 switch支持字符串String类型了
循环结构
-
while循环
//计算1+2+3+...+100 int i=0; int sum=0; while(i<100){ i++; sum+=i; } System.out.println(sum); //5050
-
do…while循环
//先执行后判断,至少执行一次 do{ i++; sum+=i; }while(i<100) //跟上面效果一样
-
for循环
for循环是最有效最灵活的循环结构
for(初始化;布尔表达式;迭代){
//代码语句
}
//(初始化;条件判断;迭代) for(int i=0;i<100;i++){ i++; sum+=i;//迭代 } for(; ; ){...} //死循环
//练习:输出1-1000能被5整除的数,每行输出3个 for (int i = 1; i <= 1000; i++) { if(i%5==0){ System.out.print(i+"\t"); //print输出完不换行println输出会自动换行 } if(i%(3*5)==0){ System.out.println(); //System.out.print(\n);//与System.out.println();效果相同 } }
//练习2:输出九九乘法表 for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ System.out.print(j+"*"+i+"="+i*j+"\t"); } System.out.println(); }
增强for循环
java5引入了一种主要用于数组或集合的增强型for循环
格式:
for(声明语句 : 表达式){
//代码句子
}
int [] numbers = {10,20,30,40,50}; //定义一个数组 for (int x:numbers){ System.out.println(x); //遍历数组的元素 10 20 30 40 50 } //相当于 for(int i=0;i<5;i++){ System.out.println(numbers[i]); }
break & continue
-
break可用在任何循环的主体部分,由于强行退出循环,不执行循环中剩余的语句。也可以用在switch语句。
-
continue用于循环语句中,终止某次循环过程,跳过剩余未执行的语句,直接进行下一次是否执行循环的条件判断。
-
标签:后面跟一个冒号的标识符 label:
练习
//打印等腰空心三角形
/* 例如:输入为4时
*
* *
* *
* * * *
*/
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); //n为三角形高
for(int i=1;i<=n;i++){
for(int j=1;j<=2*n-1;j++){
if(i!=n){ //若不为最后一行
if(i+j==n+1)
System.out.print("*"); //三角形左腰边
else if(i+j==n+2*i-1)
System.out.print("*"); //三角形右腰边
else System.out.print(" ");
}
else if(j%2!=0){ //最后一行,底边
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println(); //换行
}