编程语言
首页 > 编程语言> > java笔记

java笔记

作者:互联网

JAVA入门学习

数据类型转化

如果直接将byte类型的数据与int类型的数据相加,会报错,所以需要加强制类型转换符,代码格式如下:

        int aa=10;
        byte bb=5;
        byte dd=(byte)(aa+bb);
        System.out.println(dd);

强制类型转换也不是随随便便就可以使用的,也可能造成数据精度丢失的问题。

隐式类型转换(由小转到大)

数据类型的范围由小到大:
byte,short,char–>int–>long–>double

强制类型转换(由大到小)

目标类型 变量名 = (目标类型)要转换的值
注意精度丢失

字符+整形

       int a=10;
       char c='a';
       System.out.println(a+c);//结果为107

字符参与加法运算时,其实是拿该字符在计算机中的数据值来计算的

运算符

a++  a=a+a
a--  a=a-a

创建整形数组

int[] arry={1,2,3,4,5};

创建字符串

 String str="hjgcvyh";//字符串
 String [] skr={"j","k","f","v","s"};//字符数组

求字符串长度

String str="hjkgfvcktgh";
int sum=str.length();

如何判断两个字符串元素组成相同

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:
输入: s = “rat”, t = “car”
输出: false
说明:
你可以假设字符串只包含小写字母。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram

public boolean isAnagram(String s, String t) {
        int sl=s.length();
        int tl=t.length();
        boolean len=false;
        if(sl==tl)
        {
            char[] str=s.toCharArray();//将字符串转换为字符数组
            char[] ttr=t.toCharArray();
            Arrays.sort(str);//对字符数组进行排序
            Arrays.sort(ttr);
            return Arrays.equals(str,ttr);//判断两个字符数组是否相同
        }
        return false;
    }

数组排序

牛牛在各个平台被各种传奇游戏的广告轰炸,所以他决定去玩一玩这类的游戏。这类游戏挂机就可以升级,所以牛牛每天都能变强。在第i天里,牛牛能杀死防御力小于等于i的怪物。但由于牛牛还要刷题,所以牛牛每天最多杀一只怪物。这个游戏共有n只怪物,每只怪物的防御力为DEF[i],牛牛想知道最少要到第几天才能把这n只怪物都杀死。

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param n int整型 
     * @param DEF int整型一维数组 
     * @return int整型
     */
    public int Minimumdays (int n, int[] DEF) {
        // write code here
        Arrays.sort(DEF,0,n);
        int data=0;
        for(int i=0;i<n;i++)
        {
            if(data<DEF[i])
            {
                data=DEF[i];
            }
            else{
                data++;
            }
        }
        return data;
    }
}

四数相加

给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。

为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。

例如:

输入:
A = [ 1, 2]
B = [-2,-1]
C = [-1, 2]
D = [ 0, 2]

输出:
2

