程序员成长之路(Day 3)

目录

学习目标:

学习内容:

Java基本数据类型

变量和常量的定义及初始化

变量:

常量:

Java的运算符

延伸:

·int和Integer:

·equals():

·ACSII码

LintCode刷题

·玩具工厂 

·数组去重

·字母变换 

 ·获取素数

·逆序输出整数(回文)

·顺序输出

学习时间:

学习产出:



 

学习目标:

  • Java基本数据类型
  • 变量和常量的定义及初始化
  • Java的运算符
  • 运算符的优先级
  • Java分支语句之if…else
  • 循环的嵌套
  • 方法的定义
  • 方法的形参和实参
  • 方法的递归调用

学习内容:

Java基本数据类型

  • 基本数据类型
    • 数字类型
      • 整型
      • 整型表示: 八进制0开头,16进制0x开头,2进制0b开头
        • byte(Byte)
        • 1字节
        • short(Short)
        • 2字节
        • int(Integer)
        • 4字节
        • long(Long)
        • 8字节
      • 浮点型
      • 浮点表示:float和double后面加f/d科学计数法:aEb=a*10的b次方
        • float(Float)
        • 4字节
        • double(Double)
        • 8字节
    • 字符型
      • char(Character)
      • 2字节,用''来表示,""就代表只含有一个字符的字符串
    • 布尔型
      • booolean(Boolean)
      • 4字节
  • 引用数据类型
    • 数组
    • 接口

变量和常量的定义及初始化

变量:

定义:变量是内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),Java中每个变量必须先声明,后使用 该区域的数据可以在同一类型范围内不断变化

分类:

按数据类型分类:

 

按声明的位置: (在方法体外,类体内声明的变量称为成员变量;在方法体内部声明的变量称为局部变量)

注意事项:

        (1)如果创建多个变量,那么变量之间的名称不可以重复。

        (2)对于float和long类型来说,字母后缀F和L不要丢掉。

        (3)如果使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围。

        (4)没有进行赋值的变量,不能直接使用;一定要赋值之后才能使用。

        (5)变量使用不能超过作用域的范围。

        (6)从定义变量的一行开始,一直到直接所属的大括号结束为止。

常量:

        定义:常量是一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变,一般用大写字符

        语法:final 常量名 = 值;如:final String LOVE = 'java';

        自动类型转换:

整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。

        转换从低级到高级:

低  ------------------------------------>  高

byte,short,char—> int —> long—> float —> double

        数据类型转换必须满足如下规则:

                1. 不能对boolean类型进行类型转换。

                2. 不能把对象类型转换成不相关类的对象。

                3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。

                4. 转换过程中可能导致溢出或损失精度

Java的运算符

类别操作符关联性
后缀() [] . (点操作符)左到右
一元++ -- + -从右到左
乘性 * /%左到右
加性 + -左到右
移位 >> >>>  << 左到右
关系 >> = << = 左到右
相等 ==  !=左到右
按位与左到右
按位异或^左到右
按位或|左到右
逻辑与&&左到右
逻辑或| |左到右
条件?:从右到左
赋值= +=  -=  *=  /=  %= > >= < <= &=  ^=  |=从右到左
逗号左到右

@从右到左:!! ture=ture 

@+:尝试将操作数转换为数字

@-:尝试将操作数转换为数字,然后取反

@~:反转操作数中的所有位并返回一个数字( -(x+1) 按位不在数字上的结果是- 1)

@移位:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。(数字意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。)(最多0000 0000 0000 0000 0000 0000 0000 0000)

@&:参加运算的两个对象,按二进制位进行“与”运算,负数按补码形式参加按位与运算。

@|:参加运算的两个对象按二进制位进行“或”运算,负数按补码形式参加按位与运算。

        两个二进制数按照&、|规则来计算出第三个数。

@^:参加运算的两个数据,按二进制位进行“异或”运算

        两个二进制数根据^规则(0^0=0;0^1=1;1^0=1;1^1=0;)

特殊作用:

(1)使特定位翻转 找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可。

(2)与0相异或,保留原值 ,X ^ 0000 0000 = 1010 1110。

        例:X=10101110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001即可得到。

(3)基于异或运算,不引用新变量交换两个变量的值

        a = a ^ b;   b = a ^ b;   a = a ^ b;

@?: <表达式1>?<表达式2>:<表达式3>

        在运算中,首先对第一个表达式进行检验,如果为真,则返回表达式2的值;如果为假,则返回表达式3的值。

延伸:

String a = "21";int b = Integer.parseInt(a);//String 转int。

int a = 21; String b = String.valueOf(a);//int转String。

·int和Integer:

        Integer i = 10 ;
        Integer j = 10 ;
        System.out.println(i == j);
        // true
        Integer a = 128 ;
        Integer b = 128 ;
        System.out.println(a == b);
        //false
        int k = 10 ;
        System.out.println(k == i);
        //ture
        int kk = 128 ;
        System.out.println(kk == a);
        //ture
        Integer m = new Integer( 10 );
        Integer n = new Integer( 10 );
        System.out.println(m == n);
        //false

