把以前快忘掉的Java补起来。这里仅仅写下来已经忘了或者快要忘了的相关知识,已经记住的部分将不会在此系列中出现。
输入输出
输入
import java.util.Scanner;
public class Input {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);//构造一个Scanner对象,并与“标准输入流”System.in关联
System.out.print("Input your name: ");
String name = scanner.nextLine();//读取输入的下一行内容
System.out.print("Input your age: ");
int age = scanner.nextInt();//读取输入的数据
System.out.println("Hi, " + name + ", you are " + age);
}
}
java.util.Scqanner 5.0 | 相关说明 |
---|---|
Scanner(InputStream in) | 用给定的输入流创建一个Scanner对象。 |
String netLine() | 读取下一行的内容 |
String next() | 读取输入的下一个单词(以空格作为分隔符) |
int nextInt() | |
double nextDouble() | 读取并转换下一个表示整数或浮点数的字符序列。 |
boolean hasNext() | 检测输入中是否还有其他单词 |
boolean hasNextInt() | |
boolean hasNextDouble() | 检测是否还有表示整数或浮点数的下一个字符序列 |
关于输入还有一个地方需要提一下
因为输入时可见的,所以Scanner类不适用于从控制台读取密码。Java SE6 特别人入了Console类实现这个目的。
所以大家想要了解此方面内容的话可以有针对性的去搜索一下这个类。
格式化输出(printf)
这里只讲一下格式化输出
public class Output {
public static void main(String[] args) {
double d = 3.1415926;
System.out.println(d);
System.out.printf("PI = %.2f\n", d);
System.out.printf("PI = %7.2f\n", d);
// 格式化小数:
double f = 0.123456;
System.out.printf("%f\n", f); // 0.123456
System.out.printf("%e\n", f); // 1.234560e-01
System.out.printf("%.2f\n", f); // 0.12
System.out.printf("%6.2f\n", f); // <space><space>0.12
System.out.printf("%+.2f\n", f); // +0.12
// 调整参数顺序:
System.out.printf("%s %s %s\n", "A", "B", "C");
System.out.printf("%2$s %1$s %1$s %3$s\n", "A", "B", "C");
// 参数不够,报错:
System.out.printf("%s %s %s\n", "A", "B");
}
}
转换符 | 类型 | 距离 |
---|---|---|
d | 十进制整数 | 159 |
x | 十六进制整数 | 9f |
o | 八进制整数 | 237 |
f | 定点浮点数 | 15.9 |
e | 指数浮点数 | 1.59e+01 |
g | 通用浮点数 | — |
a | 十六进制浮点数 | 0x1.fccdp3 |
s | 字符串 | Hello |
c | 字符 | H |
b | 布尔 | True |
h | 散列码 | 42628b2 |
% | 百分号本身 | % |
n | 与平台有关的行分隔符 | — |
其中有些是不够常用的,其中关于它的标志(添加多少空格,在哪里加小数点之类的)和关于日期和时间的转换符在此都不再赘述。
多重选择: switch 语句
- 当没有匹配到任何可选项的时候执行default语句
- 实际上它相当于一组if else语句
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Select 1 ~ 4: ");
int opt = scanner.nextInt();
switch (opt) {
case 1:
System.out.println("Selected 1");
break;
case 2:
case 3:
System.out.println("Selected 2,3");
break;
case 4:
System.out.println("Selected 4");
break;
default:
System.out.println("Not selected.");
}
System.out.println("END");
}
}
透过上面的程序可以了解到它的结构,
switch语句特点:
- 它没有{}
- case 语句具有“穿透性”
- 漏写 break 将导致意想不到的结果
- 任何时候都不要忘记写break
- 有break时case顺序无所谓,但还是建议按自然顺序写,增加可读性
- switch语句选择的类型只有四种:byte,short,int , char。
- case之间与default没有顺序。先判断所有的case,没有匹配的case执行default。
- switch语句停止的条件是遇到了break关键字或者结束switch语句的大括号。
- 如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
- switch case中的值必须要与switch表达式的值具有相同的数据类型。而且case后跟的值必须是常量,不能跟变量。
- switch 的计算结果必须是正行、字符串或枚举类型
- 尽量少用 switch 语句(别问我为啥,我也不知道)
for each
这个对于java来说可能是比较神奇的遍历方法了,它省去了java开发人员的开发过程中的很多精力。(但是对于python程序员来说 嘿嘿嘿)
- for each 循环能够遍历数组和“可迭代”数据类型,包括List,Map等(后来还知道了包括枚举)
- for each 循环无法指定遍历顺序
- for each 循环无法获取数组索引
braek 和 continue
break关键字:
public class Break {
public static void main(String[] args) {
int[] ns = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
int sum = 0;
for (int i = 0; i < ns.length; i++) {
if (i == 5) {
System.out.println("break");
break;
}
System.out.println("add ns[" + i + "]");
sum = sum + ns[i];
}
System.out.println(sum);
}
}
输出:
add ns[0]
add ns[1]
add ns[2]
add ns[3]
add ns[4]
break
15
break 语句用于终止最近的封闭循环或它所在的 switch 语句。控制传递给终止语句后面的语句(如果有的话)。
(也就是跳出循环)
(如果是多层的话可以跳出最近的一层循环)
适用:
for循环 、 switch两种循环语句。
break的用法:
- 单独使用。
- 与标签一起使用。(标签:即一个名字,满足标识符的条件即可)。
使用细节: 不要再break语句之后,编写其他语句,永远都执行不到,编译报错。
continue关键字:
public class Continue {
public static void main(String[] args) {
int[] ns = { 31, 21, 22, 73, 79, 56, 7, 83, 19, 12, 53, 84, 68 };
int sumOfOdds = 0;
for (int n : ns) {
if (n % 2 == 0) {
System.out.println("skip " + n);
continue;
}
sumOfOdds = sumOfOdds + n;
}
System.out.println(sumOfOdds);
}
}
输出:
skip 22
skip 56
skip 12
skip 84
skip 68
366
语句将控制权传递给它所在的封闭迭代语句的下一次迭代。(跳出本循环,执行下一次循环)。
(注意,强调本轮循环,比如直接进行i++)
适用于:
while 、 do while 、 for循环语句
使用细节:
- 如果continue出现在循环的末尾(最后一条语句),那么可以省略。
- 如果continue出现在循环的第一条语句,那么后面的语句都无法执行,所以编译报错。
- 可以结合标记使用。