Scanner键盘录入对象
步骤
1.导包
2.创建键盘输入对象
3.通过键盘输入给变量赋值
获取用户输入的类型:
nextInt(); 获取用户输入的整数
nextDouble(); 获取用户输入的小数
nextBoolean(); 获取用户输入的boolean值
nextLine(); 结果是String类型,获取用户输入的字符串
next(); 结果是String类型,获取用户输入的字符串
这些方法统称为阻塞方法
阻塞方法:
程序执行到这个方法的时候,会阻塞主线程,程序不会继续执行,知道用户输入结束,程序继续执行
java.util.InputMismatchException
注意
异常名称: 输入的类型不匹配异常
产生原因: 用户输入的类型和接收的类型不一致
解决办法: 类型匹配即可
举例说明
// 1.导包
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
// 2.创建键盘输入对象
// Scanner input = new Scanner(System.in);
// 提示性语句
// System.out.print("请输入整数: ");
// 3.通过键盘输入给变量赋值
int i = input.nextInt();
System.out.println("你输入的整数是: " + i);
System.out.print("请输入小数: ");
double j = input.nextDouble();
System.out.println("你输入的小数是: " + j);
System.out.print("请输入boolean类型: ");
boolean k = input.nextBoolean();
System.out.println("你输入的boolean类型是: " + j);
System.out.print("请输入字符串类型: ");
String str = input.next();
System.out.println("你输入的字符串类型是: " + str);
}
}
public class pracscanner {
public static void main(String[] args){
//1.键盘录入两个数,并将这两个数求和,求最大值,并输出
Scanner input = new Scanner(System.in);
System.out.print("请输入第一个数: ");
// 3.定义变量获取用户输入的第一个数
int num1 = input.nextInt();
System.out.print("请输入第二个数: ");
// 4.定义变量获取用户输入的第二个数
int num2 = input.nextInt();
// 5.定义求和变量sum来计算两个数的和
int sum = num1 + num2;
// 6.定义最大值变量来计算两个数的最大值
int max = num1 > num2 ? num1: num2;
// 7.输出和以及最大值
System.out.println("两个数的和为: " + sum + ",两个数的最大值为: " + max);
}
}
/*
2、键盘录入两个数,并判断两个数是否相等 (不要使用if-else)
提高: 如果两个数相等,输出两个数相等,不相等就输出两个数不相等,同时输出两个数中较大的值
*/
import java.util.Scanner;
public class ScannerDemo02 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入第一个数: ");
int num1 = input.nextInt();
System.out.print("请输入第二个数: ");
int num2 = input.nextInt();
String result = (num1 == num2) ? "两个数相等": ("两个数不相等,并且两个数中最大值为: " + (num1 > num2? num1: num2));
System.out.println(result);
}
}
if 语句
单if语句
- 单if语句
- 需求: 小明考试成绩高于90分,奖励一个桃子
- 定义: 针对条件情况单一的时候选择单if语句
- 格式:
- if(条件表达式) {
- 语句体;
- }
- 执行流程:
- 1.判断条件表达式是否成立
- 成立
- 执行语句体
- 不成立
- 不处理
- 特点:
- 1.三目运算符Y和Z中只能够写一条语句,if语句
可以有多条,能够使用三目改进,尽量使用三目 - 2.如果if语句中只有一条语句,大括号可以省略
不写,建议写上 - 3.if(score >= 90);{},无论条件是否成立,{}都会被执行
- 案例:
- 1、张三Java成绩大于98分,而且音乐成绩大于80分,老师奖励他;
- 或者Java成绩等于100分,音乐成绩大于70分,老师也可以奖励他。
- 张三Java成绩大于98分,而且音乐成绩大于80分
- 或者
- Java成绩等于100分,音乐成绩大于70分
- 老师奖励他
public class If {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入考试成绩: ");
double score = input.nextDouble();
// System.out.println(score >= 90 ? "奖励桃子一个": "");
// if (score >= 90) System.out.println("奖励桃子");
if (score >= 90) {
System.out.println("奖励桃子");
}
input.close();
}
}
if else语句
- 需求: 隔壁老王考试成绩大于30分,奖励去隔壁家看电影,否则去隔壁家打牌
- 定义: 针对处理两种情况的时候使用if-else语句
格式
- if(条件表达式) {
- 语句体1;
- } else {
- 语句体2;
- }
- 执行流程:
- 1.判断条件表达式是否成立
- 成立
- 执行语句体1
- 不成立
- 执行语句体2
特点:
-
1.条件表达式必须是boolean类型的
-
2.如果if或者else语句体中只有一条语句,大括号可以省略,建议不省略
*/
举例说明
public class IfDemo03 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入考试成绩: ");
double score = input.nextDouble();
// System.out.println(score > 30 ? "隔壁家看电影": "隔壁家打牌");
if (score > 30) System.out.println("看电影");
else System.out.println("打牌");}
}
多重if语句
- 定义: 针对多种情况【区间】的时候选择多重if语句
- 格式:
- if(布尔表达式1) {
- 语句块1;
- } else if(布尔表达式2) {
- 语句块2;
- } ………
- else if(布尔表达式n){
- 语句块n;
- } else {
- 语句块n+1;
- }
* - 执行流程:
- 逐条if语句进行判断
- 条件匹配,进入语句体
- 否则对if语句继续匹配
* - 特点:
- 1.if语句和else语句只有一个,elseif语句可以有多个,else语句可以省略
- 2.无论多重if语句中有多少个语句体,每次只能够执行一个语句体
- 3.书写选择语句时候,注意一般都会先考虑写完其他情况
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入分数:");
int score=input.nextInt();
if (score>90) {
System.out.println("优秀");
}else if(score>80){
System.out.println("良好");
}else if(score>60){
System.out.println("及格");
}else{
System.out.println("差");
}
}
}
嵌套if语句
定义: 针对条件特别复杂的情况,本质还是前三种if语句的相互结合
- 格式: 没有固定格式
- Debug断点调试
- 1.定义断点
- 2.进入Debug模式
- 注意:
- 1.判断两种类型是否相等
- 基本数据类型 == 比较的是数值本身
- 引用数据类型 == 比较的地址
- 引用数据类型比较是否相等暂时使用equals方法,后面讲解
- 2.嵌套if语句慎用,导致程序的可读性降低
举例说明
String gender=input.next();
gender.equals(“男”)
public class BreakPractice03 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("請輸入分數:");
int grade=input.nextInt();
if(grade<10){
System.out.println("恭喜進入決賽!");
System.out.println("請輸入您的性別!");
String gender=input.next();
if(gender.equals("男")){
System.out.println("恭喜您進入男子組決賽");
}else if(gender.equals("女")){
System.out.println("恭喜您進入女子組決賽");
}
}else{
System.out.println("抱歉您未能進入決賽!");
}
}
}
循环语句
for循环
通过题目讲解循环的正确打开方式
循环本质: 解决代码重复问题
格式
for(1.初始化语句;2.循环条件语句;4.控制条件语句){
3.循环体语句;
}
for循环执行流程参见图解
for循环的特点
1.表达式一省略,可以放在循环的外面,并且表达式1只能执行一次。
2.表达式二必须是boolean类型表达式,使用关系运算符和逻辑运算符。
表达式二也可以省略,表示死循环。
3.表达式三也可以省略,表示死循环
4.表达式123 都可以省略,成为for循环标准四循环格式
for(;;)
/*在控制台输出100句HelloWorld*/
public class BreakPractice04 {
public static void main(String[] args) {
for(int i=1;i<=100;i++){
System.out.println("HelloWorld");
}
}
}
解题思路:
- 1.分析题目要求,怎么想就怎么写
- 2.找规律 【确定重复的次数】 10
- 找相同 直接放入到循环体中 System.out.println();
- 找不同
- i = 1 1
- i = 2 2
- i = 3 3
- i i
- 尽量和循环变量建立联系
- 如果不能够建立联系,那么自己自定义变量和变化规律建立联系
2、计算1到100的和,用for语句去实现
- 解题思路:
- 1.分析题目要求,怎么想就怎么写
- 2.找规律 【确定重复的次数】
- 找相同 直接放入到循环体中
- 找不同
- i = 1 1
- i = 2 2
- i = 3 3
- i i
- 尽量和循环变量建立联系
- 如果不能够建立联系,那么自己自定义变量和变化规律建立联系
- 分析:
- 1 + 2 + 3 + 4 + … + 100
- 定义求和变量sum来保存每次相加的结果
- 0 + 1 = 1
- 1 + 2 = 3
- 3 + 3 = 6
- 6 + 4 = 10
- …
- ? + 100 = 结果
- 表达式左边第一个加数是上一次计算的结果
- 表达式左边第二个加数从1~100
- 表达式右边的结果就是累加的结果
- 求和思想
- 1.定义求和变量
- 2.累加求和
while循环
引入:有了for循环为什么还需要学习while循环?
定义:针对循环次数不确定情况使用
格式;
1.初始化语句;
while(2.循环条件语句){
3.循环体语句
4.控制条件语句;
}
代码说明【重点】
public class Test {
public static void main(String[] args) {
double i=0.08;
int count=0;
while(i<8848130){// while的條件語句意思是滿足繼續循环,不滿足才会結束流程,不是直到。。為止的意思,理解!記牢!
i=i*2;
count++;
}
System.out.println(count);
}
}
do while 循环
引入:有了while循环为什么需要学习do-while循环?
do-while格式
1.初始化语句;
do{
3.循环体语句;
4.控制条件语句;
}while(2.控制条件语句);
嵌套循环
定义:前三种循环的嵌套使用
格式;没有固定格式
执行流程:
特点:
1.外层循环遍历一次,内层循环要遍历一轮。
2,外层循环控制行数,内层循环控制列数。
3.每次进入了内层循环就不要再考虑外层循环。
代码说明
/*请在控制台输入如下图形:【外行内列】
* *******
* *******
* ********/
public class Test {
public static void main(String[] args) {
for(int j=1;j<=3;j++){
for(int i=1;i<=7;i++){
System.out.print("*");
}System.out.println();
}
}
}
/*/*
* 1、打印如下图案 直角三角形
* *
* *** 提示:
* ***** 外层循环控制行数
* ******* 内层循环控制每行的*号数
* **********/
public class Test {
public static void main(String[] args) {
for(int i=1;i<=5;i++){
for(int b=1;b<=(2*i-1);b++){
System.out.print("*");//此處用print不換行。
}
System.out.println();//此處作用是用來換行的
}
}
}
本章习题集
**1.求不能被3整除的数之和
注意:syso在循环体外是输出整体结果,在循环体内会每次循环输出一次。
public class BreakPractice04 {
public static void main(String[] args) {
int sum=0;
for(int i=1;i<=100;i++){
if(i%3 !=0){sum=sum+i;}
}System.out.println(sum);
}
}
2.求n的阶乘
public class BreakPractice04 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("請輸入整數n");//做題時忘加此行,無法輸入;
int n=input.nextInt();
int sum=1;
for(int i=1;i<=n;i++){//i要先定義,別就寫個i=。。
sum=sum*i;
}
System.out.println(sum);
}
}
3.请输入一个值,输出加法表
public class Practice01 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("請輸入一個正整數");
int n=input.nextInt();
int sum=0;
for(int i=0,j=n;i<=n&& j>=0;i++,j-- ){
sum=i+j;
System.out.println(i+"+"+j+"="+sum);
}
}
}
##4 顾客折扣
普通顾客 购物满100元9折
会员购物 8折(会员购物满200元 7.5折)
输入是否是会员,再输入购物金额,输出实际付款。
import java.util.Scanner;
public class ImportantPractice07 {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.println("请问您是否是会员(是/否):");
String choice=input.next();
System.out.println("请输入购物金额");
double cost=input.nextDouble();
if (choice.equals("是")) {
if (cost>=200) {
System.out.println("實際付款"+cost*0.75);
}else{
System.out.println("實際付款"+cost*0.8);
}
}else if(choice.equals("否")){
if (cost>=100) {
System.out.println("實際付款"+cost*0.9);
}else{System.out.println("實際付款"+cost);}
}else{}
}
}
超市换购系统,功能如下:
用户输入消费金额
输入完成后询问是否参加换购活动
输入是
弹出5个优惠活动显示供用户选择
1:满50元,加2元换购百事可乐饮料一瓶
2:满100元,加3元换购500ml可以一瓶
3:满100元,加10元换购5公斤面粉
4:满200元,加10元可以换购一个苏珀尔炒菜锅
5:满200元,加20元可以函购欧莱雅爽肤水一瓶
假设选择4
输出消费总金额
并显示成功换购的奖品
输入否
欢迎下次光临*/
public class ImportantPractice11 {
public static void main(String[] args){
Scanner input=new Scanner (System.in);
System.out.println("请输入消费金额:");
double cost=input.nextDouble();
System.out.println("是否參與換購?是/否");
String choice =input.next();
if(choice.equals("是")){
System.out.println("換購選擇");
System.out.println("1:满50元,加2元换购百事可乐饮料一瓶");
System.out.println("2:满100元,加3元换购500ml可乐一瓶");
System.out.println("3:满100元,加10元换购5公斤面粉");
System.out.println("4:满200元,加10元可以换购一个苏珀尔炒菜锅");
System.out.println("5:满200元,加20元可以换购欧莱雅爽肤水一瓶");
System.out.println("请选择换购类型,回复对应序号即可!");
int numb=input.nextInt();
switch(numb){
case 1:
if(cost>=50){
cost=cost+2;
System.out.println("您本次总共消费"+cost+"元;");
System.out.println("成功换购了:百事可乐饮料一瓶");
}else{System.out.println("对不起,您本次消费不满足该条件!");}
break;
case 2:
if(cost>=100){
cost=cost+3;
System.out.println("您本次总共消费"+cost+"元;");
System.out.println("成功换购了:500ml可乐一瓶");
}else{System.out.println("对不起,您本次消费不满足该条件!");}
break;
case 3:
if(cost>=100){
cost=cost+10;
System.out.println("您本次总共消费"+cost+"元;");
System.out.println("成功换购了:5公斤面粉");
}else{System.out.println("对不起,您本次消费不满足该条件!");}
break;
case 4:
if(cost>=200){
cost=cost+10;
System.out.println("您本次总共消费"+cost+"元;");
System.out.println("成功换购了:一个苏珀尔炒菜锅");
}else{System.out.println("对不起,您本次消费不满足该条件!");}
break;
case 5:
if(cost>=200){
cost=cost+20;
System.out.println("您本次总共消费"+cost+"元;");
System.out.println("成功换购了:欧莱雅爽肤水一瓶");
}else{System.out.println("对不起,您本次消费不满足该条件!");}
break;
}
}
else if (choice.equals("否")){
System.out.println("欢迎下次光临!");
}else{
}
}
}
5.水仙花题目
在控制台输出1000以内的所有水仙花数,并统计水仙花数的个数
注:水仙花数指的是其各位数的立方和等于该数本身的三位数
153
分析:
1.定义统计变量
2.遍历100~999之间的每一个数
3.获取到每一个数,分离每一位
4.判断各位的立方和是否等于概述本身
相等
输出这个数
count++;
不相等
不处理
public class Test {
public static void main(String[] args) {
int count=0;
for(int i=100;i<=999;i++){
int ge=i/1%10;
int shi=i/10%10;
int bai=i/100%10;
if (i==Math.pow(ge, 3)+Math.pow(shi, 3)+Math.pow(bai, 3)) {
System.out.println(i);
count++;
}
}System.out.println(count);
}
}
6.商品清单打印案例
public class DoWhileLoopDemo02 {
public static void main(String[] args) {
System.out.println("************************");
System.out.println("请选择购买的商品编号:");
System.out.println("1.T恤\t\t2.网球鞋\t\t3.网球拍");
System.out.println("************************");
Scanner input = new Scanner(System.in);
String isGoOn = "";
// 定义变量保存应付的金额
double totalPrice = 0.0;
// 定义折扣
double discount = 0.8;
do {
System.out.print("请输入商品编号: ");
int buyNo = input.nextInt();
System.out.print("请输入购买数量: ");
int num = input.nextInt();
// 定义变量保存商品的名称
String goodName = "";
// 定义变量保存商品的单价
double price = 0.0;
// 定义变量保存商品的总价
double money = 0.0;
switch (buyNo) {
case 1:
goodName = "T恤";
price = 245.0;
break;
case 2:
goodName = "网球鞋";
price = 570.0;
break;
case 3:
goodName = "网球拍";
price = 320.0;
break;
default:
System.out.println("该商品不存在!!!");
break;
}
money = price * num;
System.out.println(goodName + " ¥" + price + " \t数量 " + num + "\t合计 ¥" + money);
totalPrice += money;
System.out.print("是否继续(y/n): ");
isGoOn = input.next();
} while(isGoOn.equals("Y") || isGoOn.equals("y"));
System.out.println("折扣: " + discount);
double payMoney = totalPrice * discount;
System.out.println("应付金额: " + payMoney);
double realMoney = 0.0;
System.out.print("实付金额: ");
while((realMoney = input.nextDouble()) < payMoney) {
System.out.print("您输入的金额小于应付金额,请重新输入: ");
}
System.out.println("找钱:" + (realMoney - payMoney));
}
}
7.S=a+aa+aaa+、、
求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
2 + 210+2 + (210+2)10 +2 + ((210+2)*10 +2)*10 + 2
8.阶和
计算 n+(n-1)+(n-2)+…+3+2+1的值
public class Test {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("請輸入級n");
int n=input.nextInt();
int sum=0;
for(int i=1;i<=n;i++){
sum=sum+i;
}System.out.println(sum);
}
}
**9.计算正整数各位数的和
问题:编写一个程序,让用户输入一个正整数值,然后计算该数各位数的和,
例如:如果输入的数是123,则计算结果是6
123%10=3 ;123/10=12;求和//得出个位
12%10=2; 12/10=1 ;求和 //得出十位
1%10=1; 1/10=0; 求和 //得出百位
0 不和循环条件结束