Java练习题

一、输入一个值,求100到这个值范围内的水仙花数

(例水仙花数:153 =111+555+3+3+3)

import java.util.Scanner;
public class Flowers {
   public static void flowers(int n) {  //写一个求水仙花数的函数
        int a = 0;
        int b = 0;
        int c = 0;
        for (int i = 100; i <= n; i++) {  //  i的值从100到输入的值循环
            a = i / 100; // 求出百位的值,例如:371,371/100=3
            b = i % 100 / 10;  //求出十位的值,371%100=71,71/10=7
            c = i % 10;  // 求出各位的值,371%10=1
            if (a * a * a + b * b * b + c * c * c == i) {  // 判断是否为水仙花数
                System.out.println(i);
            }
        }
    }
    public static void main(String[] args) {
        System.out.println("请输入一个数:");
        Scanner scanner = new Scanner(System.in);//扫描类,从键盘获取一个整数
        int n = scanner.nextInt();  
        System.out.println("比"+n+"小的水仙花数有:");
        flowers(n); //调用flowers函数,求出水仙花数
    }
}

执行结果:
在这里插入图片描述

二、求一个数字是不是完数

(例:数字6, 因子:2,3,1, 他们的和是数字6 ( 0不是完数!!!)

import java.util.Scanner;
public class Number { 
    public static boolean fun(int n) {    
        int sum = 0;
        for (int i = 1; i < n; i++) {  // i从1开始循环,到输入的数为止
            if (n % i == 0) {          // 若输入的数n能整除i,则i是n的因子
                sum += i;              //因子循环累加
            }
        }
        if (sum == n  && n != 0) {              //累加的和等于n并且n不等于0
            System.out.println("您输入的数字"+n+"是完数!");
            return true;
        }
           System.out.println("您输入的数字"+n+"不是完数!");
            return false;
        }
        public static void main(String[] args) {   //主函数
            System.out.println("请输入一个数字");
            Scanner scanner = new Scanner(System.in);//扫描类
            int p = scanner.nextInt();
            fun(p);  //调用fun函数;

        }
    }

执行结果:
在这里插入图片描述

三、求一个数字是几位数?顺序打印数字,逆序打印数字

(例:123,是三位数,顺序打印:1 2 3 ,逆序打印: 3 2 1)

import java.util.Scanner;
public class HowNumber {  

    public static int HowNum(int num) {
        int count = 0;//定义一个计数器,计算while语句的循环次数
        while (num != 0) {
            num /= 10;// 除以10,直到结果等于0,除几次就有几位,例:123 /10 = 12 ,12/10 = 1  ,1/10 = 0 
            count++; //while循环一次,count计数一次
        }
        return count;  //返回count的值

    }

    //顺序得到数字,例: 123/100 = 1    23/10 = 2   3/1 = 3     
    public static void printOrder(int num) {
        int count = HowNum(num);
        int power = (int) Math.pow((double) 10, (double) (count - 1));//100
        if (num < 0) { //输入的值为负数时,先求它的相反数
            num = -num;
        }
        if (num == 0) { //输入的值为0时,返回
            System.out.println("请输入不为0的数字");
            return;
        }
        int tmp = 0;
        while (power != 0) {            //10  1
            tmp = num / power;        //123/100 == 1     23/10 = 2    3 /1 = 3
            System.out.print(tmp + " ");
            num = num % power;      //123 % 100 = 23   23 % 10 = 3  3 % 1  == 0
            power /= 10;            //100/10 = 10    1   1/10 = 0
        }
        System.out.println();
    }
   
    //逆序打印 ,例:123  ,  123 % 10 = 3      12 % 10 = 2    1%10 = 1
    public static void reverse(int num) {
        if (num < 0) {
            num = -num;
        }
        if (num == 0) {
            System.out.println("请输入不为0的数字");
            return;
        }
        int tmp = 0;
        while (num != 0) {
            tmp = num % 10;
            System.out.print(tmp + " ");
            num /= 10;
        }
    }
    
   public static void main(String[] args) {
        System.out.println("输入一个数:");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println("输入的数有"+HowNum(n)+"位");
           printOrder(n);
           reverse(n);
    }
}

执行结果:
在这里插入图片描述

四、求a+aa+aaa+aaaa的和

(例:2+22+222+2222 =2468)

import java.util.Scanner;
public class Sum {

   public static int sumA(int n, int a ) {
        int sum = a;
        int tmp = a;
        for (int i = 2; i <= n; i++) {    //i从2开始,至少累加到两位
            tmp = tmp * 10 + a;      // 第①次循环tmp = 1*10+1=11; 第②次循环tmp = 11*10+1 = 111;
            sum = sum + tmp;    //第①次循环sum = 1 + 11 = 12;第②次循环sum = 12 + 111 = 123;
        }
        return sum;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入累加到数的个数:");
        int n = scanner.nextInt();
        System.out.println("输入1-9的值:");
        int a = scanner.nextInt();
        int sum = sumA(n,a);             //调用sumA函数计算
        System.out.println("结果:"+sum);
    }
}

执行结果:
在这里插入图片描述

五、用for循环产生随机数

import java.util.Random; 
import java.util.Scanner;

 public class RandomTest {     
      public static void randomNum(int max ,int min ,int how)  {
        Random random = new Random();       //使用Random函数产生随机数
        for (int i = 0; i < how; i++)  {           //控制产生随机数的个数
            int n = random.nextInt(max - min + 1) + min;    //[min,max]包括最大值的随机数
            System.out.print(n + " ");     //打印出随机数
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入最大数;");
        int a = scanner.nextInt();
        System.out.println("输入最小数:");
        int b = scanner.nextInt();
        System.out.println("输入要产生的随机数的个数;");
        int c = scanner.nextInt();
       randomNum(a,b,c);    //调用randomNum产生随机数
    }
}

执行结果:
在这里插入图片描述

六、求斐波那契数列具体项的值

斐波那契数列:1 1 2 3 5 8 13 21 34,(从第三项开始每一项等于前两项的和)

import java.util.Scanner;

public class Sequence {  
  
    public static int fibonaci(int n) {
        int a = 1;  //定义第一项为1
        int b = 1;  //定义第二项为1
        int c = 0;   //定义第三项为0
        for (int i = 3; i <= n; i++) { 
            c = a + b;        //前两项的和
            a = b;           
            b = c;           //前两项的和赋给第三项
        }
        return c;
    }

    public static void main(String[] args) {
              Scanner scanner = new Scanner(System.in);
            System.out.println("输入要求的项数:");
            int n = scanner.nextInt();
            System.out.println("第"+n+"项为:"+ fibonaci(n));
    }
}

执行结果:
在这里插入图片描述

七、Java程序调试之打断点

以如下代码为例,用Intellij idea 进行编程调试, 判断2进制数中1的个数。

import java.util.Scanner;

public class TestDemo { //和数字减一的值进行与运算,直到结果为0,与几次,就有几个1,

    public static int numberOf(int num) {     //写一个函数numberOf
        int count = 0;             //给计数器count赋初值0
        while(num != 0) {           //num等于0跳出while循环
            count++;                   //计数器自加
            num = num & (num - 1);    //与其减一的值相与,直到结果为0,用count计数
        }
        return count;                //count返回的就是二进制数中1的个数
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); //扫描类
        System.out.println("输入一个数:");
        int a = scanner.nextInt();//从键盘获取数字
        System.out.println("这个数的2进制中有"+numberOf(a)+"个1");
   }
}

执行结果:
在这里插入图片描述

打断点调试这段代码:

①在代码行中选定目标行,在左侧栏鼠标左击,会产生一个红色的实心圆圈。如图:
在这里插入图片描述
②在idea的右上标题栏中选择Debug(绿色的甲壳虫)开启调试会话,或直接键盘按Shift+F9,点击之后程序运行,输入一个数字10,回车直接进入后,显示输入的num值为10
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
③点击下图中的第二个箭头,使程序向下执行(为了方便理解程序,点一步截了一个图,如下:)
第一个箭头:step over步越→如果当前语句包含函数调用,则执行完该函数并返回到下一条语句

第二个箭头:step into步进→如果当前语句包含函数调用,则执行进入该函数

第三个箭头:force step into→可以进入所有的方法,比如jdk的方法

第四个箭头:step out→跳出已进入的方法

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值