1.java.util.Scanner
- 作用:可以从CMD窗口中接受一个数据自动为变量赋值,简化测试步骤。
- 使用方法的代码如下:
// java.util.Scanner 使用步骤
// 1. 创建Scanner对象
java.util.Scanner sc = new java.util.Scanner(System.in);
// 2. 根据数据的类型 选择 不同的方法接收不同的数据
// int a = sc.nextInt(); // 从控制台中接收一个int类型的数据
// double a = sc.nextDouble(); // 从控制台中接收一个double类型的数据
// String str = sc.next();
// char c = sc.next().charAt(0);
// 一个Scanner可以接收多个数据
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println("您输入的数据是:" +a +"\t"+ b );
注意事项:
- 使用sc.next…方法时,程序会暂停(阻塞)等待用户从控制台中输入数据并按下Enter键提交后方可继续执行。
- 务必保证接收的方法与输入的数据一致,否则提交数据后出现异常。
2.import
- 作用:明确程序中类所处的位置,引入外部的程序包。
- 不使用import明确类所处的位置:
java.util.Scanner;
java.util.List;
java.sql.Date;
java.util.concurrent.locks.Lock;
使用import语句,语法如下:
// 在package语句下,类以外的位置声明
import 包名.类名;
import 包名.*; // *表示所有类
import 包名.类名; 在程序中出现该类时编译器默认从指定包的位置查找该类。 import
包名.*;在程序中出现任意类时都从指定包中查找该类。
演示的代码如下:
// 明确类所在的位置
// 如果在此源文件中使用了Scanner 程序默认从java.util包中查找Scanner
// import java.util.Scanner;
// import java.util.List;
// import java.util.ArrayList;
// import java.util.*;
import java.util.*;
import java.io.File;
public class TestImport{
public static void main(String[]args){
// 1. 创建Scanner对象
// java.util.Scanenr sc = new java.util.Scanner(System.in);
Scanner sc = new Scanner(System.in);
// java.util.List list = new java.util.ArrayList();
List list = new ArrayList();
// java.io.File;
File file;
// 由于此程序使用List默认从util中查找,如果需要使用java.awt.List
// 必须手动明确包名
java.awt.List list2;
// java.sql.Date;
// java.util.concurrent.locks.Lock;
}
}
Scanner使用步骤如下:
1. 引入java.util.Scanner
import java.util.Scanner;
2. 创建Scanner对象
Scanner sc = new Scanner(System.in);
3. 根据需求选择不同的接收方法
注意事项:
- import语句在package之下,一个程序中可以定义多个import
- 不允许出现 import java..;
- import java.util.* 可能会冲突问题 java.util.List
java.awt.List- 推荐使用import java.包名.类名:提高编译速度
3.if
- 概念:if语句可以根据某个条件控制程序的执行流程。
- 基本if结构
语法:
演示的代码如下:if( 布尔表达式 ){ //当布尔表达式为true执行,否则不执行 }
int a = 10;
// 如果a<100为true 执行{} 中的代码,执行完毕后跳出if结构继续向下执行其他代码
if( a < 100 ){
System.out.println("Hello");
}
System.out.println("程序结束!");
3.if–else结构
语法:
if( 布尔表达式 ){
//当布尔表达式为true时执行
}else{
//当布尔表达式为false时执行
}
演示的代码如下:
// 从控制台中接收两个整数,计算两个整数的商
// 1.创建Scanner
Scanner sc = new Scanner(System.in);
System.out.println("请输入两个整数:");
// 2.选择接收数据的方法
int a = sc.nextInt();
int b = sc.nextInt();
// 计算两个整数的商
// 如果b!=0时 执行a/b 否则 提示用除数不能为0!
if( b!=0 ){
// b!=0 为 true 时执行
System.out.println( a/b );
}else{
// b!=0 为 false 时执行
System.out.println("除数不能为0!");
}
4.if-elseif -else
主要用于多条件的筛选
语法:
if( 布尔表达式1 ){
// 当布尔表达式1为true时执行
}else if(布尔表达式2){
// 当布尔表达式2为true时执行
}else if(布尔表达式3){
// 当布尔表达式3为true时执行
}...else{
// 以上表达式均为false执行
}
演示的代码如下:
// 85以上 奖励奔驰一辆
// 70-84 奖励长安奔奔一辆
// 60-69 奖励电驴一辆
// 低于60分 奖励富士康offer一个
import java.util.Scanner;
public class TestIf3{
public static void main(String[] args){
// 用户输入一个成绩,打印该成绩所对应的奖励
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个成绩:");
int s = sc.nextInt();
// 同样的数值根据不同的条件执行不同的代码
// 85以上 奖励奔驰一辆
if( s>=85 ){
System.out.println("奖励奔驰一辆!");
}else if( s>=70 && s<=84 ){
// 70-84 奖励长安奔奔一辆
System.out.println("奖励长安奔奔一辆!");
}else if(s>=60 && s<=69){
// 60-69 奖励电驴一辆
System.out.println("奖励电驴一辆!");
}else{
// 低于60分 奖励富士康offer一个
System.out.println("奖励富士康offer一个!");
}
}
}
- 执行流程:
自然语言与代码之间的关系程序执行时依次判断if--elseif中的条件是否满足,发现满足某个条件时执行{}中的代码随后跳出if--elseif结构,如果没有满足条件的if-elseif语句则执行最后的else{}。
关于if语句的补充如果 怎么样 则做什么 ---> if(){} 如果 怎么样 否则怎么样 ---> if(){}else{} 如果 怎么样 再如果怎么样...否则怎么样 ----> if(){}elseif(){}else{}
当if语句中只有一行代码需要执行时{}号可以省略,适用于所有结构if/if--else/if--elseif-else if( a<b ) System.out.println(); else if( a<c ) System.out.println(); 简写形式中的唯一一行代码不能用于定义变量。
4.switch
- 作用:适用于等值判断,根据变量不同的值执行不同的代码。
- 语法:
switch( 变量 ){
case 值1:// 当变量的值与值1相等时执行;
case 值2:// 当变量的值与值2相等时执行;
case 值3:// 当变量的值与值3相等时执行;
// ...
default:// 当没有与变量匹配的值时执行;
}
- 执行流程:
当程序发现变量与某个值相同时执行case后面的代码,执行完毕后无论是否与后续case匹配向下继续执行其他代码直至最后一行代码执行完毕。(落空机制)
- break关键字:当程序遇到break关键字时跳出switch结构,通常情况switch配合break一起使用
演示的代码如下:
import java.util.Scanner;
public class TestSwitch2{
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入名次:");
// 用户输入名次--打印名次的代称
int n = sc.nextInt();
// 1----冠军
// 2----亚军
// 3----季军
// 4----殿军
// 5~n--请继续努力
switch( n ){
case 1 :
System.out.println("冠军");break;
case 2 :
System.out.println("亚军");break;
case 3 :
System.out.println("季军");break;
case 4 :
System.out.println("殿军");break;
default:
System.out.println("请继续努力!");
}
}
}
注意事项:
switch中的变量支持 byte、short、int、char。
JDK7 后 支持String。
JDK12 后> switch可以生成一个结果。
JDK13 后 可以在打印语句中打印switch语句生成的结果(预览版)。
JDK14 后 确认为最终版。
5 习题
- 以下对局部变量描述正确的是(B C)
A. 局部变量定义之后,可以直接使用。
B. 局部变量定义在函数以内。
C. 作用范围:从定义开始,到定义它的代码块结束。
D. 在同一个函数中,不允许定义同名的变量。 - 分析以下代码,哪些是合法的(A C)
A. if(true){}
B. int n; if(n%20){}
C. int n=3;
D. int n=2; if(n%30) System.out.pintln(“n=”+n); if(n=2){}
原因:B)没有对n变量初始化,局部变量必须赋值才能使用 D) =表示赋值 而if分支()中出现的应为布尔表达式。 - 关于导包的描述正确的是(C D)
A. 一个源文件中只能有一条导包语句。
B. 导包语句必须写在源文件中第一行有效语句。
C. 导包的关键字为 import。
D. 位于 java.lang 中的类无需导包,可直接使用。
E. 一个源文件中必须有一条导包语句。
原因:源文件中可以没有导包语句;当没有package语句时,import语句时有效第一行。 - 仔细阅读以下程序代码,分析并写出代码输出的结果。
代码如下:
public class Test{
public static void main(String[]args){
int i = 15;
if (i % 2 != 0){
if (i % 3 == 0){
System.out.println(i + "能被3整除!");
}
System.out.println("我不是偶数!");
}else {
if (i % 5 == 0){
System.out.println(i + "能被5整除!");
}
System.out.println("我是偶数!");
}
System.out.println("我只是一个数据!");
}
}
答:15能被3整除!
我不是偶数!
我只是一个数据!
5. 仔细阅读以下代码,分析并写出代码输出的结果。
代码如下:
public class Test{
public static void main(String[]args) {
int i = 3;
switch (i){
default:
System.out.println("default");
case 0:
System.out.println("zero");
break;
case 1:
System.out.println("one");
case 2:
System.out.println("two");
}
}
}
答:default
zero
6… 编程:从键盘读入一个数,判断它的正负。是正数,则输出"+",是负数,则输出"-"。
答:代码如下:
import java.util.Scanner;
public class Test{
public static void main(String[]args) {
System.out.println("请输入一个整数");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n >0){
System.out.println("+");
}
if (n < 0){
System.out.println("-");
}
}
}
- 编程:读入一个整数,表示一个人的年龄。如果小于 6 岁,则输出“儿童”,6 岁到 13 岁,输出“少 儿”;14 岁到 17 岁,输出“青少年”;18 岁到 35 岁,输出“青年”;36 岁到 50 岁,输出“中 年”;50 岁以上输出“中老年”。
. 答:代码如下:
import java.util.Scanner;
public class Test{
public static void main(String[]args) {
System.out.println("请输入一个表示年龄的数!");
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
if (age < 6){
System.out.println("儿童");
}else if (age >= 6 && age <= 13){
System.out.println("少儿");
}else if (age >= 14 && age <= 17){
System.out.println("青少年");
}
else if (age >= 18 && age <=35){
System.out.println("“青年");
}
else if (age >= 36 && age <= 50){
System.out.println("中年");
}else {
System.out.println("中老年");
}
}
}
- 编程:读入一个整数,如果是 1~5 之间,则分别输出 5 个福娃的名字,否则输出“北京欢迎你”。
答:代码如下:
import java.util.Scanner;
public class Test{
public static void main(String[]args) {
System.out.println("请输入一个表示年龄的数!");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
switch(n) {
case 1:
System.out.println("贝贝");
break;
case 2:
System.out.println("晶晶");
break;
case 3:
System.out.println("欢欢");
break;
case 4:
System.out.println("迎迎");
break;
case 5:
System.out.println("妮妮");
break;
default:
System.out.println("北京欢迎你");
break;
}
}
}
- 编程:读入一个表示年份的整数,判断这一年是否是闰年。如何判断一个年份 是否是闰年: I. 如果这个年份能够被 4 整除,且不能被 100 整除,则这一年是闰年。例如,1996 年是闰年, 而相应的,1993 年就不是闰年。 II. 如果这个年份能够被 100 整除,则这个数必须要能被 400 整除,才是闰年。例如,2000 年是 闰年,1900 年不是闰年。
答:代码如下:
import java.util.Scanner;
public class Test{
public static void main(String[]args) {
System.out.println("请输入一个表示年份的整数:");
Scanner s = new Scanner(System.in);
int year = s.nextInt();
if(year % 4 ==0 && year % 100 != 0){
System.out.println( year + "是闰年");
}else if(year % 100 == 0 && year% 400 == 0){
System.out.println( year + "是闰年");
}else{
System.out.println( year + "不是闰年");
}
}
}
- 编程:某项查询执行之后,n 条结果,单页显示 m 条记录,第 i 页显示第几条到第几条。 例如: 共 n=11 条结果,单页显示 m=3 条 当 i = 1 时,显示第 1 条 到第 3 条 当 i= 2 时,显示第 4 条 到第 6 条。
答:代码如下:
import java.util.Scanner;
public class Test{
public static void main(String[]args) {
System.out.println("请输入总共的条数:");
Scanner s = new Scanner(System.in);
int n = s.nextInt();
System.out.println("请输入每页显示的条数:");
int m = s.nextInt();
System.out.println("请输入需要显示的页数:");
int i = s.nextInt();
if(n%m==0){
int a = ( i - 1) * m + 1;
int b = i * m;
System.out.println("当i = "+ i +" 时,显示第"+ a +"条 到第 "+ b +"条");
}else{
if( i< ( n / m + 1) ){
int a = ( i - 1) * m + 1;
int b = i * m;
System.out.println("当i = " + i +" 时,显示第"+ a +"条 到第 "+ b +"条");
}else{
int a = ( i - 1) *m + 1;
System.out.println("当i = "+ i +" 时,显示第"+ a +"条 到第 "+ n +"条");
}
}
}
}
第二种代码如下:
import java.util.Scanner;
public class Test{
public static void main(String[]args) {
// 项查询执行之后,n条结果,单页显示m条记录,
// 第i页显示第几条到第几条。
Scanner sc = new Scanner(System.in);
System.out.println("请输入当前页码:");
int i = sc.nextInt(); // 当前页码
int n = 33; // 总数据量
int m = 5; // 每页显示条数
int begin = (i - 1) * m + 1; // 起始条数 = 上一页的结束条数(当前页码-1*每页显示条数) + 1
int end = i * m; // 结束条数 = 当前页码 * 每页显示条数
// 最大页数:30 5 6 31 5 7
// 如果n能够整除m n/m就是最大的页数,每页都能够完整的显示m条
// 如果不能整除必须多+1一页,用来显示余下数据
// 最大页数
int maxPage = (n % m == 0 ? n / m : n / m + 1);
// 如果页码是最后一页需要特殊处理
if(i == maxPage) end = n;
/*
i=1 i=2 i=3 i=4 i=5 i=6 i=7
begin 1 6 11 16 21 26 31
end 5 10 15 20 25 30 n
*/
System.out.println("起始条数:"+ begin);
System.out.println("结束条数:"+ end);
}
}
11.编程:中国的个税计算方法: 应税所得为税前收入扣除 3500 元(起征点),然后超出部分,按照以下税率收税:
规则:应缴税款 = (税前工资 - 各类保险 - 3500) * 税率 - 速算扣除数。
注意:此处各类保险默认为 262 元;税前工资需大于等于 3500。 实发工资 = 税前工资 - 应缴税款 - 各类保险。
例如: 若税前工资为 15000,各类保险 262 元。
应缴税款(1804.5) = (15000 - 262 - 3500) * 0.25 - 1005
实发工资(12933.5) = 15000 - 1804.5 - 262
要求:读入一个整数,表示税前收入,输出应当缴纳的个人所得税和税后实际收入。
答:代码如下:
import java.util.Scanner;
public class Test{
public static void main(String[]args) {
System.out.println("请输入一个表示年份的整数:");
Scanner s = new Scanner(System.in);
double money = s.nextDouble();
if(money > 3500){
double m = money - 3500; // 税前工资-3500;
double n; // 应缴税款
double x; // 实发工资
if(m<=1500){
n = (m - 262) * 0.03;
x = money - n - 262;
System.out.println("税后工资" + x);
}else if(m >= 1501 && m <= 4500){
n = (m - 262) * 0.1 - 105;
x = money - n - 262;
System.out.println("税后工资" + x);
}else if(m >= 4501 && m <= 9000){
n = (m - 262) * 0.2 - 555;
x = money - n - 262;
System.out.println("税后工资" + x);
}else if(m >= 9001 && m <= 35000){
n = (m - 262) * 0.25 - 1005;
x = money - n - 262;
System.out.println("税后工资" + x);
}else if(m >= 35001 && m <= 55000){
n = (m - 262) * 0.3 - 2755;
x = money - n - 262;
System.out.println("税后工资" + x);
}else if(m >= 55001 && m <= 80000){
n = (m - 262) * 0.35 - 5505;
x = money - n - 262;
System.out.println("税后工资" + x);
}else{
n = ( m - 262) * 0.45 - 13505;
x = money - n - 262;
System.out.println("税后工资" + x);
}
}else{
System.out.println("您无需交税");
}
}
}
6 总结
如图所示:
1. Scanner:可以从控制台中接收数据为变量赋值
使用方式:
1、import java.util.Scanner 引入Scanner
2、Scanner sc = new Scanner(System.in); 创建Scanner
3、根据需要选择不同的next方法
2、import:指引编译器找到类所处的位置(导包)
3、if语句:根据不同的条件执行不同的代码,适用于区间判断
4、switch:根据变量值执行不同的代码,适用于等值判断
5、局部变量的概念与特点