Java基础练习题

Java基础已经更新完毕了,本次来更新一期我在学习中遇到的容易出错的题,或者是解题时有比较多想法的题目。容易出错的点还有想法涌现的地方我都会注释出来。

1.运算符问题,下面代码分别输出什么?

public static void main(String[] args) {

int i1 = 10, i2 = 10;

System.out.println("i1 + i2 = " + i1 + i2);//i1 +i2 = 1010 输出语句中的第二第三个+起到连接字符  串的功能,所以输出结果是字符串1010而不是数字20,这道题意在提醒+的两种功能用法 System.out.println("i1 - i2 = " + i1 - i2);//编译报错

System.out.println("i1 * i2 = " + i1 * i2);//100

System.out.println("i1 / i2 = " + i1 / i2);//1 }

2.class Test{

public static void main (String [] args) {

short a,b,C; a=1;//隐式转换 在给byte,short,char类型进行赋值时,在它们所能表 示的数字范围内,都存在隐式转换,可以将int类型的值赋给它们。

b=2;//隐式转换 C=a+b;

a += 2;//隐式转换

        }

}

以上代码中,哪一句是错误的?

C=a+b;

        a b为short类型,当short类型进行运算时,会默认转换为int类型进行运算,而C为short类型,数据类型不同,编译会报错。

3.下面程序运行的结果正确的是:

public class Demo{

public static void main (String args[]) {

int num=0;

for (int i=0;i<100;i++) {

num=num++;

        }

System.out.println("num="+num);

         }

}

num=0

        本道题也是我在学习中思考较多的一道题,这道题与数据结构的知识点还是有关系的,数据结构中有栈这个概念,我们来看这道题,int num = 0;这条语句,的含义是说在局部变量表中,给num赋一个值为0,再看接下来的for语句,for语句中对num进行了操作,而这些操作都是在栈中进行的,此题先给num 进行了赋值 num =num,这项操作完成后,num进行了num++操作,但是此时num返回给局部变量表的值是num=num,所以此时num是为0的,并且因为for语句循环了100次,但是num的值是一直不变的,一直为0.

4.给定如下java代码,编译运行之后结果是:

class Demo{

public static void main(String args[]) {

for (int i=0;i<3; i++) {

System.out.print (i) ;//0 1 2

        }

System. out. print (i);//编译报错 找不到变量i

        }

}

        这道题需要注意for语句定义变量是在()中,它定义的变量的作用域只有for语句{}内,而第二个输出语句明显是在for语句作用范围之外,所以第二个输出语句是会报错的,它找不到变量i。

二.编程题 1.判断某一年是否为闰年 通过Scanner 输入一个年份,然后判断概念是否是闰年 闰年判断标准(满足任何一个)

1.如果能够被4整除&&但是不能被100整除

2.能够被400整除

        拿到这道题,根据题意要求直接就可以写,它的要求通过Scanner,那我们就按照要求来 Scanner s = new Scanner(System.in); int y = s.nextInt();这两条语句就满足了通过控制台输入年份的要求,我们再看题目第一条要求,if(y%4==0&&y%100!=0){System.uot.println(y+"年是闰年");}这样第一个要求就满足了,这里我们来提一下&和&&,这两个与操作都是可以用的,但是我们为了提升代码的运行速度,建议使用&&。接下来我们来看第二个要求,能够被400整除,else if(y%400==0){System.out.println(y+"年是闰年");}else {System.out.println(y+"不是闰年");}至此,按照题意我们就完成了这道题,下面是我按照以上思路的完整代码:

import java.util.Scanner;
​
public class Year {
   
    public static void main(String[] args) {
​
        Scanner s = new Scanner(System.in);
      
            System.out.println("请输入年份:");
            int y = s.nextInt();
        if (y%4 == 0 && y%100 != 0){
            System.out.println(y+"年是闰年");
        }
        else if(y%400 == 0){
            System.out.println(y+"年是闰年");
        }
        else{
            System.out.println(y+"年不是闰年");
        }  
    }
}
​

        按照题目我写完了之后开始思索,能否将代码简化,能否将两个条件用||连接起来,我做了以下尝试:

import java.util.Scanner;
​
public class Year {
   
    public static void main(String[] args) {
​
        Scanner s = new Scanner(System.in);
       
            System.out.println("请输入年份:");
            int y = s.nextInt();
        /*if (y%4 == 0 && y%100 != 0){
            System.out.println(y+"年是闰年");
        }
        else if(y%400 == 0){
            System.out.println(y+"年是闰年");
        }*/
       
            if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
                System.out.println(y + "年是闰年");
          }
         else{
            System.out.println(y+"年不是闰年");
        }
    }
}
​

        这个代码也是可以用来判断闰年的,但是我在对条件进行判断时并未注意()问题,没有条件层次的,虽然我运行时并没有问题,但是不建议大家向我学习,下边的代码,是经过改进的,我想到的最简方法了。