解释:
两个元组如下:

  1. (0, 0, 0, 1) -> A[0] + B[0] + C[0] + D[1] = 1 + (-2) + (-1) + 2 = 0
  2. (1, 1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/4sum-ii
哈希表解决

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class jihuo {
    public static void main(String[] args) {

        int[] A={1,2};
        int[] B={-2,-1};
        int[] C={-1,2};
        int[] D={0,2};
        Map<Integer,Integer> contAB=new HashMap<Integer,Integer>();
        for (int u:A)
        {
            for (int v:B)
            {
                contAB.put(u+v,contAB.getOrDefault(u+v,0)+1);
            }
        }
        int ans=0;
        for (int u:C)
        {
            for (int v:D)
            {
                if(contAB.containsKey(-u-v))
                {
                  ans+=contAB.get(-v-u);
                }
            }
        }
        System.out.println(ans);

    }
}

快速幂

//求a的b次方
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class jihuo {
    public static void main(String[] args) {
        int a=5;
        int b=3;
        int sesout=1;
        while (b>0)
        {
            if(b%2==1)
            {
                sesout=(sesout*a)%10000;
            }
            b=b/2;
            a=(a*a)%10000;
        }
        System.out.println(sesout);
    }
}

将字符串转换为ASCLL码

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class HolleWord {
    public static void main(String[] args) {
        String s="gfjtfrakwsjydfghkgckhg";
        int t=s.length();
        char[] str=s.toCharArray();
        Arrays.sort(str);
        int[] arry=new int[500];
        for (int i=0;i<t;i++)
        {
            arry[i]=Integer.valueOf(str[i]);
            System.out.println(str[i]+"的ASCII码为"+arry[i]);
        }
    }
}
/*输出 
 a的ASCII码为97
            c的ASCII码为99
    d的ASCII码为100
            f的ASCII码为102
    f的ASCII码为102
            f的ASCII码为102
    g的ASCII码为103
            g的ASCII码为103
    g的ASCII码为103
            g的ASCII码为103
    h的ASCII码为104
            h的ASCII码为104
    j的ASCII码为106
            j的ASCII码为106
    k的ASCII码为107
            k的ASCII码为107
    k的ASCII码为107
            r的ASCII码为114
    s的ASCII码为115
            t的ASCII码为116
    w的ASCII码为119
            y的ASCII码为121*/

何时调用构造函数

层次结构创建以后,组成层次结构的类的构造函数以怎样的顺序被调用?举个例子来说,给定一个名为B的子类和超类A,是A的构造函数在B的构造函数之前调用,还是情况相反?回答是在类层次结构中,构造函数以派生的次序调用,从超类到子类。而且,尽管super( )必须是子类构造函数的第一个执行语句,无论你用到了super( )没有,这个次序不变。如果super( )没有被用到,每个超类的默认的或无参数的构造函数将执行。下面的例子阐述了何时执行构造函数:

class A{
    double a;
    double b;
    A()
    {
        System.out.println("调用了A的构造函数");
    }
}
class B extends A{
    B()
    {
        System.out.println("调用了B的构造函数");
    }
}
class C extends B{
    C()
    {
        System.out.println("调用了C的构造函数");
    }
}
public class text1 {
    public static void main(String[] args) {
        C c=new C();
    }
}
//输出样例
//调用了A的构造函数 
//调用了B的构造函数
//调用了C的构造函数

如你所见,构造函数以派生的顺序被调用。
仔细考虑,构造函数以派生的顺序执行是很有意义的?
因为超类不知道任何子类的信息,任何它需要完成的初始化是与子类的初始化分离的,而且它可能是完成子类初始化的先决条件。因此,它必须最先执行。

方法重载

当建立应该层次结构以后,如果子类中的方法与超类中的方法名相同和定义的类型相同,那么这个子类中的方法重载超类中的方法。这时超类中的方法会被隐藏。如下所示:

class A{
    double a;
    double b;
    A(double x,double y)
    {
        a=x;
        b=y;
    }
    double area(){
        return 0;
    }
}
class B extends A{
    B(double x,double y)
    {
        super(x,y);
    }
    double area()
    {
        return a*b;
    }
}
class C extends B{
    C(double x,double y)
    {
        super(x,y);
    }
    double area()
    {
        return (a+b)/2;
    }
}
public class text1 {
    public static void main(String[] args) {
        A a=new A(12,5);
        B b=new B(20,6);
        C c=new C(5,7);
        A f;
        f=a;
        System.out.println(f.area());
        f=b;
        System.out.println(f.area());
        f=c;
        System.out.println(f.area());
    }
}
//0.0
//120.0
//6.0

以下代码运行的结果是:

public class Demo { class Super{  int flag=1;
         Super(){
             test();
         }  void test(){
            System.out.println("Super.test() flag="+flag);
         }
    } class Sub extends Super{
        Sub(int i){  flag=i;
            System.out.println("Sub.Sub()flag="+flag);
        }  void test(){
            System.out.println("Sub.test()flag="+flag);
        }
    }  public static void main(String[] args) {  new Demo().new Sub(5);
     }
}

答案
Sub.test()flag=1
Sub.Sub()flag=5

解释:在只想new Sub(5)的时候,父类先初始化了 int flag = 1,然后执行父类的构造函数Super(),父类构造函数中执行的test()方法,因子类是重写了test()方法的,因此父类构造函数中的test()方法实际执行的是子类的test()方法,所以输出为Sub.test() flag=1,接着执行子类构造函数Sub(5) 将flag赋值为5,因此输出结果Sub.Sub() flag=5。

标签:java,int,笔记,class,码为,ASCII,public,构造函数
来源: https://blog.csdn.net/weixin_44644871/article/details/109524458