Java基础50题最新2023版


说明:图片转存失败,完整版pdf见资源
Java基础50题2023最新版

基础问答15题

1.【基本概念问答】

请问Java语言是跨平台的吗?JVM是跨平台的吗?为什么?

Java语言是跨平台的,JVM不跨平台。

因为Java编写的文件都会被编译成与平台无关的字节码,不管哪一个平台字节码都在JVM上执行,所以Java可以跨平台。而不同平台的JVM是不同的,它们只是提供了相同的接口。

2.【环境变量配置问答】

为什么要配置Java环境变量?不配置环境变量可不可以命令行编译执行Java代码?请尝试配置环境变量,达到在命令行(cmd)窗口输入 qq 命令就能启动qq的效果。(效果截图)

为了让系统可以在任意目录下执行jdk安装目录下的exe文件。

可以,但需要将目录转到javac.exe的安装目录下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.【命令行编程】

新建一个Java文件, 然后手写Hello World程序。(要求记事本完成,该题目提交 Helloworld程序的代码及命令行cmd运行截图即可)

public class MHello{
	public static void main(String[] args){
		System.out.println("hello java");
	}
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.【进制转换】

将67转换为二进制、八进制、十六进制。再将0b0100101(二进制)、0345(八进制)、0Xef(十六进制)转换为十进制。注:该题无需用写代码,在纸上手算一下过程,拍照附在文档中提交作业。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.【原码补码反码】

对于一个8位原码,01101010和11000110,求它们的补码。已知补码01101010和11000110,求它们的原
码。(要求如题4)注:进制和原码等概念属于计算机编程基础知识,建议了解并熟悉它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6.【数据类型转换】

语句 byte b = 300; 编译能通过吗?如果不能为什么呢?怎样让它通过编译呢?(作为简答题说明一下即可)

不能通过编译,因为byte类型占8个位,表示范围-128~127。

强制类型转换可以通过编译:byte b = (byte)300;

7.【算术运算符】

以 int a = 0; 语句为前提, a = a + 0.1; 和a += 0.1; 两条语句都能正常运行吗?两者有什么区别?(仍作为简答题回答)

a=a+0.1;不能通过编译,a+0.1这个表达式的结果会隐式转换位double类型,double赋值给int会出错。

a+=0.1;可以通过编译,但结果精度丢失。相当于int a = (int)(a+0.1)

8.【浮点数】

float a = 0.1F; 和 double b = 0.1; 这两条语句定义的浮点数a和b,请问它们相等嘛?为什么?

不相同,数据类型不同,在内存中的二进制表示也不同

9.【位运算符】

给出任意一个 int 类型的正整数,如何快速判断该整数的值,是否是2的整数次幂?(简答题,考虑位运算符)

计算 intNum & (intNum-1),结果为0则是2的整数次幂。

比如intNum = 16 , 10000 & 01111,结果为0

10.【表达式】

对于一个变量a,给出一个表达式 a + “hello” ,结果的数据类型是什么?

+和字符串连接是拼接符号,结果是String类型

11.【读程序题】

读下列代码,指出输出结果以及原因。

int a = 10;
int b;
System.out.println(b = a + 10);

结果输出20,赋值表达式的返回值就是等号左边的值

12.【标识符命令规范】

分析以下标识符的字符串组成,哪些是符合语法的标识符,哪些不合法?请在这道题下面附上符合语法的标识符命名规范:

  1. 1myName 不能用数字开头
  2. 你好% 不能出现中文
  3. My_name
  4. Points
  5. $points
  6. _sys_ta
  7. OK123
  8. _23b#
  9. _3_
  10. main 保留字
  11. class 保留字

13.【标识符命令规范】

标识符的命名除了语法要求外,更重要的是符合约定俗成的规范。下列标识符的字符串组成,都是符合语法要求的,请问哪些是符合约定俗成命名规范的?哪些不符合?请在这道题下面附上符合约定俗成规范的Java标识符命名规范。(根据不同语法结构给出)

类名:

  1. demo 类名开头没大写
  2. test 同上
  3. Student
  4. Student_ 不能以_结束
  5. program1 类名开头要大写
  6. MYDemo MyDemo
  7. myDemo 同上
  8. XueSheng

变量名:

  1. age
  2. nianLing
  3. myName
  4. _name 不能以_开头
  5. Variable variable

包名:

  1. com.baidu
  2. Com.Baidu 包名用小写字母
  3. bao.ceshi

注:标识符命名规范相当重要,请大家查阅老师给的文档,先自行学习!

14. 【注释】

注释的作用是什么?注释会对程序的运行产生影响嘛?注释的内容会存在于Java代码编译执行的哪一部分?

写代码整理思路;读代码,维护项目。不会产生影响。注释不会参与编译执行。

15. 【键盘输入】

如果我想在Java程序中进行键盘输入,提升程序的扩展性。需要按几个步骤进行?请写出步骤

import java.util.Scanner;
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();

编程基础30题

1.【回文数】

打印5位数中的所有回文数,每行打印10个数。最后统计一下一共有多少个5位回文数。
注:回文数即正反读都是一个数,5位数的话,只要个位与万位相同,十位与千位相同就是一个回文数。

public static void main(String[] args) {
	// 打印5位数中所有的回文数
        int num=0; //记录总共多少个回文数
        for(int i = 10000; i < 100000; i++){
            //如果万位=个位,继续判断
            if(i / 10000 == i % 10){
                int qian = i / 1000 % 10;
                int shi = i % 100 / 10;
                //判断千位=十位
                if(qian == shi){
                    num++;
                    System.out.print(i+"  ");
                    if(num % 10 == 0) System.out.println();
                }
            }else continue;
        }
        System.out.println("一共有" + num +"个五位回文数");
    }

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.【键盘录入】

根据键盘录入的数值1、2、3、4…7输出对应的星期一、星期二、星期三…星期日。(考虑使用switch)

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
	    Scanner sc = new Scanner(System.in);
	    switch (sc.nextInt()){
            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;
                default: break;
        }
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.【if多分支】

键盘录入一个学生成绩(用int表示),自动输出该同学的成绩评级。

学生的分数取值范围[0,100]
分数大于等于90的,评级"优秀";
分数大于等于80,小于90的,评级"良好";
分数大于等于70,小于80的,评级"中等";

分数大于等于60,小于70的,评级"及格";
分数小于60的,评级"不及格";

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
	    Scanner sc = new Scanner(System.in);
	    int score = sc.nextInt();
        if(score >= 90)
            System.out.println("优秀");
        else if(score >= 80 && score < 90)
            System.out.println("良好");
        else if(score >= 70 && score < 80)
            System.out.println("中等");
        else if(score >= 60 && score < 70)
            System.out.println("及格");
        else if(score < 60)
            System.out.println("不及格");
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.【水仙花数】

请打印出所有的水仙花数。注:所谓的"水仙花数"是指一个三位数,其各位数字的立方和等于该数本身。例如153是一个"水仙花数",因为153 = 1的三次方 + 5的三次方 + 3的三次方。(使用for循环遍历一下就出来了)

public static void main(String[] args) {
	    for(int i = 100;i < 1000;i++){
	        int ge = i % 10;
	        int bai = i / 100;
	        int shi = i / 10 % 10;
	        if(Math.pow(ge,3) + Math.pow(shi,3) + Math.pow(bai,3) == i)
                System.out.println(i);
        }
    }

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.【求素数】

判断101-200之间有多少个素数,并输出其中所有素数。
注:素数即是除了1和它本身以外不再有其他因数的自然数。程序中可以用这个数,遍历除以2到这个数减去1。如果能够被整除,则表明此数不是素数,反之是素数

public static void main(String[] args) {
      int count = 0;
      for (int i = 101; i <= 200; i++) {
          if(isPrime(i)){
              count++;
              System.out.println(i);
          }
      }
      System.out.printf("101~200一共%d个素数",count);
  }
  public static boolean isPrime(int num){
      for (int i = 2; i <= Math.sqrt(num); i++) {
          if(num % i == 0)
              return false;
      }
      return true;
  }

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6.【嵌套for循环】

打印下列图案(等腰三角形)要求,根据键盘录入的行数,决定等腰三角形的行数

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int row = sc.nextInt();
    for (int i = 1; i <= row; i++) {//一共打印多少行
        //先打印空格row - i个
        for (int k = 0; k < row - i; k++) {
            System.out.printf(" ");
        }
        for (int j = 0; j < 2 * i -1; j++) {//每行打印2i - 1个*
            System.out.printf("*");;
        }
        System.out.println();
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7.【嵌套for循环】

打印九九乘法表。(和题6基本一样)

public static void main(String[] args) {
        for(int i = 1;i < 10;i++){
            for(int j = 1;j <=i;j++){
                System.out.print(j+" * "+i+" = "+i*j+"    ");
            }
            System.out.println();
        }
    }

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

8.【求完数】

一个数如果恰好等于它的所有真因子(即除了自身外的所有因数)之和,这个数就称为"完数"。请编程求出1000以内的所有完数

public static void main(String[] args) {
        for(int i = 2;i <= 1000;i++){
            int num=0;//因数和
            for(int j = 1;j < i;j++){//计算除自身以外所有因数的和
                if(i % j ==0){//j是i的因数
                    num += j;
                }
            }
            if(num == i)
                System.out.println(i);
        }
    }

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

9.【求不重复数字】

有1、2、3、4一共四个数字,能组成多少个不相等且无重复数字的三位数?都是多少?
注:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的就可以了

public static void main(String[] args) {
    int num = 0;//存储三位数
    int sum = 0;//几种三位数
    //百位数i的情况
    for (int i = 1; i <= 4; i++) {
       //十位数是i1
       for (int i1 = 1; i1 <= 4; i1++) {
            if(i1 == i) continue;
            //个位数是i2
            for (int i2 = 1; i2 <= 4; i2++) {
                if(i2 == i1 || i2 == i) continue;
                num = i * 100 + i1 * 10 + i2;
                System.out.print(num + "\t");
                sum++;
            }
        }
        System.out.println();
    }
    System.out.println("一共" + sum + "种结果");
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

10.【根据输入求输出】

键盘录入一个正整数,请求:1.它是几位数?2.逆序打印出各位数字

 public static void main(String[] args) {
         Scanner sc = new Scanner(System.in);
         long num = sc.nextLong();
         int n = 0;//计算num是几位数
         while(num != 0){
             System.out.print(num % 10 + "  ");
             num /= 10;
             n++;
         }
         System.out.println("\n" + "是" + n + "位数");
     }

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

11.【数列的前n项和】

有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
注:提前告诉你答案是 32.66026079864164

public static void main(String[] args) {
        //求数列的前20项之和2/1,3/2,5/3,8/5,13/8,21/13.....
        double fenzi = 2;
        double fenmu = 1;
        double sum = fenzi / fenmu;
        for (int i = 0; i < 19; i++) {
            double tmp = fenmu;
            //下一项的分母 = 分子
            fenmu = fenzi;
            //下一项的分子 = 分子 + 分母
            fenzi += tmp;
            sum += fenzi / fenmu;
        }
        System.out.println(sum);
    }

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

12.【累加】

求前n个数的和,其中n>0。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        //求前n个数的和,其中n>0。
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int sum = 0;
        for(int i = 1;i <= n;i++){
            sum += i;
        }
        System.out.println("前"+n+"个数之和是"+sum);
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

13.【累乘】

求前n个数的积,其中n>0

import java.math.BigInteger;
import java.util.Scanner;

import static java.math.BigInteger.*;

public class Main {

    public static void main(String[] args) {
        //求前n个数的积,其中n>0。
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        //long存储不下,调用BigInteger的静态方法valueOf
        BigInteger bigMulti = BigInteger.valueOf(1);
        for(int i = 1;i <= n;i++){
            bigMulti = bigMulti.multiply(BigInteger.valueOf(i));
        }
        System.out.println("前"+n+"个数之积是"+bigMulti);
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

14.【求最大值】

分别用if和三目运算符求三个数的最大值。比较一下两种方式,哪种比较好?

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num1 = sc.nextInt();
        int num2 = sc.nextInt();
        int num3 = sc.nextInt();
        int mmax = num1;//存储最大值
        if(mmax < num2)
            mmax = num2;
        if(mmax < num3)
            mmax = num3;
        System.out.println("if求三个数中的最大值是" + mmax);
        mmax = num1 < num2 ? num2 : num1;
        mmax = mmax < num3 ? num3: mmax;
        System.out.println("三目运算符求三个数中的最大值是"+mmax);
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用if可读性更高,易于扩展。用三目运算符代码更简洁

15.【根据条件求数】

一个整数,它加上100或者268后都是一个完全平方数,请问在1万以内,这样的数有几个,分别是多少?
注:使用 Math.sqrt(double a) 方法可以求a的平方根。

public static void main(String[] args) {
        //10000以内的完全平方数
        int count = 0;//统计个数
        for (int i = 1; i <= 10000; i++) {
            int num = (int)Math.sqrt(i);
            if(num * num == i){
                count++;
                System.out.println(i);
            }
        }
        System.out.println("1-10000一共有" + count + "个完全平方数");
    }

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

16.【求奇数和】

求100以内的所有奇数/偶数的和

public static void main(String[] args) {
        int evenSum = 0, oddSum = 0;
        for (int i = 0; i <= 100; i++) {
            if(i % 2 == 0)
                evenSum += i;
            else oddSum += i;
        }
        System.out.println("100以内偶数和:" + evenSum + ";奇数和:" + oddSum);
    }

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

17.【自由落体】

假如一个小球从100米高度自由落下,每次落地后就反跳回原高度的一半。那么求它在第10次落地时,共经过多少米?第10次反弹多高?

public class Main {
    public static void main(String[] args) {
        //第一次落地经过100
        double distance = 100;//总共的路程
        double height = 100;//每次反弹的高度
        //从第二次开始计算
        for (int i = 2; i <= 10; i++) {
            height = height / 2.0;
            distance += height * 2;
        }
        System.out.println(distance);
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

18.【被9整除】

键盘录入一个数,请判断它数能被几个9整除 。如81就可以被2个9整除

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int num = n;
        int res = 0;
        while(num != 1){
            num /= 9;
            res++;
        }
        if(Math.pow(9,res) == n)
            System.out.println("被" + res + "个9整除");
        else
            System.out.println("不能被9整除");
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

19.【判断奇偶数】

键盘录入一个in数字,判断输出它是奇数还是偶数。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        if(num % 2 == 0){
            System.out.println("偶数");
        }else System.out.println("奇数");
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

20.【分解质因数】

将一个大于2的正整数分解质因数。例如:输入3的话,输出 3=3; 输入6,输出6 = 2 *3等

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //将一个大于2的正整数分解质因数。例如:输入3的话,输出 3=3; 输入6,输出6 = 2 *3等
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int k = 2;
        System.out.printf(num + " = ");
        while(num != 1){
            if(num % k ==0){
                num /= k;
                System.out.print(k + " * ");
            }
            else k++;
        }
        System.out.printf("\b\b");
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

21.【排序】

键盘输入三个整数x、y、z,请把这三个数由小到大输出。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num1 = sc.nextInt();
        int num2 = sc.nextInt();
        int num3 = sc.nextInt();
        if(num1 > num2){
            int tmp = num1;
            num1 = num2;
            num2 = tmp;
        }
        if(num2 > num3){
            int tmp = num2;
            num2 = num3;
            num3 = tmp;
        }
        if(num1 > num2){
            int tmp = num1;
            num1 = num2;
            num2 = tmp;
        }
        System.out.println("从小到大排序:" + num1 + "  " + num2 + "  " + num3);
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

22.【交换值】

任意给两个整数(int)值,请交互它们的值。

public class Main {

    public static void main(String[] args) {
        //交换两个数
        int num1 = 3, num2 = 9;
        System.out.println("交换前num1 = " + num1 + ",num2 = " + num2);
        swap1(num1,num2);
        swap2(num1,num2);
        swap3(num1,num2);
        swap4(num1,num2);
    }
    public static void swap1(int n1,int n2){//使用中间变量 常用
        int tmp = n1;
        n1 = n2;
        n2 = tmp;
        System.out.println("交换前num1 = " + n1 + ",num2 = " + n2);
    }
    public static void swap2(int n1,int n2){//异或
        n1 = n1 ^ n2;
        n2 = n1 ^ n2;
        n1 = n1 ^ n2;
        System.out.println("交换前num1 = " + n1 + ",num2 = " + n2);
    }
    public static void swap3(int n1,int n2){//加法
        n1 = n1 + n2;
        n2 = n1 - n2;
        n1 = n1 - n2;
        System.out.println("交换前num1 = " + n1 + ",num2 = " + n2);
    }
    public static void swap4(int n1,int n2){//简写加法
        n1 = (n1 + n2) - (n2 = n1);
        System.out.println("交换前num1 = " + n1 + ",num2 = " + n2);
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

23.【求自守数】

自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出10000(一万)以内的自守数的个数,并分别输出

public static void main(String[] args) {
        //10000以内自守数
        int res = 0;//自守数的个数
        for (int i = 1; i < 10000; i++) {
            int tmp = i;
            int weishu = 0;//i是几位数
            while(tmp != 0){//判断是几位数
                tmp /= 10;
                weishu++;
            }
            if(i == (i * i) % (Math.pow(10,weishu))){//判断是否是自守数
                System.out.println(i);
                res++;
            }
        }
        System.out.println("一万以内有" + res + "个自守数");
    }

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

24.【循环练习】

给20块钱买饮料,每瓶饮料3块钱,喝完之后退瓶子可以换回1块钱。问最多可以喝到多少瓶饮料?

public class Main {
    public static void main(String[] args) {
        int money = 20;
        int num = 0;//每次买饮料的瓶数
        int remain = 0;//每次剩下的钱
        int res = 0;//最后买了几瓶
        while(money >= 3){
            num = money / 3;
            remain = money % 3;
            money = num + remain;
            res += num;
        }
        System.out.println(res);
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

25.【循环练习】

井里有一只蜗牛,他白天往上爬5米,晚上掉3.5米,井深56.7米,计算蜗牛需要多少天才能从井底到爬出来

public static void main(String[] args) {
       int res = 0;
       double climbing = 0;//往上爬了多少米
        while(climbing < 56.7){
            climbing += 5;
            climbing -= 3.5;
            res++;
        }
        System.out.println(res);
    }

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

26.【键盘录入】

键盘输入任意一个正整数,求各位数字之和

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long num = sc.nextLong();
        int res = 0;
        while(num != 0){
            res += num % 10;
            num /= 10;
        }
        System.out.println(res);
    }

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

27.【求和】

打印出1-100之间所有不是7的倍数和不包含7的数字,并求和

public static void main(String[] args) {
        //不是7的倍数和不包含7的数字
        int res = 0;
        for (int i = 1; i <= 100; i++) {
            if(i % 7 != 0 && i % 10 !=7 && i / 10 !=7){
                res += i;
                System.out.println(i);
            }
        }
        System.out.println(res);
    }

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

28.【分数累加】

编写一个函数,输入n为偶数时,求1/2 + 1/4 +1/6 + … + 1/n的结果;当输入n为奇数时,求1/1 + 1/3 + 1/5 +… + 1/n 的结果

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int inputNum = sc.nextInt();
        double res = 0;
        if(inputNum % 2 == 0){//是偶数
            for (int i = 2; i <= inputNum; i+=2) {
                res += 1.0 / i;
            }
        }else{//是奇数
            for (int i = 1; i <= inputNum; i+=2) {
                res += 1.0 / i;
            }
        }
        System.out.println(res);
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

29.【switch练习】

输入年份和月份,输出这个月应该有多少天(使用switch结构,需要考虑闰年和平年,注意case穿越)

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int y = sc.nextInt();
        int m = sc.nextInt();
        int res = 0;
        switch (m){
            case 1: case 3: case 5: case 7: case 8: case 10: case 12:
                res = 31;break;
            case 4: case 6: case 9: case 11: res = 30;break;
            case 2:{
                if(isLeapYear(m)) res =29;
                else res = 28;
            }break;
            default:break;
        }
        System.out.println(res);
    }
    public static boolean isLeapYear(int year){
        if(year % 400 == 0 || (year % 4 ==0 && year % 100 == 0)){
            return true;
        }
        return false;
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

30.【三目运算符】

某小伙想定一份外卖,商家的优惠方式如下:鱼香肉丝单点 24 元,油炸花生米单点 8 元,米饭单点 3 元。订单满 30 元 8 折优惠。鱼香肉丝优惠价 16 元,但是优惠价和折扣不能同时使用。那么这个小伙要点这三样东西,最少要花多少钱

public static void main(String[] args) {
        int youhui = 16 + 8 + 3;
        double zhekou = (24 + 8 + 3) * 0.8;
        double minPrice = youhui > zhekou ? zhekou : youhui;
        System.out.println("最少花" + minPrice);
    }

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


扩展5题

1.【递归经典问题-不死神兔】

有一对兔子,从出生后第3个月起 每个月都生一对兔子,小兔子长到第三个月后每个月又生一对 兔子,假如兔子都不死,问每个月的兔子对数为多少? (其实 就是斐波那契数列)

import java.util.Scanner;

public class Main {
    // 1-1-2-3-5-8-13-21
    public static int tuzi(int m){
        if(m == 1 || m == 2) return 1;
        return tuzi(m - 1) + tuzi(m - 2);
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        for (int i = 1; i <= num; i++) {
            System.out.print(tuzi(i) + "  ");
        }
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.【递归】

有5个人坐在一起,问第五个人多少岁?他说比第4个 人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个 人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。 最后问第一个人,他说是10岁。请问第五个人多大?

public class Main {
    public static int getAge(int index){
        if(index == 1) return 10;
        return getAge(index - 1) + 2;
    }
    public static void main(String[] args) {
        System.out.println(getAge(5));
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.【排序】

随机给十个数字,对它们进行排序。(可以给一个有 10个整数元素的数组,然后对数组排序)

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        int[] nums = { 12,34,545,35,24,56,6,76,4,555};
        for (int i = 0; i < nums.length - 1; i++) {//冒泡几趟
            for(int j = 0; j < nums.length - 1 - i; j++){
                if(nums[j] > nums[j+1]){
                    int tmp = nums[j];
                    nums[j] = nums[j+1];
                    nums[j+1] = tmp;
                }
            }
        }
        for (int v : nums) {
            System.out.printf(v + "  ");
        }
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.【数组元素的插入】

有一个已经排好序的int数组{1, 2, 3, 4, 5, 6, 7, 8}。现输入一个数(要求该数在1-8之间),按 原来的规律将它插入数组中。

import java.util.Arrays;
import java.util.Scanner;

public class Main {

//有一个已经排好序的int数组{1, 2, 3, 4, 5, 6, 7, 8}。现输入一个数(要求该数在1-8之间),按 原来的规律将它插入数组中。
    public static void main(String[] args) {
        int[] n = {1, 2, 3, 4, 5, 6, 7, 8};
        System.out.println("输入1-8之间的数字:");
        Scanner sc = new Scanner(System.in);
        int index = sc.nextInt();
        //构造新数组
        int[] newn = new int[n.length+1];
        for (int i = 0; i < index; i++) {
            newn[i] = n[i];
        }
        newn[index] = index;
        for (int i = index + 1; i < newn.length; i++) {
            newn[i] = n[i - 1];
        }
        System.out.println(Arrays.toString(newn));
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.【数组元素的交换】

给出一个int数组,把它最大的元素与第一 个元素交换,最小的元素与最后一个元素交换,输出交换后的 数组。

import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        int[] nums = { 12,34,545,35,24,56,6,76,4,555};
        int len = nums.length;
        int indexOfMax = 0;//最大元素的下标
        for (int i = 1; i < len; i++) {
            if(nums[i] > nums[indexOfMax]){
                indexOfMax = i;
            }
        }
        //交换最大和第一个元素
        int tmp = nums[0];nums[0] = nums[indexOfMax]; nums[indexOfMax] = tmp;
        int indexOfMin = len - 1;//最小元素的下标
        for (int i = 1; i < len - 1; i++) {
            if(nums[i] < nums[indexOfMin]){
                indexOfMin = i;
            }
        }
        //交换最小和最后一个元素
        tmp = nums[len - 1]; nums[len - 1] = nums[indexOfMin]; nums[indexOfMin] = tmp;
        System.out.println(Arrays.toString(nums));
    }
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值