Integer是一个int基本数据类型的封装类。

重要方法:

        static int parseInt(Str)将字符串参数转换为int型

         short shortValue()以short类型返回该Integer(long、float同理)

        static Integer valueOf(Str)字符串变成Integer对象

        **String.valueOf(char[]),把字符数组变成字符串

区别:

        ①、Integer 是 int 包装类,int 是八大基本数据类型之一

        ②、Integer 是类,默认值为null,int是基本数据类型,默认值为0;

        ③、Integer 表示的是对象,用一个引用指向这个对象,而int是基本数据类型,直接存储数值。

原因:

        2、在 i >= -128 并且 i <= 127 的时候,第一次声明会将 i 的值放入缓存中,第二次直接取缓存里面的数据,而不是重新创建一个Ingeter 对象。

        3、Integer的自动拆箱功能,也就是比较两个基本数据类型,会先把integer拆成int去比较

·equals():

        Integer q = 1 ;
        Integer w = 2 ;
        Integer e = 3 ;
        Integer r = 3 ;

        Integer d = 321 ;
        Integer f = 321 ;

        Long g = 3L;
        Long h = 2L;

        System.out.println(e == r);
        //ture
        System.out.println(d == f);
        //false
        System.out.println(e == (q + w));
        //ture
        System.out.println(e.equals((q+w)));
        //ture
        System.out.println(g == (q+w));
        //ture
        System.out.println(g.equals(q+w));
        //false
        System.out.println(g.equals(q+h));
        //ture

原因:

         3、4 在运算过后都会触发自动拆箱过程,==,比较的是intValue()方法,而equals则是调用了Integer.valueOf(a.intValue()+b.intValue());

        5、6、7 ==可以将小范围的数据类型转换为大范围的数据类型,会把int转换为long类型,equals()不会进行类型转换,不同类型比较会返回false,但是在两个不同类型进行运算符操作后会向上转型。

·ACSII码

                65-90:A-Z

                97-122:a-z

                48-57:0-9

LintCode刷题

·玩具工厂 

        用switch语句来判断运用到哪个玩具对象,创建并返回对象

interface Toy {
    void talk();
}

class Dog implements Toy {
     @Override
    public void talk() {
        System.out.println("Wow");
    }
}

class Cat implements Toy {
   @Override
    public void talk() {
        System.out.println("Meow");
    }
}

public class ToyFactory {
   
    public Toy getToy(String type) {
        // Write your code here
     switch (type){
            case "Dog":
                return new Dog();
            case "Cat":
                return new Cat();
            default:
                return null;
        }
    }
}

·数组去重

利用HashSet来完成数组的重复,再用toArray()方法来把list转换为数组,最后要排序(不排序会有很多1),再返回 

import java.util.HashSet;
import java.util.Set;
import java.util.Arrays;
public class Solution {
    public Integer[] deDuplicate(Integer[] arr) {
        Set<Integer> ls =new HashSet<Integer>();
        for (int i:arr){
            ls.add(i);
        }
        arr=new Integer[ls.size()];
        arr=ls.toArray(arr);
        Arrays.sort(arr);
        return arr;
    }
}

·字母变换 

         用int来获取对象的ACSII值,然后变换过后返回

ACSII码

                65-90:A-Z

                97-122:a-z

                48-57:0-9

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        char[] chars=scanner.next().toCharArray();
        for (int i=0;i<chars.length;i++){
            int val=chars[i];
            val=90-val+65;
            chars[i]=(char) val;
        }
        System.out.println(String.valueOf(chars));
    }
}

 ·获取素数

         在第二个循环中加入一个boolean值,根据这个值来返回第一个循环中的值

public class Main {
    public static void main(String[] args) {
       for (int i=2;i<=100;i++){
           int m=(int)Math.sqrt(i);
           boolean ispRrime=true;
           for (int j=2;j<=m;j++){
               if (i%j==0){
                   ispRrime=false;
               }
           }
           if (ispRrime){
               System.out.println(i);
           }
       }
    }
}

·逆序输出整数(回文)

        1、字符串翻转

        Scanner scanner=new Scanner(System.in);
        String str=scanner.next();
        String s=new StringBuffer(str).reverse().toString();
        System.out.println(Integer.valueOf(s));

        2、以int型来做

        Scanner scanner=new Scanner(System.in);
        int temp=scanner.nextInt();
        int resultint =0;
        while (temp!=0){
            resultint=resultint*10+temp%10;
            temp/=10;
        }
        System.out.println(resultint);

·顺序输出

        for循环即可 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int i=scanner.nextInt();
        for (int j=1;j<=i;j++){
            System.out.println(j);
        }
    }
}

学习时间:

2021-8-11 9:00-11:45、13:30-17:30 20:00-22:32


学习产出:

学习博客*1

刷题*6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值