Java基础练习题2

  • Post author:
  • Post category:java



今天再来更新一期Java基础的练习题,今天的题更多的是关于循环或者是利用循环去解决的,当然也可以使用其他方法,但是我们今天的重点是使用循环。话不多说,让我们进入今天的练习叭。


看程序写结果

1.写出输出结果

class Demo{
    public static void main(String[] args){
        Demo.show(0);       
        Demo.show(1);
    }   
    public static void show(int i){
        switch(i){  
            default:i+=2;  
            case 1:i+=1; 
            case 4:i+=8; 
            case 2:i+=4; 
        }
        System.out.println("i="+i); 
    }   
}

程序运行结束,在控制台输出的结果为? i=15 i=14

我们来分析一下这道题,这道题有一个show方法,是在main方法之外的,关于方法这个概念我们之前也是已经讲过的,不了解的兄弟姐妹们可以去看看Java基础5这个文章。我们回到这道题目,本道题也很善良没有弯弯绕绕,main方法就只有两行,分别是执行Demo.show(0);Demo.show(1);那我们再来看show方法,这是一个有参数无返回值的方法,参数类型是一个整型变量,那我们就要注意调用该方法时就要给变量一个值,还好这是一个填空题,我们不用关心这么多,我们只需要读懂代码就好,我们来看show方法中是一个switch选择语句,但是坑来了,我们通常写switch语句的时候习惯将default语句写在最后,表示除了case的那些情况外的其它情况,而这道题反其道而行之,将default写在最前边,而且这道题里没有break,那么我们之前也讲过,没有break怎么办呢,程序它自己是不会结束switch语句,而是将它一直执行下去,直到结束。那我们再看回来,输入的参数值为0时,是没有case符合条件的,那就执行default语句,因为没有break,我们还要执行后续的语句,所以当0被传进去后,得到的结果其实是15,而不是2,是不是很出乎意料呢,同理1也要执行后续的代码,所以输入1时,输出的值是14.

2.写出输出结果

class Demo{
    public static void main(String[] args){
        int x = 1; 
        for(Demo.show('a'); Demo.show('b') && x<3; Demo.show('c')){
            show('d'); 
            x++;        
          }
    }
    public static boolean show(char ch){
        System.out.print(ch);
        return true;
    }
}

程序运行结束,在控制台输出的结果为? abdcbdcb

