三大流程结构
计算机科学家早就证明了,任何算法的实现只需要三种流程结构:顺序、分支和循环。
顺序结构,从程序入口点(Java是main方法)开始,从上至下依次执行所有的程序代码;
分支结构,也叫作选择结构,程序可以根据一定的条件自动选择执行特定的代码;
循环结构,程序会反复执行一段代码,直到某个条件达成为止。
顺序结构
我们之前编写过的程序都是顺序结构的,程序从主方法第一行开始执行,直到最后一行;如果中间调用了其它方法或者类,跳转到相应的位置执行,执行完毕后跳转回来继续按顺序执行。
因此顺序结构并没有太多需要讲解的地方。在这里,我们借机来聊聊Java中的输入和输出。输出就是从程序向外界发送信息,例如将结果输出到终端上;输入则是从外界向程序传递数据,例如通过键盘将一些数值传递到程序中。
输出
在此前的程序中,我们经常使用System.out.println()
方法来输出数据到终端(也就是命令行界面,不过Eclipse会捕捉这些信息并显示到相应的栏目中)上并换行(光标会自动切换到下一行),如果不想换行,可以使用System.out.print()
方法。该方法会把括号中的内容输出。如果内容结构比较复杂,可以用+
把不同的组件连接起来。例如:
public class Output {
public static void main(String[] args) {
int a=40;
System.out.print('A');
System.out.print(','+'B');
System.out.print(",C");
System.out.print("\n");
System.out.println("Hello"+" world!");
System.out.println("a="+a);
System.out.println("a+60="+(a+60));
System.out.println("a+70="+a+70);
}
}
输出结果为:
A110,C
Hello world!
a=40
a+60=100
a+70=4070
结果中的第一行A110,C
,是程序中四个System.out.print()
方法的输出结果,大概第一个字符A
,后面的,C
是能看明白的,毕竟是按照原样输出的。那个”\n”输出了吗?当然输出了,还记得我们前面提到过的转义字符吗?它就是换行符。你可能还有一个疑惑,那个110
是怎么来的?回忆一下数据类型的自动类型转换,当字符型数据参与运算时(那个加号),它们会转换成int类型参与运算,所以,110
就是字符,
和B
转换为整数后再相加的结果。
结果中的第二、三、四行也都比较好理解,最后一行为什么不是a+70=110
?那个4070怎么回事?
自动类型转换。
因为前面是个字符串,所以+
就变成了字符串的连接符(','+'B'
这个式子中,字符型数据转换成了整数,所以+
就是加号),后面的数据都会转换成字符串,先是整数40
转换成了字符串40,然后整数70
转换成了字符串70,连接起来之后,就成了a+70=4070
。
但这两个方法有时不太好用,例如:
public class PrintDouble {
public static void main(String[] args) {
double d=987654321;
double e=3.1415926;
System.out.println("d="+d);
System.out.println("e="+e);
}
}
运行后的输出结果为:
d=9.87654321E8
e=3.1415926
默认使用科学计数法输出,不太符合我们的习惯。
这时,我们可以使用System.out.printf()
,上面的例子可以改为:
public class PrintDouble {
public static void main(String[] args) {
double d=987654321;
double e=3.1415926;
//按照默认格式输出浮点数
System.out.printf("d=%f\n",d);
//保留两位小数输出浮点数
System.out.printf("e=%.2f",e);
}
}
运行结果是:
d=987654321.000000
e=3.14
printf方法的参数分为两部分,前面的字符串用于格式控制,%?
是格式控制字符,用于控制待输出数据的格式,其它部分会照原样输出;其它参数则是待输出的数据,和格式控制字符从左到右一一对应。常用的格式控制字符包括:
格式控制字符 | 说明 |
---|---|
%d | 格式化输出整数 |
%x | 格式化输出十六进制整数 |
%f | 格式化输出浮点数 |
%e | 格式化输出科学计数法表示的浮点数 |
%s | 格式化字符串 |
注意,由于%表示格式控制字符的前导符,因此,连续两个%%表示一个%字符本身。
输入
Java中输入的方法比较多,这里介绍比较常用的一种。我们直接来看代码:
//需要导入Scanner类
import java.util.Scanner;
public class Input {
public static void main(String[] args) {
//创建一个Scanner类型的对象sc,它将从系统输入中获取数据
Scanner sc=new Scanner(System.in);
System.out.println("敢问高姓大名:");
//sc对象调用nextLine方法,获取一行输入,并以字符串的形式存入name对象
String name=sc.nextLine();
System.out.println("请问贵庚?");
//sc对象调用nextByte方法,获取输入的byte类型整数,并存入变量age
byte age=sc.nextByte();
//将输入的信息输出
System.out.println("原来您是"+name+",今年"+age+"岁,久仰久仰");
}
}
在这里,我们创建Scanner类的对象,该对象会连接系统标准输入流,也就是System.in
,并将从该输入流获取的数据进行一定的处理(是的,你猜对了,System.out
就是系统的标准输出流)。nextLine
方法会把一行输入输出转换为字符串,nextByte
方法会把输入的数据转换为byte类型的整数。在这里,我们需要根据保存数据的方式来选择合适的nextXXX
方法,如果选择的方法不合适,就会发生错误。
我们运行一下这个程序&#x