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
    评论
初学java的可以边学边练,效果盛佳! 3 编程题(改代码,写代码) 3.1 下拉列表实现 使用ajax技术完成下拉列表对应显示内容。 当选择下拉列表某项时: 显示对应内容: 参考答案: 1)ActionServlet copytextpop-up package web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ActionServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String uri = request.getRequestURI(); String path = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf(".")); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); if(path.equals("/prod")){ String name = request.getParameter("name"); System.out.println("name:" + name); if(name.equals("qq")){ out.println("性价比高"); }else if(name.equals("bmw")){ out.println("驾驶性能出众"); }else{ out.println("好车,也贵"); } } out.close(); } } package web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ActionServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String uri = request.getRequestURI(); String path = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf(".")); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); if(path.equals("/prod")){ String name = request.getParameter("name"); System.out.println("name:" + name); if(name.equals("qq")){ out.println("性价比高"); }else if(name.equals("bmw")){ out.println("驾驶性能出众"); }else{ out.println("好车,也贵"); } } out.close(); } } 2)product.jsp copytextpop-up <%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <html> <head> <title>Insert title here</title> <style> #d1{ background-color:#fff8dc; width:220px; } </style> <script type="text/javascript" src="js/prototype-1.6.0.3.js"> </script> <script type="text/javascript"> function getXmlHttpRequest(){ var xhr = null; if((typeof XMLHttpRequest)!='undefined'){ xhr = new XMLHttpRequest(); }else { xhr = new ActiveXObject('Microsoft.XMLHttp'); } return xhr; } function change(v1){ var xhr = getXmlHttpRequest(); xhr.open('get','prod.do?name='+v1,true); xhr.onreadystatechange=function(){ if(xhr.readyState == 4){ var txt = xhr.responseText; $('d1').innerHTML = txt; } } xhr.send(null); } </script> </head> <body style="font-size:30px;"> <select style="width:120px;" id="s1" onchange="change(this.value);"> <option value="qq">QQ</option> <option value="bmw">宝马</option> <option value="ff">法拉利</option> </select> <div id="d1"></div> </body> </html>
数组章节作业 1、将一个数组中的元素倒排过来,不能新开一个数组的临时存储空 间,只能在原数组上改。 2、写一个类用来模拟栈这种数据结构,要求底层 使用数组存储数据, 并给出相应的进栈和出栈的方法。MyStack int arr[]; int count;//栈中元素个数 public MyStack(int n){ arr = new int[n]; } boolean push(int num){ if(count==arr.length){} arr[count++]=num; } int pop(){ if(count==0){ return -1;} return arr[--count]; } 3、实现在一个数组指定位置添加元素和删除元素的功能。 1、数组容量问题? 2、添加元素前后数组中元素的变化 3、删除元素前后数组中元素的变化 面向对象章节作业 1,写一个类,名为Animal,该类有两个私有属性, name(代表动物的名字),和legs(代表动物的腿的条 数)。并提供个两构造方法,一个无参,默认给name 赋值为AAA,给legs赋值为4;另一个需要两个参数, 分别用这两个参数给私有属性赋值。该类还有两个重载的move()方法,其中一个无参,在屏幕上输出一行文字: XXX Moving!!(XXX为该动物的名字);另一个需要一个int参数n,在屏幕上输出n次 XXX Moving!! 2,写一个类Person,包含以下属性:String name; int age; boolean gender; Person partner。 为Person类写一个marry(Person p)方法,代表当前 对象和p结婚,如若可以结婚,则输出恭贺信息, 否则输出不能结婚原因。要求在另外一个类中写一 个主方法,来测试以上程序。(下列情况不能结婚: 结婚年龄,男<24,女<22;3,某一方已婚) 3,写一个类,名为Animal,该类有两个私有属性,name(代表动物的名字),和legs(代表动物的腿的条数);要求为两个私有属性提供public 的访问方法。并提个两构造方法,一个无参,默认给name赋值为AAA,给legs赋值为4;另一个需要两个参数,分别用这两个参数给私有属性赋值。要求在第一个构造方法中调用第二个构造方法。该类还有两个重载的move()方法,其中一个无参,在屏幕上输出一行文字: XXX Moving!!(XXX为该动物的名字);另一个需要一个int参数n,在屏幕上输出n次 XXX Moving!! 4,写一个类Fish,继承自Animal类,并提供一个构造方法,该构造方法需要一个参数name,并给legs赋默认值0;该类还要求覆盖Animal类中的无参move()方法,要求输出:XXX Swimming!! 5,写一个类Bird,继承自Animal类,并提供一个构造方法,该构造方法需要一个参数name,并给legs赋默认值2;该类还要求覆盖Animal类中的无参move()方法,要求输出:XXX Flying!! 6,写一个类Zoo,要求分别生成若干个Animal,Fish和Bird。并调用他们的属性和方法。 7,写Shape类,要求如下: 1.int类型属性x和y,分别表示图形的中心点坐标 2.无参构造器 3.构造器,对x和y进行初始化 4.draw()方法,输出"Shape draw" 写Circle类,继承Shape类,要求如下 1.double类型属性r,表示圆的半径 2.无参构造器,将r初始化为1.0 3.构造器,对r进行初始化 4.构造器,对x、y、r进行初始化 5.draw()方法,输出"draw in circle"和x,y,r的值 写Rectangle类,继承Shape类,要求如下 1.double类型属性height和width,表示矩形的高和宽 2.无参构造器,将height和width都初始化为1.0 3.构造器,对height和width进行初始化 4.构造器,对x、y、height、width进行初始化 5.draw()方法,输出"draw in rectangle"和x,y,height,width的值 使用ShapeTest类测试以上代码。 8,某公司的雇员分为以下若干类: Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。 SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪 HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。属性:每小时的工资、每月工作的小时数 SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。属性:月销售额、提成率 BasedPlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。属性:底薪。 写一个程序,把若干各种类型的员工放在一个Employee数组里,写一个函数,打印出某月每个员工的工资数额。注意:要求把每个类都做成完全封装,不允许非私有化属性。 容器类章节作业 1、写MyStack类,实现栈功能。在类中使用ArrayList保存数据。 2、使用TreeSet和Comparator,写TreeSetTest1 要求:对TreeSet中的元素"HashSet"、"ArrayList"、"TreeMap"、"HashMap"、"TreeSet"、"LinkedList"进行升序和倒序排列 3、使用TreeSet和Comparator,写TreeSetTest2 要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列 4、使用TreeSet和Comparator,写TreeSetTestInner 要求: 对TreeSet中的元素"HashSet"、"ArrayList"、"TreeMap"、"HashMap"、"TreeSet"、"LinkedList"进行升序和倒序排列 1. 使用匿名内部类实现 2. 使用静态内部类实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值