2022年2月3日

2022年2月3日,第1张

2022年2月3日 可变参数
    在方法声明中,在指定参数类型后加一个省略号(…)一个方法只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
public class Demo_6 {
    public static void main(String[] args) {
        //可变参数
        Demo_6 demo_6 = new Demo_6();
        demo_6.test(1,2,3,4,5,6,7);
    }
    public void test(int x,int y,int... i){
        //可变参数 必须在 普通参数 后面
        for (int i1 = 0; i1 < i.length; i1++) {
            System.out.print(""+i[i1]+"t");
        }
    }
}
递归 求阶乘
package Recursion;

import java.util.Scanner;

public class Demo_2 {
    //阶乘
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        System.out.println(Factorial1(x));
    }
    public static int Factorial1(int x){
        if(x < 0){System.out.println("参数错误") return -1;}
        if(x == 0)return 1;
        else{return x * Factorial1(x - 1);}
    }
}

或者用三目运算符偷懒。。。。。

public static int Factorial2(int x){
        return x == 1 ? 1 : x * Factorial2(x - 1);
    }

嗷对了,阶乘的英文是 factorial (adj.阶乘的)

由于Java是栈机制,递归的消耗会很大,尽量别用

计算器作业
import java.util.Scanner;

public class Homework {
    //计算器
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        do{
            System.out.print("请输入第一个数字:");
            double a = scanner.nextDouble();
            System.out.print("请输入第二个数字:");
            double b = scanner.nextDouble();
            System.out.print("请输入要进行的运算:");
            String c = scanner.next();
            switch(c){
                case "+":System.out.println(""+a+" "+c+" "+b+" ="+" "+(a+b));break;
                case "-":System.out.println(""+a+" "+c+" "+b+" ="+" "+(a-b));break;
                case "*":System.out.println(""+a+" "+c+" "+b+" ="+" "+(a*b));break;
                case "/":System.out.println(""+a+" "+c+" "+b+" ="+" "+((double)a/b));break;
                case "%":System.out.println(""+a+" "+c+" "+b+" ="+" "+(a%b));break;
                default: System.out.println("输入不合理!");break;
            }
            System.out.println("请问是否要继续(Y/N):");
            String c1 = scanner.next();
            if(c1.equals("Y"))continue;
            else break;
        }while(true);
        scanner.close();
    }
}

比较两个字符串是否相同:

String a = "aaa";
String b = "bbb";
a.equals(b);
//返回false

有一点十分难受:

System.out.println("请问是否要继续(Y/N):");
String c1 = scanner.next();
System.out.print(c1 == "Y");
System.out.println(c1.equals("Y"));

上面false,下面true
可能的解释:
1、由于c1和"Y"地址不同,采用上面的比较法,输出肯定是false
2、通常采用equals进行比较,equals运用了Java的重载。

next() 和 nextLine() 的区别
hasNext() 和 hasNextLine() 的区别
判断字符串是否相等
Java字符串方法大全(超超超详细)

数组 数组的声明和创建
package Praparation;

public class Demo_1 {
    public static void main(String[] args) {
        //数组的定义
        int[] a = {1,2,3,4,5,6,7};
        char[] b = {'a','b','c','d','e'};

        //数组的声明,没有分配空间
        char[] c1;
        char c2[];//不建议
        //数组的创建,分配空间了
        c1 = new char[5];
        //数组的赋值
        c1[0] = 'a';
        c1[1] = 'b';
        c1[2] = 'c';
        c1[3] = 'd';
        c1[4] = 'e';

        int[] num = new int[10];

        for (int i = 0; i < c1.length; i++) {
            System.out.print(c1[i]+"t");
        }
    }
}

三种初始化及内存分析 内存分析


图源B站狂神

图源B站狂神

    声明数组时,将变量类型放在栈中创建数组时,在堆中开辟了数组的空间并准备储存数据赋值数组时,在堆中给每一个位置赋值
三种初始化
package Praparation;
public class Initialization {
    public static void main(String[] args) {
        //静态初始化
        int[] a = {1,2,3};//创建+赋值
        Man[] men = {new Man(),new Man()};//引用类型
        //动态初始化,后期赋值,包含默认初始化
        int[] b = new int[10];
        b[0] = 10;
        //默认初始化
    }
}

默认初始化值:

    整数类型(byte、short、int、long)的基本类型变量的默认值为0。单精度浮点型(float)的基本类型变量的默认值为0.0f。双精度浮点型(double)的基本类型变量的默认值为0.0d。字符型(char)的基本类型变量的默认为 “/u0000”。布尔性的基本类型变量的默认值为 false.引用类型的变量是默认值为 null。数组引用类型的变量的默认值为 null。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5722601.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存