目录
第一题:
要求:
假设某人有100000现金。 每经过一次路口需要进行一次交费。 交通规则为为当他现金大于50000时每次需要交5%如果现金小于等于50000时每次交5000。 请写一程序计算此人可以经过多少次这个路口
第一遍代码
//分三种情况 1)>50000,2)<=50000或者>=1000,3)<1000
//定义变量表示钱,过路费,次数,
//double money = 100000;double cost = 0;int count = 0;
//
public class HomeWork0101{
//编写一个main方法
public static void main(String[] args){
double money = 100000;
int count = 0;
double cost = 0;
if(money > 50000){
cost = money*0.05;
money -= cost;
count++;
}else if(money >= 1000){
cost = 1000;
money -= cost;
count++;
}else{
System.out.println("该人费用不够通过一次路口");
}
System.out.println("该人可以经过" + count + "次路口");
}
}
运行结果,只有一次,只运行了第一个if得到count = 1就输出了
所以需要循环计算,但是我们并不知道这个程序需要循环多少次,所以使用while(true)这个死循环,当money<1000的时候用break结束这个循环
public class HomeWork0101{
//编写一个main方法
public static void main(String[] args){
double money = 100000;
int count = 0;
double cost = 0;
while(true){
if(money > 50000){
cost = money*0.05;
money -= cost;
count++;
}else if(money >= 1000){
cost = 1000;
money -= cost;
count++;
}else{
break;
}
}
System.out.println("该人可以经过" + count + "次路口");
}
}
出现的错误总结:
1.数字10000,不能写成10,000;2.定义变量后面的常量可以是表达式,但是不能有百分号,如money*5%就不行,必须写成money*0.05 3.break语句必须用在循环语句中
代码精简:cost = money*0.05; money -= cost; 可以写成 money = money-money*0.05 money=money*0.95进一步简化成 money *= 0.95;
cost = 1000; money -= cost; 简化成money -= 1000;不需要cost这个变量了
public class HomeWork0101{
//编写一个main方法
public static void main(String[] args){
double money = 100000;
int count = 0;
while(true){
if(money > 50000){
money *= 0.95;
count++;
}else if(money >= 1000){
money -= 1000;
count++;
}else{
break;
}
}
System.out.println("该人可以经过" + count + "次路口");
}
}
第二题:判断一个整数的范围 大于0,小于0 ,等于0
import java.util.Scanner;
public class HomeWork0201{
//编写一个main方法
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要判断的数字");
int num1 = sc.nextInt();
if(num1 > 0){
System.out.println("数字" + num1 + "的范围大于0");
}else if(num1 < 0){
System.out.println("数字" + num1 + "的范围小于0");
}else{
System.out.println("数字" + num1 + "等于0");
}
}
}
出现的错误:
else if(n1 < 0)中文括号,导致编译时报错 非法字符和有if但是没有else
第三题:
要求:
判断一个年份是否是闰年
闰年的特征:(1)年份能被 4 整除,但不能被 100 整除;(2)能被 400
整除
代码:
import java.util.Scanner;
public class HomeWork0301{
//编写一个main方法
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要判断的年份");
int year = sc.nextInt();
//(1)年份能被 4 整除,但不能被 100 整除;(2)能被 400
//整除
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){//短路与和短路或
System.out.println(year + "年是闰年");
}else{
System.out.println(year + "年不是闰年");
}
}
}
出现的错误:
①int year = sc.nextInt();语句中sc后面的点漏掉了,②忘记导Scanner的包
第四题:
要求
判断一个数是不是水仙花数(三位数)
一个三位数,其各个位上数字立方和等于其本身,即num = a*a*a+b*b*b+c*c*c
百位数a=num/100%10; 十位数 b=num/10%10; 个位数 c=num%10;
输入一个三位数
代码:
import java.util.Scanner;
public class HomeWork0401{
//编写一个main方法
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入你想判断的数字,范围在100-999之间");
int num = sc.nextInt();
int a = num / 100 % 10;
int b = num / 10 % 10;
int c = num % 10;
if(num == a*a*a+b*b*b+c*c*c){
System.out.println(num + "是水仙花数");
}else{
System.out.println(num + "不是水仙花数");
}
}
}
第五题跳过
第六题 :
要求:
输出1-100之间不能被5整除的数,每5个一行
public class HomeWork0601{
//编写一个main方法
public static void main(String[] args){
//先输出1-100
//不能被5整除 i%5!=0;
int count = 0;
for(int i = 1; i <= 100; i++){
if(i % 5 !=0){
System.out.print(i + " ");
count++;
}
if(count%5==0){
System.out.println("");
}
}
}
}
运行结果
每四行数字之后会多一行空行,
错误原因:
当i=24时,count=20;20%5==0,换行,当i=25时,i不输出,但是count还是20;20%5==0,再次换行
更改后的代码
public class HomeWork0601{
//编写一个main方法
public static void main(String[] args){
//先输出1-100
//不能被5整除 i%5!=0;
int count = 0;
for(int i = 1; i <= 100; i++){
if(i % 5 !=0){
System.out.print(i + " ");
count++;
if(count%5==0){
System.out.println("");
}
}
}
}
}
第七题:
要求:
输出小写的a-z以及大写的Z-A
//字符型用char,a-z对应的十进制数字是97-122;
关键知识点:
char类型的数据是可以参加运算的
public class HomeWork0701{
//编写一个main方法
public static void main(String[] args){
//单个字符的数据类型是char
for(char c1 = 'a'; c1 <= 'z'; c1++ ){
System.out.print(c1 + " ");
}
System.out.println("");
for(char c2 = 'Z'; c2 >= 'A'; c2-- ){
System.out.print(c2 + " ");
}
}
}
第八题:
要求:
求1-1/2+1/3-1/4...-1/100的和
分析:
//化繁为简:100以内奇数1+3+5+7+...+99,50个奇数 前面都是+
//100以内偶数 -2-4-6-8-10-...-100 前面都是-
//1/i必须写成1.0/i
//求出1-1/2+1/3-1/4...1/100的和;
public class HomeWork0801{
//编写一个main方法
public static void main(String[] args){
//奇数为正,偶数为负
double sum = 0;
for(int i = 1; i <= 100; i++){
if(i%2 != 0){
sum += 1/i;
}else{
sum -= 1/i;
}
}
System.out.println("sum=" + sum);
}
}
运行结果
错误原因:
1/i为int型运算,最后结果为0,只有i=1的时候,sum=1.0,后面所有运算结果都是0,所以最后结果也是1.0
改正:
把1/i改成1.0/i;
//求出1-1/2+1/3-1/4...1/100的和;
public class HomeWork0801{
//编写一个main方法
public static void main(String[] args){
//技术为正,偶数为负
double sum = 0;
for(int i = 1; i <= 100; i++){
if(i%2 != 0){
sum += 1.0/i;
}else{
sum -= 1.0/i;
}
}
System.out.println("sum=" + sum);
}
}
运行结果
第九题:
要求:
求1+(1+2)+(1+2+3)+(1+2+3+4)+....+(1+2+3+...100)的和
分析:
//两个for循环,第一个是有100个加数
//第二个for循环是每个加数内部的增加
//求出1+(1+2)+(1+2+3)+(1+2+3+4)+...(1+2+3+100)的和;
public class HomeWork0901{
//编写一个main方法
public static void main(String[] args){
int sum = 0;
for(int i = 1; i <= 100; i++){
for(int j=1; j<=i; j++){
sum+=j;//i=1 sum=1;i=2 sum = 1+1 ;j=2;sum=1+1+2
}
}
System.out.println("sum = " + sum);
}
}