这道题涉及到的东西还是蛮多的,有参数有返回值的方法、循环、条件判断。讲真的第一眼看到这道题,还是有点蒙的,怎么方法在for循环的条件中,怎么方法中输入字符返回值是个boolean类型,好复杂。没关系,我们来慢慢理一下,我们先看看show方法,有参数,参数是字符,有返回值,返回值一直是true,方法体里边就干了一件事,打印字符,很好,我们已经分析完show方法了,那我们接下来就看main方法了,先定义了一个整型变量x并且给x赋初值为1,接着是一个for循环,那这个for循环就很有趣了,for循环里边调用方法,这是很少见的,但是我们不怕,我们来分析它,慢慢就解决了,(Demo.show(‘a’),那就打印a,返回一个true,我们再往后看 Demo.show(‘b’) && x<3,那就打印b,返回一个true,所以&&前边的条件为真,能继续往下走,x<3,x初值为1,所以这个条件表达式为true,那继续执行循环体,打印d,返回一个true,x变为2,继续执行打印一个c,返回一个true,至此,我们的for循环已经执行一遍了,只要按照我们的顺序往下走,就可以了,注意Demo.show(‘a’),这个是只执行一边的,所以按照循环我们得到的结果为abdcbdcb。

不知道有没有朋友困惑最后的b,我们来分析一下,当for循环执行到第二轮时,x已经加到3了,但是这并不影响我们的程序继续执行, Demo.show(‘b’) && x<3,&&符号前边的部分还是会进行判断的,打印b并且返回true,&&符号后边的条件此时为false,循环结束但是最后b是会被打印的。


编程题

1.一直青蛙在一口11米深的井底向上爬,白天向上爬3米,晚上向下滑2米,总共需要几天可以爬出.

这道题目是一道小学奥数题,不知道大家小时候有没有见过这道青蛙趴井问题,今天我们用Java来解决它,分析一下题意,井深11米,白天爬三米,晚上掉两米,问需要几天小青蛙可以爬出来,那我们是不是现在需要定义一个小青蛙爬了多少米的变量sum,还有用的天数day,定义完这些,我们就可以进入循环了,day++,sum+=3,sum-=2,这些语句加进去我们就已经解决了七七八八,这道题并不难,但是你要是读懂了题意,就知道我们不仅要循环,循环里边是不是还需要一个判断,因为小青蛙最后一天爬出去后,晚上是不需要往下掉的,谁让小青蛙已经自由了呢。那么到此这道题的思路我们已经理顺了,现在就让小郑来展示一下代码叭。

public class Frog {
    
    public static void main(String[] args) {
        int sum =0 ;
        int day =0 ;
        int high = 11;
        while (high>0){
            day++;
            sum += 3;
            if (sum<high){
                sum-=2;
            }
            else if (sum == high){
               break;
            }
​
        }
        System.out.println(day);
​
    }
}

2.输出奇数100以内最大的5个奇数

这道题啊,有很多思路,不知道大家记不记得上期的猴哥吃桃问题,猴哥吃桃我们是倒推加上一个累加,那这道题应该要比猴哥吃桃还简单,因为它不用累加,而且只输出五个奇数,那么就一个for循环循环五次,累减就可以了,下边附上小郑的代码:

public class Number {
    
    public static void main(String[] args) {
        for (int i = 5; i >0; i--) {
            int num = 100-(1+2*(i-1));
            System.out.println(num);
        }
    }
​
}

3.有1、2、3、4四个数字,能组成多少个互不相同且一个数字中无重复数字的三位数?

不知道大家看到这道题目时是什么感觉,但是小郑在看到这道题时,有点懵懵的,但好像又能写出来,高三不知道大家遇到过吗,排列组合呀,好像有那么一点亲切了,是不是想拿出一个本子来用公式计算一下,大可不必了,我们现在可以用Java来解决它哦,还有一丢丢小骄傲呢,来吧,我们来理一理思路吧,无重复、三位数,用数学的逻辑就是一位一位的确认,那就是a!=b,a!=c,b!=c,无重复的三位数,那我们要用代码写,很显然循环嵌套,一位一位的确定三位数,当然题目条件也不能丢,在1,2,3,4中挑选,那就循环时a,b,c都要小于4,是不是就很轻松地搞定了,那让我们愉快的来看看代码吧:

public class DigitNumber {
   
    public static void main(String[] args) {
       int a =0 ,b = 0,c = 0,count=0;
       for (a=1;a<=4;a++){
           for (b=1;b<=4;b++){
               for (c=1;c<=4;c++){
                   if(a!=b&&a!=c&&b!=c){
                       System.out.println("组合数是:"+a+b+c);
                       count++;
                   }
               }
           }
       }
        System.out.println(count);
    }
}
​

4.3000米长的绳子,每天减一半。问多少天这个绳子会小于5米?不考虑小数。

关于绳长问题,看着都很简单,我们似乎遇见了好几次,循环加判断,但是小郑在做这道题时,有一个地方并不是很清楚应该用什么数据,所以我就大胆地用了一个很大的数字,我做这道题时,天数我用了i表示,但是在循环中,循环条件不知道该给什么值,我就用了绳长l给它赋值,我想着这是一个递减的过程,这绳子也不会3000天还没有减完,事实也是我的代码成功运行了,但是,在小郑编辑这篇文章的时候,突然想起老师曾说过循环里这些条件可以省略,省略全部时是一个死循环,我便尝试将循环条件给省略了,当然我省略的仅仅是for循环括号里的,循环体中该有的判断我们还是要写的,要不然这道题就做不出来了,然后我运行代码,它也成功了,就很神奇。那么现在就到了展示代码的时候了:

public class Rope {
    
    public static void main(String[] args) {
        int l = 3000;
        int i = 0;
        for ( i = 0; ; i++) {
            if(l>5){
                l=l/2;
            }
            else {
                break ;
            }
        }
        System.out.println(i);
    }
}
​

5.输出1–100之间的质数(只能被1和本身整除的,再没有其他因数的数)

关于输出质数这道题啊,我也是尝试过很多方法的,经过多方学习,我终于搞定了它。真的很可怜,小郑在学习的过程中,自己都能背出一百以内的质数了,好在皇天不负有心人,我也是学会了呢,下边让小郑来理一理思路吧,那判断质数,那得从2开始吧,来个for循环,输入一个数字,用它来除从2开始所有比它小的数字取余,那只要与一个数字没有余数它就不是质数,这样判断质数就解决了,因为小郑最近学了方法,那不得用一用,所以我就将判断质数写了一个方法,大家也可以不用方法,直接写在main方法里边也是可以的,那我写了判断质数的方法,我在main方法中直接调用就可以了,然后利用循环判断100以内的数字,就完成了,下边是小郑的代码:

public class PrimeNumber {
   
    public static void main(String[] args) {
       
        for (int i = 2; i <= 100; i++) {
            if(isPrimeNumber(i)){
                System.out.println(i+" ");
               
            }
        }
      
    }
    public static boolean isPrimeNumber(int a){
        for (int i = 2;i<a;i++){
            if(a%i ==0){
                return false;
            }
        }
        return true;
    }
}
​

6.水仙花数是指一个 3 位数,它的每个位上的数字的3次幂之和等于它本身。 (例如:1^3 + 5^3 + 3^3 = 153)。编程求出1-1000以内的水仙花数。

水仙花数,我愿称之为神奇的数字,这道题解题方法很多,今天我们来用Java里的循环加判断来解决,三位数,那我们就直接定义一个变量给它赋值从100开始,要判断水仙花数,是不是也要一位一位的判断啊,那是当然的了,但是这里我们不用循环嵌套,我们只需要判断a的三次方加b的三次方加c的三次方等不等于a+b+c(这里的+号的作用可是连接字符串,而不是加法运算),判断完毕,要是相等输出这个数字,不相等就进入下一轮循环,这样就能解决这个神奇的数字了。下边是小郑的代码:

public class NarcissisticNumber {
    
    public static void main(String[] args) {
        int number = 100;
        int a,b,c;
        for(int sum; number<1000;number++){
            a=number/100;
            b=(number-a*100)/10;
            c=number-a*100-b*10;
            sum=a*a*a+b*b*b+c*c*c;
            if (sum==number){
                System.out.println(number);
            }
        }
    }
}
​



版权声明:本文为qq_51733711原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。