Robin1985

导航

 

从控制台读取输入

​ 如果要想从控制台读取输入,可以使用Scanner类从控制台输入。

​ Java使用System.out来表示标准输出设备,使用System.in表示标准输入设备。默认情况下,输出设备是显示器,而输入设备是键盘。Java并不直接支持控制台输入,但是可以使用Scanner类创建它的对象,以读取来自System.in的输入。如下所示:

 Scanner input = new Scanner(System.in);

 通过查阅API可以知道,Scanner类位于java.util包下,总结出表4-1中的常用方法来读取各种不同类型的输入。

表4-1 Scanner对象常用的方法

方法描述
nextByte() 读取一个byte类型的整数
nextShort() 读取一个short类型的整数
nextInt() 读取一个int类型的整数
nextLong() 读取一个long类型的整数
nextFloat() 读取一个float类型的数
nextDouble 读取一个double类型的数
next() 读取一个字符串,该字符在一个空白符之前结束
nextLine() 读取一行文本(即以按下回车键为结束标志)

boolean数据类型

​ 选择语句要用到条件。条件就是布尔表达式。Java提供了六种比较运算符(comparison operator)(也称为关系运算符(relational operator)),用于两个值的比较。

表4-2 6种比较运算符

运算符名称
< 小于
<= 小于等于
> 大于
>= 大于等于
== 等于
!= 不等于

​ 具有布尔值的变量称为布尔变量(boolean variable),boolean数据类型用于声明布尔型变量。boolean型变量只可能是true和false中的一个。

 有时候,是否执行一条语句是由几个条件组合来决定的。可以使用逻辑运算符(logical operator)组合这些条件。逻辑运算符也称为布尔运算符(boolean operator),是对布尔值进行的运算,它会创建新的布尔值。

表4-3 逻辑运算符

运算符名称描述
&& 当且仅当两个操作数都为真,条件才为真。
|| 如果任何两个操作数任何一个为真,条件为真。
! 用来反转操作数的逻辑状态。如果条件为true,则逻辑运算符将得到false。

if语句

​ Java有几种类型的选择语句:单向if语句、双向if语句、嵌套if语句、switch语句和条件表达式。

单向if语句

 单向if语句是指当且仅当条件为true时执行一个动作。语法如下:

 if (布尔表达式) {

  语句;

 }

双向if语句

 当指定条件为true时,单向if语句执行一个操作。如果希望条件为false时也能执行一些操作,可以使用双向if语句。语法如下:

 if (布尔表达式) {

  布尔表达式为真时执行的语句;

 } else {

  布尔表达式为假时执行的语句;

 }

 注意:通常如果花括号中只有一条语句,可以省略花括号。但是,这样写在代码多的情况下会出现难以理解的语义。为了避免以后出现BUG而难以查找,应该尽量少用这种写法。

嵌套if语句

 if或if...else语句中的语句可以是任意合法的Java语句,甚至可以是其它的if或if...else语句。外层if语句里的内层if语句称为是嵌套的。内层if语句还可以包含其他的if语句,对嵌套的深度没有限制。语法如下:

 if (布尔表达式) {

  if (布尔表达式) {

   布尔表达式为真时执行的语句;

  }

 } else {

  布尔表达式为假时执行的语句;

 }

 嵌套的if语句可用于实现多重选择。

switch语句

 过多的使用嵌套的if语句会使程序难以阅读,Java提供switch语句来有效地处理多重条件的问题。语法如下:

 switch (表达式) {

  case 值1:

   语句1;

   break;

  case 值2:

   语句2;

   break;

  case 值N:

   语句N;

   break;

  default:

   默认情况下执行的语句;

 }

 switch语句遵循以下规则:

  1. switch表达式必须能计算出一个char、byte、short或int型值(在Java高版本中,支持String型值),并且必须总是要用括号括住。

  2. value1,...,valueN必须与switch表达式的值具有相同的数据类型。value1,...,valueN不能包含变量。

  3. 当switch表达式的值于case语句的值相匹配时,执行从该case开始的语句,直到遇到一个break语句或到达该switch语句的末端。

  4. 关键字break是可选的。break语句会立即终止整个switch语句。

  5. default是可选的,用来指定没有一个指定的case与switch表达式匹配时应该采取的操作。

  6. case语句是顺序检测的,但是,良好的编程风格应该将default放在最后。

  7. 不要忘记在需要的时候使用break语句。一旦匹配其中一个case,而该case中无break,就从匹配的case处开始执行,直到遇到break语句或到达switch语句的末端。

编程练习

问题1:判断闰年

 如果某年可以被4整除而不能被100整除,或者可以被400整除,那么这一年就是闰年(leap year)

 思路:可以使用布尔表达式判断某年是否为闰年。

 1 import java.util.Scanner;
 2 /**
 3  * 判断是否为闰年。
 4  */
 5 public class LeapYear {
 6     public static void main(String[] args) {
 7         Scanner input = new Scanner(System.in);
 8         System.out.println("请输入年份:");
 9         int year = input.nextInt();
10            //如果输入的年份可以被4整除而不能被100整除,或者可以被400整除
11         boolean isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
12         if (isLeapYear) {
13             System.out.println("是闰年");
14         } else {
15             System.out.println("不是闰年");
16         }
17     }
18 }

问题2:判断一个月的总天数

 根据用户输入的年份和月份,判断出该月的具体天数,然后显示这个月的天数。

 思路:年有平年闰年,可以根据问题1判断出平年闰年,再根据switch对应具体月份的天数。

 1 import java.util.Scanner;
 2 /**
 3  * 根据用户输入的年份和月份,判断该月具体天数。
 4  */
 5 public class SumDay {
 6     public static void main(String[] args) {
 7         Scanner input = new Scanner(System.in);
 8         System.out.println("请输入年份:");
 9            //年份
10         int year = input.nextInt();
11         System.out.println("请输入月份:");
12            //月份
13         int mouth = input.nextInt();
14          //需要计算的天数,默认初始为0
15         int day = 0;
16          //判断输入的是平年还是闰年
17         boolean isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
18         switch (mouth) {
19         case 1:
20             day = 31;
21             break;
22         case 2:
23             if (isLeapYear) {
24                 day = 29;
25             } else {
26                 day = 28;
27             }
28             break;
29         case 3:
30             day = 31;
31             break;
32         case 4:
33             day = 31;
34             break;
35         case 5:
36             day = 31;
37             break;
38         case 6:
39             day = 31;
40             break;
41         case 7:
42             day = 31;
43             break;
44         case 8:
45             day = 31;
46             break;
47         case 9:
48             day = 31;
49             break;
50         case 10:
51             day = 31;
52             break;
53         case 11:
54             day = 31;
55             break;
56         case 12:
57             day = 31;
58             break;
59         default:
60             day = -1;
61             break;
62         }
63         if (day <= 0) {
64             System.out.println("月份输入有误");
65         } else {
66             System.out.println(year + "年" + mouth + "月有" + day + "天");
67         }
68     }
69 }

 

posted on 2017-03-18 10:42  Robin1985  阅读(91)  评论(0)    收藏  举报