目录
1. 用户交互Scanner
java.util.Scanner是Java5的新特性,使用Scanner类来获取用户的输入
- 通过Scanner类与next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。
package com.tang.easy;
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一些内容:");
//判断用户有没有输入字符串
if(scanner.hasNextLine()){
//使用nextLine方式接收
String string =scanner.nextLine();
System.out.println(string);
}
//凡是属于IO流的类,如果不关闭会一直占用资源,要养成好习惯,用完就关闭
scanner.close();
}
}
Scanner对象
- next() :
- 一定要读取到有效字符后才可以结束输入
- 对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
- next()不能得到带有空格的字符串
- nextLine():
- 以enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
- 可以获得空白
按住ctrl点击Scanner,可查看当中的其他方法
点击左侧Structure会显示方法目录
输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果
package com.tang.easy; import java.util.Scanner; public class Demo3_1 { public static void main(String[] args) { int i=0;//用来计数,到当前为止输入了多少个数字 double sum=0.0;//求和 Scanner scanner = new Scanner(System.in); //用循环来判断是否还有输入,并在里面对每一次进行统计(输入数字的个数)和求和 while (scanner.hasNextFloat()){ double x = scanner.nextDouble(); i++; sum+=x; System.out.println("第"+i+"个数据:"+x+"\n当前总和sum="+sum); } System.out.println("输入了"+i+"个数据,其平均值是:"+(sum/i)); scanner.close(); } }
2. 顺序结构
从上往下执行
3. 选择结构
if(布尔表达式){
//布尔表达式为true
}else{
//false
}
if...
else if...
else if...
...
else...
package com.tang.easy;
import java.util.Scanner;
public class Demo5 {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.println("请输入数据:");
String x=s.nextLine();
//判断括号里的字符串与输入的数据是否一致(少用==进行该判断)
if (x.equals("Hello")){
System.out.println("你输入的是:"+x);
}else{
System.out.println("你输入的不是Hello");
}
System.out.println("End");
s.close();
}
}
- Switch多选择结构
- byte、short、int 、char
- 从Java SE7 开始,switch 支持字符串String类型
- 同时,case 标签必须为字符串常量或字面量
package com.tang.easy;
public class Demo5_1 {
public static void main(String[] args) {
String a="aaaaaa";
switch (a){
case "aaaaaa":
System.out.println("匹配成功");
break;
default:
System.out.println("匹配失败");
}
}
}
反编译
Java—class(字节码文件)—反编译(idea)
4. 循环结构
while循环(先判断后执行)
public class Demo6 {
public static void main(String[] args) {
//死循环
while(true){
//等待客户端连接
//定时检查
//......
break;//跳出死循环
}
}
}
计算1+2+3+…+100.
package com.tang.easy;
public class Demo6 {
public static void main(String[] args) {
int i=0;
int sum=0;
while(i<=100){
sum+=i;
i++;
}
System.out.println(sum);//5050
}
}
do…while循环(先执行,后判断)
package com.tang.easy;
public class Demo6 {
public static void main(String[] args) {
int i=0;
int sum=0;
do{
sum+=i;
i++;
}while(i<=100);
System.out.println(sum);//5050
}
}
for循环
//初始化//条件判断//迭代~更新
for (int s=0;s<=100;s++){
//代码语句~循环体
}
//for(;;)//死循环
增强for循环
- Java5引入了一种主要用于数组或集合的增强型for循环
/**for(声明语句:表达式){
* //代码句子
* }
*/
public class Demo6_3 {
public static void main(String[] args) {
int[] number = {10,20,30,40,50,66};//声明一个数组
for(int x:number){//将每一个number的具体值赋给x
System.out.println(x);//输出每一个x
}
/*相当于:
for(int i=0;i<5;i++){
System.out.println(number[i]);
}
*/
}
}
- 声明语句:声明心得局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相同。
- 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
5. break & continue
break:退出整个循环体。
for(int i=0;i<100;i++){
if(i==30){
break;//当条件成立时,跳出整个循环,不再执行for中的任何语句
}
System.out.println(i);
}
continue:结束当前循环
for(int i=0;i<100;i++){
if(i%10==0){
System.out.println();
continue;//当条件成立时,结束本次循环,continue之后的语句将不执行
}
System.out.println(i);
}
关于goto关键字
- goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在break和continue两个关键字身上仍然能看出一下goto的影子—带标签的break和continue。
- “标签”是指后面跟一个冒号的标识符,例如:lable:
- 对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由就是:我们希望在其中嵌套另一个循环,由于break和contine关键字通常只中断当前循环,但若随同标签使用,他们就会中断到存在标签的地方。
求质数
//普通求法
public class Demo6_goto {
public static void main(String[] args) {
int x=0;
int count=0;
for (int i = 2; i < 100; i++) {
x=0;
for (int j=2;j<i;j++){
if (i%j==0){
x++;
break ;
}
}
if(x==0){
count++;
System.out.print(i+"\t");
if(count%5==0){
System.out.println();
}
}
}
System.out.println("1-100之间有"+count+"个质数");
}
}
//使用“标签”的方法
public class Demo6_goto1 {
public static void main(String[] args) {
int count=0;
outer:for (int i = 2; i < 100; i++) {
for (int j=2;j<i;j++) {
if (i % j == 0) {
continue outer;
}
}
count++;
System.out.print(i+"\t");
if(count%5==0){
System.out.println();
}
}
System.out.println("1-100之间有"+count+"个质数");
}
}
6. 练习
打印三角形
public class Demo6_5 {
public static void main(String[] args) {
for (int i = 0; i <5; i++) {
for (int j = 1; j <10; j++) {
if (j>=5-i&&j<=5+i){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
public class Demo6_5_1 {
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();
}
}
}
//结果:
*
***
*****
*******
*********