Java学习笔记03
Java输入
java.util.Scanner是Java5的新特性,可以用此获取用户的输入。想要通过控制台进行输入,首先要构造一个Scanner对象,并与标准输入流System.in关联
Scanner in = new Scanner(System.in);
现在可以使用Scanner类的各种方法实现输入操作了。nextLine方法将输入一整行。
String name = in.nextLine();
next方法以空格为分隔读取单个单词
String firstName = in.next();
nextInt
,nextFloat
,nextDouble
用于输入整数和浮点数。
next()
注意事项:
- 读取到有效字符之后才能结束输入
- 对有效字符之前的空白不会接收
- 有效字符之后的空白作为结束符
- 不能得到带空格的字符串
nextLine()
注意事项:
- 以enter为结束符,可以获得空白
读取前一般使用hasNext()
与hasNextLine()
,hasNextInt
,hasNextFloat
,hasNextDouble
等判断是否有输入的数据。
import java.util.*;
public class Demo {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
if(in.hasNext()) {
String str = in.next();
System.out.println(str);
}
in.close();//在main方法里面关闭输入流
}
}
题目:输入多个数字,求其总和和平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并执行输出。
import java.util.*;
public class Demo {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double sum = 0.0;
double average = 0.0;
int count = 0;
while(in.hasNextDouble()) {
double num = in.nextDouble();
sum = sum + num;
count = count + 1;
}
in.close();
average = sum / count;
System.out.println(sum+" "+average);
}
}
switch case
switch case是多选择结构的一个实现方式。switch的值可以是char,byte,short或int,也可以是枚举常量,从Java SE 7开始还支持字符串字面量。
import java.util.*;
public class Demo {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
switch(num) {
case 1:
System.out.println("输入的数字是1");
break;
case 2:
System.out.println("输入的数字是2");
break;
default:
System.out.println("输入的既不是1也不是2");
break;
}
}
}
注意每一个case一定要有对应的break,否则会导致case穿透。程序会一直跑到有break的地方才会停止。如果把case 1
的break去掉再输入1会导致case 1和case 2的输出都被输出。
如果所有的case都不满足,就会执行default语句的内容。
循环
对于while循环,如果不满足条件语句一次都不会执行。而do while循环至少会执行一次。do while会先执行再进行判断。
for循环是支持迭代的一种通用结构,其执行次数在执行前就已确定。其格式为for(初始化;布尔表达式;更新)
IDEA支持快速创建循环,只需要输入100.for然后回车就能得到一个循环。
题目1:计算0到100之间的奇数和偶数的和:
public class Demo {
public static void main(String[] args) {
int sumOdd = 0;
int sumEven = 0;
for(int i=1;i<=100;i=i+2){
sumOdd = sumOdd + i;
}
for(int j=0;j<=100;j=j+2){
sumEven = sumEven + j;
}
System.out.println(sumOdd+" "+sumEven);
}
}
题目2:输出1-1000之内能被5整除的数,每行输出三个
public class Demo {
public static void main(String[] args) {
for (int i = 1; i <= 1000; i++) {
if(i % 5 == 0){
System.out.print(i+" ");
}
if(i % 15 == 0){
System.out.println();
}
}
}
}
题目3:打印九九乘法表
public class Demo {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j+"*"+i+"="+i*j+" ");
}
System.out.println();
}
}
}
Java5之后引入了增强for循环:for each,可以依次处理数组或者其他元素集合中的每一个元素,语句为 for (varible : collection) statement
,具体示例如下:
public class Demo {
public static void main(String[] args) {
int[] numbers = {1,2,3,4,5};
for(int x : numbers){
System.out.println(x);
}
}
}
结果将数组中的每一个元素都输出了。
break continue
break可以跳出任何循环,不执行剩余语句。continue可以跳过本次循环接着执行下一次循环。
goto是Java保留字,但并没有被使用。Java中带标签的break和continue语句有类似其他语言中goto的作用。标签通常被放在循环语句之前,因为当我们希望在循环中嵌套另一个循环的时候,break和continue通常只中断当前循环,但使用标签后会中断在存在标签的地方。
public class Demo {
public static void main(String[] args) {
//输出101-150之间的所有质数
label:
for (int i = 101; i <= 150; i++) {
for(int j = 2; j < i/2 ;j++){
if(i % j == 0){
continue label;
}
}
System.out.println(i);
}
}
}
运行到continue label时,会返回到 label: 所在的位置重新执行下一次循环。当然,不建议使用这种方式。大多数人认为使用goto或者类似goto的方式带来的弊端远远大于其好处。
题目:用*打印一个5行的三角形
public class Demo {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
for (int m = 5; m > i; m--) {
System.out.print(" ");
}
for (int j = 0; j < i; j++) {
System.out.print("*");
}
for (int k = 0; k <= i; k++) {
System.out.print("*");
}
System.out.println();
}
}
}
输出结果:
*
***
*****
*******
*********
实际上分了三部分输出,第一部分是之前的空格,第二部分是左半个三角形,第三部分是右半个三角形+中间一列。程序的输出是一行一行输出,因此分析的时候也应当按行分析。