next()与nextLine()的区别:
next()既能以回车键结束输入,也能以空格键结束输入;也就是说next()无法接收空格;nextLine()只能以回车键结束,也就是可以接收空格。next()必须接收到有效字符才能结束输入,也就是说先输入空格再输入有效字符再结束的话,是可以接收到有效字符的。next()与nextLine()同时使用时,如果next()是以回车键结束的,那么如果下一条语句是nextLine()的话,会认为已经接收到回车键结束了从而接收不到有效字符。所以nextLine()千万不能跟在next()后面使用。反过来就可以。
执行结构
循环结构:重复执行某一循环体,直到不满足给定条件为止。 分支结构:根据给定的条件判断执行哪个分支。 顺序结构:根据语句出现的顺序执行语句。 Tips:任何算法都可以以循环结构,分支结构,顺序结构这三种基本结构组合而成。
switch语句
switch语句case子句中的取值必须是常量。
break与continue的区别
break语句用于终止本轮所有次循环,即不执行本次循环中break后面的语句,直接跳出循环。continue用于终止本轮本次循环,即本次循环中continue后面的代码不执行,进行下一次循环的入口判断。如果要跳出多层循环,给要跳出的循环命名,之后在break语句后面跟上该命名就可以跳出该循环。
/**
* main:(程序执行的入口).
* @author 叶子健
* @param args 命令行参数
* @since JDK 1.8
*/
public static void main(String[] args) {
first: for (int i = 0; i < 10; i++) {
System.out.print("i="+i+"\t");
for (int j = 0; j < 5; j++) {
System.out.println("j="+j);
break first;
}
}
}
判断用户输入类型
用Scanner中的方法hasNextXXX()判断。
作业
public static void main(String[] args){
//某市出租车,起步价(2公里以内)为8元,超过2公里的按照每公里4.5元计算。要求根据路程计算费用。
try {
System.out.println(calculateTaxiFare(-3));
} catch (Exception e) {
e.printStackTrace();
}
}
public static double calculateTaxiFare(int n) throws Exception {
double taxiFare = 0;
if (n <= 0)
throw new Exception("请传递大于0的参数");
else if (n > 0 && n <= 2)
taxiFare = 8;
else
taxiFare = 8 + 4.5*(n-2);
return taxiFare;
}
public static void main(String[] args){
//输入年份,判断输入的年份是否是闰年。(闰年的条件是能被4整除,但不能被100整除;或能被400整除。)
try {
Scanner input = new Scanner(System.in);
System.out.print("请输入年份:");
int year = input.nextInt();
isLeapYear(year);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void isLeapYear(int year) throws Exception {
if(year < 0)
throw new Exception("请输入大于0的年份。");
else if(year%4 == 0 && year%100 !=0 || year%400 ==0)
System.out.println(year+"年是闰年。");
else
System.out.println(year+"年不是闰年。");
}
public static void main(String[] args){
//要求输入月份,判断该月所处的季节并输出季节(假设:12、1、2月为冬季,依次类推)。
try {
Scanner input = new Scanner(System.in);
System.out.print("请输入月份:");
int year = input.nextInt();
getSeasonByMonth(year);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void getSeasonByMonth(int month) throws Exception {
if(month<1 || month>12)
throw new Exception("请输入1到12的月份。");
//将输入的月份转换成模12域中的数,这样0,1,2就是冬季;3,4,5就是春季以此类推。
int season = month%12;
if(season<3)
System.out.println(month+"月是冬季。");
else if(season>=3 && season<6)
System.out.println(month+"月是春季。");
else if(season>=6 && season<9)
System.out.println(month+"月是夏季。");
else
System.out.println(month+"月是秋季。");
}
public static void main(String[] args){
/*根据《国家电网销售电价表》,居民生活用电按3个梯度收费:月用电量150千瓦时及以下部分,每千瓦时0.43元,151—400千瓦时部分为0.45元,
401千瓦时以上部分为0.52元,请编写程序,当输入用户的用电量时,计算出所需付的费用。*/
try {
Scanner input = new Scanner(System.in);
System.out.print("请输入用电量:");
int electricity = input.nextInt();
calculatorFeesByElectricity(electricity);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void calculatorFeesByElectricity(int electricity) throws Exception {
if(electricity<0)
throw new Exception("请输入大于0的用电量。");
double fees;
if(electricity<=150) {
fees = 0.43*electricity;
System.out.println("用电量为"+electricity+"度,处于第一梯度。需要付的电费是"+fees+"元。");
}
else if(electricity>150 && electricity<=400) {
fees = 0.43*150 + 0.45*(electricity-150);
System.out.println("用电量为"+electricity+"度,处于第二梯度。需要付的电费是"+fees+"元。");
}
else if(electricity>400) {
fees = 0.43*150 + 0.45*250 + 0.52*(electricity-400);
System.out.println("用电量为"+electricity+"度,处于第三梯度。需要付的电费是"+fees+"元。");
}
}
public static void main(String[] args){
/*商场根据会员积分打折:
* 2000分以内打9折,
* 4000分以内打8折,
* 8000分以内打7.5折,
* 8000分以上打7折,
* 使用if-else-if结构,实现手动输入购物金额和积分,计算出应缴金额。
*/
try {
Scanner input = new Scanner(System.in);
System.out.print("请输入购物金额:");
double money = input.nextInt();
System.out.print("请输入积分:");
int integral = input.nextInt();
calculatorMoneyByIntegral(money, integral);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void calculatorMoneyByIntegral(double money, int integral) throws Exception {
if(money<0 || integral<0)
throw new Exception("请输入大于0的购物金额与积分。");
double finalMoney;
if(integral<=2000) {
finalMoney = 0.9*money;
System.out.println("您的积分为"+integral+",为您打九折。最终需要付的金额是"+finalMoney+"元。");
}
else if(integral>2000 && integral<=4000) {
finalMoney = 0.8*money;
System.out.println("您的积分为"+integral+",为您打八折。最终需要付的金额是"+finalMoney+"元。");
}
else if(integral>4000 && integral<=8000) {
finalMoney = 0.75*money;
System.out.println("您的积分为"+integral+",为您打七五折。最终需要付的金额是"+finalMoney+"元。");
}
else if(integral>8000){
finalMoney = 0.7*money;
System.out.println("您的积分为"+integral+",为您打七折。最终需要付的金额是"+finalMoney+"元。");
}
}
public static void main(String[] args){
/*一年中有12个月,而每个月的天数是不一样的。其中大月31天,
* 分别为1,3,5,7,8,10,12月,小月30天,分别为4,6,9,11月。
* 还有二月比较特殊,平年的二月只有28天,而闰年的二月有29天,
* 由用户在控制台输入年份和月份,程序计算该年该月的天数。
*/
try {
Scanner input = new Scanner(System.in);
System.out.print("请输入年份:");
int year = input.nextInt();
System.out.print("请输入月份:");
int month = input.nextInt();
getDaysByYearAndMonth(year, month);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void getDaysByYearAndMonth(int year, int month) throws Exception {
if(year<0 || month<0)
throw new Exception("请输入大于0的年份与月份。");
HashMap<Integer, Integer> monthToDays = new HashMap<>() ;
{
monthToDays.put(1, 31);
monthToDays.put(3, 31);
monthToDays.put(4, 30);
monthToDays.put(5, 31);
monthToDays.put(6, 30);
monthToDays.put(7, 31);
monthToDays.put(8, 31);
monthToDays.put(9, 30);
monthToDays.put(10, 31);
monthToDays.put(11, 30);
monthToDays.put(12, 31);
}
if(isLeapYear(year)) {
monthToDays.put(2,29);
System.out.print(year+"年是闰年,");
}
else {
monthToDays.put(2,28);
System.out.print(year+"年不是闰年,");
}
System.out.println(year+"年的"+month+"月共有"+monthToDays.get(month)+"天。");
}
public static boolean isLeapYear(int year) throws Exception {
if(year < 0)
throw new Exception("请输入大于0的年份。");
else if(year%4 == 0 && year%100 !=0 || year%400 ==0)