public static void main(String[] args) {
       Scanner s=new Scanner(System.in);
       System.out.println("请输入年份:");
       int y = s.nextInt();
       if((y%4==0&&y%100!=0)||(y%400==0) ){
           System.out.println(y+"年是闰年");
   }
       else {
           System.out.println(y+"不是闰年");
       }
    }

2.根据指定月份,打印该月份所属的季节,3,4,5春季 678夏季 9 10 11秋季 12 ,1,2 冬季

        这道题就是简单的条件判断语句,我读完这道题首先想到的是switch语句,因为switch语句比较多用来写条件选项固定的判断语句,下边就是我最初的代码:

import java.util.Scanner;
​
public class Month {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入一个月份:");
        int m = s.nextInt();
        switch(m){
            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;
            case 6:
                System.out.println("夏季");
                break;
            case 7:
                System.out.println("夏季");
                break;
            case 8:
                System.out.println("夏季");
                break;
            case 9:
                System.out.println("秋季");
                break;
            case 10:
                System.out.println("秋季");
                break;
            case 11:
                System.out.println("秋季");
                break;
            case 12:
                System.out.println("冬季");
                break;
            default:
                System.out.println("请输入有效月份!");
        }
    }
}
​

        我们可以很直观的看出,虽然switch语句可以实现这道题目,但是确实很繁琐,十二次case,一次default,代码冗余还是需要改进的,接下来我就想着是否可以使用if语句来实现,下边的代码就是我尝试的结果:

 public static void main(String[] args) {
      Scanner s = new Scanner(System.in);
       System.out.println("请输入月份:");
       int m = s.nextInt();
​
       if(m>=3&&m<=5){
           System.out.println(m+"月是春季");
       }
       else if(m>=6&&m<=8){
           System.out.println(m+"月是夏季");
       }
       else if(m>=9&&m<=11){
           System.out.println(m+"月是秋季");
       }
       else if(m==12||m<=2){
           System.out.println(m+"月是冬季");
       }
       else {
           System.out.println("请输入有效月份!");
       }
   }

        这段代码是我第一次使用if语句写的,很不幸我自己找到了漏洞,以上代码在我输入负数时,会输出冬季,也就说明我的条件并不完善,在此基础上我又做了修补,对冬季的判断又加了条件,以下是我新的代码:

import java.util.Scanner;
​
public class Test2{
   public static void main(String[] args) {
      Scanner s = new Scanner(System.in);
       System.out.println("请输入月份:");
       int m = s.nextInt();
​
       if(m>=3&&m<=5){
           System.out.println(m+"月是春季");
       }
       else if(m>=6&&m<=8){
           System.out.println(m+"月是夏季");
       }
       else if(m>=9&&m<=11){
           System.out.println(m+"月是秋季");
       }
       else if(m==12||(m<=2&&m>0) ){
           System.out.println(m+"月是冬季");
       }
       else {
           System.out.println("请输入有效月份!");
       }
   }
}
​

        这一次负数是无效数字,成功的改掉了这个错误。

3.我家的狗5岁了,5岁的狗相当于人的多大呢?,其实狗的前两年,每一年相当于人的10.5岁,之后每增加一岁就增加4岁, 那么5岁的狗相当于人的年龄就应该是10.5+10.5+4+4+4=33岁. 编写程序获取用户输入狗的年龄(整数),通过程序输出显示相当于人的年龄.如果为负数请提示.

        关于狗狗年龄这道题,我在编写的时候也进行过很多尝试,第一次的想法是将狗狗前两年的年龄放在一起,这也是按照题目的思路在输出,可是很开我就发现了问题,当狗狗一岁时,输出为int类型,也就是说,10.5的0.5是不会输出的,这与题目要求并不符合,所以我又进行了思考和改进,我尝试将一岁直接输出10.5,没错,就是将10.5放在字符串内直接输出,然后,大于一岁利用公式输出,这一次也确实成功了。下面是我的代码:

import java.util.Scanner;
​
public class Dog_age {
    
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入狗狗的年龄:");
        int y = s.nextInt();
        if (y==1) {
            System.out.println("狗狗今年10.5岁了");
        }
​
        else if(y>1){
            y = 21+(y-2)*4;
            System.out.println("狗狗今年"+y+"岁了");
        }
        else{
            System.out.println("请输入有效数字!");
        }
    }
}
​

4.设计一个对银行账户余额操作的程序 假设账号: int account=666666 密码:int password=111111 余额:int balance=1000 进入程序输出选择操作选项: 1.存款,2.取款,3.查询余额 要求使用Scanner交互式操作. 存款,取款,查询均需要输入账号密码,验证没有问题即可操作. 可以多次重复操作

        关于银行取款这道题,我们首先进行控制台输入的语法,然后利用switch语句,这样大体轮廓就已经出来了,我们再看要求,要进行验证账号密码,这样我们可以添加一个条件语句,if语句就可以判断是否可以进入存款,取款,查询,这样我们就只剩一个多次重复操作的问题了,我们之前提到过死循环,这里我们就可以用到死循环,当然我们也写到过如何结束一个循环,这里就不多加赘述了。下列代码就是我进行尝试和试错后的结果:

import java.util.Scanner;
​
public class Bank {
    
    public static void main(String[] args) {
​
        Scanner s = new Scanner(System.in);
        int account=666666;
        int password=111111;
        int balance=1000;
        while (true) {
            System.out.println("请输入账号:");
            int acc = s.nextInt();
            System.out.println("请输入密码:");
            int psd = s.nextInt();
            if (acc == account & psd == password) {
                a:while (true) {
                    System.out.println("1.存款,2.取款,3查询余额,4退出");
                    int x = s.nextInt();
                    switch (x) {
​
                        case 1:
                            System.out.println("请输入存款金额:");
                            int y = s.nextInt();
                            balance += y;
                            System.out.println("您已成功存入" + y + "元,您的账户余额为:" + balance + "元");
                            break;
                        case 2:
                            System.out.println("请输入取金额:");
                            int m = s.nextInt();
                            if (m <= balance) {
                                balance -= m;//现余额=原余额-取出金额
                                System.out.println("您已成功取出" + m + "元,您的账户余额为:" + balance + "元");
                            } else {
                                System.out.println("您的账户余额不足" + m + "元");
                            }
                            break;
                        case 3:
                            System.out.println("您的帐户余额为:" + balance + "元");
                            break;
                        case 4:
                            break a;//用标记的方法结束循环
                        default:
                            System.out.println("请输入有效选项");
​
                    }
                }
            } else {
                System.out.println("账号或密码错误!");
            }
        }
 }
}

5.编程一个程序,计算今天是今年的第几天. 例如: 输入年 2022 输入月 4 输入天 17

        这道今天是今年第几天的问题,是困扰我很长时间的一个问题,我一直在考虑二月该怎样输入天数,当然判断闰年上边已经解决问题了,我在考虑二月应该用怎样一个变量来表示,应该将这个变量放在什么位置。让我来分享一下这道题的思路吧,首先要有控制台输入,这个语法就不多加赘述,控制台输入后,就是月份了,十二个月,switch语句就可以很完美的解决这个问题,1 3 5 7 8 10 12这七个月是三十一天,4 6 9 11这四个月是三十天, 我们可以用if语句判断输入的数值是否正确,接下来我们来说一说2月,因为闰年的问题,我一开始是将闰年判断放在二月的if语句中,我发现这样并不能行的通,我又尝试将闰年判断放在switch语句外边,先进行判断闰年,在执行switch语句,这样二月就很好判断了,后来我又遇到了一个问题,二月的天数我该怎样表示,28 29 因为其他月份的固有思路,我直接给二月赋常量值,这样并不能行得通,我又尝试使用变量,在二月的判断中进行声明变量也是行不通的,这样,我便像判断闰年一样,在switch语句外边进行声明变量,这样就解决了我遇到的所有问题。下面是我的代码:

import java.util.Scanner;
​
public class Date {
    /*编程一个程序,计算今天是今年的第几天.
  例如: 输入年 2022 输入月 4  输入天 17
  1 3 5 7 8 10 12   31
  4 6 9 11          30
  2(闰年)            29
  2(平年)            28
*/
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入年份:");
        int y = s.nextInt();
        System.out.println("请输入月份:");
        int m = s.nextInt();
        System.out.println("请输入日期:");
        int d = s.nextInt();
        int sum;
        int n;
        if ((y%4==0&&y%100!=0)||(y%400==0)){
            n  = 29;
        }
        else{
            n  = 28;
        }
        switch (m){
            case 1:
                if (d<=31&d>0) {
                    sum = d;
                    System.out.println("今天是今年的第" + sum + "天");
                }
                else{
                    System.out.println("请输入有效数字");
                }
                break;
            case 2:
                if (d<=n&d>0) {
                    sum = 31+d;
                    System.out.println("今天是今年的第" + sum + "天");
                }
                else{
                    System.out.println("请输入有效数字");
                }
                break;
            case 3:
                if (d<=31&d>0) {
                    sum = 31+n+d;
                    System.out.println("今天是今年的第" + sum + "天");
                }
                else{
                    System.out.println("请输入有效数字");
                }
                break;
            case 4:
                if (d<=30&d>0) {
                    sum = 31+30+n+d;
                    System.out.println("今天是今年的第" + sum + "天");
                }
                else{
                    System.out.println("请输入有效数字");
                }
                break;
            case 5:
                if (d<=31&d>0) {
                    sum = 31*2+30+n+d;
                    System.out.println("今天是今年的第" + sum + "天");
                }
                else{
                    System.out.println("请输入有效数字");
                }
                break;
            case 6:
                if (d<=30&d>0) {
                    sum = 31*3+30+n+d;
                    System.out.println("今天是今年的第" + sum + "天");
                }
                else{
                    System.out.println("请输入有效数字");
                }
                break;
            case 7:
                if (d<=31&d>0) {
                    sum = 31*3+30*2+n+d;
                    System.out.println("今天是今年的第" + sum + "天");
                }
                else{
                    System.out.println("请输入有效数字");
                }
                break;
            case 8:
                if (d<=31&d>0) {
                    sum = 31*4+30*2+n+d;
                    System.out.println("今天是今年的第" + sum + "天");
                }
                else{
                    System.out.println("请输入有效数字");
                }
                break;
            case 9:
                if (d<=30&d>0) {
                    sum = 31*5+30*2+n+d;
                    System.out.println("今天是今年的第" + sum + "天");
                }
                else{
                    System.out.println("请输入有效数字");
                }
                break;
            case 10:
                if (d<=31&d>0) {
                    sum = 31*5+30*3+n+d;
                    System.out.println("今天是今年的第" + sum + "天");
                }
                else{
                    System.out.println("请输入有效数字");
                }
                break;
            case 11:
                if (d<=30&d>0) {
                    sum = 31*6+30*3+n+d;
                    System.out.println("今天是今年的第" + sum + "天");
                }
                else{
                    System.out.println("请输入有效数字");
                }
                break;
            case 12:
                if (d<=31&d>0) {
                    sum = 31*6+30*4+n+d;
                    System.out.println("今天是今年的第" + sum + "天");
                }
                else{
                    System.out.println("请输入有效数字");
                }
                break;
            default:
                System.out.println("请输入有效数字");
        }
    }
}
​

6.猴子吃桃问题。猴子第一天摘下若干个桃子,当时就吃了一半,还不过瘾, 就又吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第 10 天在想吃的时候就剩一个桃子了,求第一天共摘下来多少个桃子?

        猴哥吃桃问题,我们可以用一个for循环解决,先声明一个变量 sum=1,我们可以倒着来推,猴哥吃了九天,所以 int i=9,倒推最后一天就是第一天,所以i>=1,i进行自减,根据题意要求,使用公式我们就可以得到猴哥到底吃了多少桃。下边是我的代码:

public class Peach {
    
    public static void main(String[] args) {
        int sum = 1;
        for (int i = 9; i >=1 ; i--) {
            sum = (sum+1)*2;
        }
        System.out.println(sum);
    }
}
​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来是会发光的️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值