Day2 Java—方法+数组

本文详细介绍了Java编程中的关键概念,包括数组操作、方法的使用、数据类型转换、流程控制语句(选择结构、顺序结构、循环结构),以及实战案例如猜数字游戏和控制台登录。通过实例演示了如何处理数组异常和数组操作技巧,适合初学者和进阶开发者参考。
摘要由CSDN通过智能技术生成

Day 2—方法+数组

行业背景

产品经理(收集需求)

架构师(确定技术协议栈)

项目经理(确定项目进度)

交互/UI(设计界面)

前端工程师

后端工程师(Java,Python,PHP,Go)

测试工程师(白盒/黑盒)

运维

数据类型转换

在这里插入图片描述

byte b=10;
short s=20;
long l=10000000000L;  //为了和int区分
float f=10.3f;        //加f是为了和double区分
char c='a';
boolean b1=true;
  • 小转大(自动)
  • 大转小(强制)

强制转换:

public class Demo3{
    public static void main(String[] args){
        double b=3.14int i=int(b);
        System.out.println(i);
    }
}
//结果:3


//面试题
short s=1,s=s+1;   //代码有问题,改代码
//改错:
short s=1;
short b=(short)(s+1);    //int转成short(大转小)

操作符:++,–

a=1;b=a++//先赋值,再加1,b=1,a=2
a=1;b=++a;//先加1,再赋值,a=2,b=2
a=2000;b=a--//先赋值,再减1,b=2000,a=1999
a=2000;b=--a;//先减1,再赋值,a=1999,b=1999
    
public class Demo2 {
    public static void main(String[] args){
        int a=100;
        int m=a++ + ++a - a++ + a;
        //a=101,a++=100
        //a=102,++a=102
        //a=103,a++=102
        //a=103
        //100+102-102+103=203
        System.out.println(m);
    }
}

+、-、*、/

public class OperatorDemo{
    pulic static void main(String[] args){
        
        System.out.println(5/4);    //1
        System.out.println(5.0/4);  //1.25
        System.out.println(5/4.0);  //1.25
    }
}

拼接操作

public class OperatorDemo{
    public static void main(String[] args){
        int a=10;
        char c='a';                //ASCII码值97
        System.out.println(a+c);   //107
        
        System.out.println("hello"+"world");    //helloworld
        System.out.println("hello"+10);         //hello10
        System.out.println("hello"+10+20);      //hello1020
        System.out.println(10+20+"hello");      //30hello
        
        int m=5;
        int n=m++;    //n=5,m=6
        
        System.out.println("m:"+m);    //m:6
        System.out.println("n:"+n);    //n:5
    }
}

键盘录入数据

  • 扫描器,通过Scanner类扫描用户在控制台输入的数据

    import java.util.Scanner;     //导入Scanner包
    
    public class ScannerDemo{
        public static void main(String[] args){
            //创建键盘录入对象
            Scanner sc= new Scanner(System.in);
             
            //给出提示
            System.out.print("请输入一个整数:");   //print不换行
            
            //接收数据
            int i=sc.nextInt();
            System.out.println("i:"+i);          //println换行
            
            //给提示
            System.out.print("请输入字符串:");
            String c=sc.next();
            System.out.println("字符串为:"+c);            
    	}
    }
    

流程控制语句

  • 分类
    • 选择结构
    • 顺序结构
    • 循环结构

选择结构

if 三种

if
if else
if   else if``````else

switch

switch(表达式){
    case1:
        语句体1;
        break;
    case2:
        语句体2;
        break;
    case3:
        语句体3;
        break;
    ````
    default:       //所有case都不满足时,就执行该处的内容。
        语句体n+1;
        break;     //可有可无
}

循环结构

for

/*   九九乘法表    */
public class ForDemo{
    public static void main(String[] args){
        for(int i=1;i<10;i++){
            for(int j=1;j<=i;j++){
                System.out.print(j+"x"+i+"="+i*j+"\t");
            }
            System.out.println();
        }
    }
}

do```while

public class DpWhile{
    public static void main(String[] args){
        int count=1;
        boolean isOK=false;
        do{
            System.out.println("正在进行第"+count+"次学习");
            if(count>=100){
                isOK=true;
            }
            count++;
        }while(!isOK);
        System.out.println("学废了");
    }
}

Random类

import java.util.Random;
public class Random{         //随机输出0-4中的数,输出5次
    public static void main(String[] args){
        Random r=new Random();
        for(int i=1;i<=5;i++){
            int number=r.nextInt(5);
            System.out.println("number:"+number);
        }
    }
}

总结—实战演练

猜数字游戏

//猜数字游戏
import java.util.Random;      //引入随机生成数类库
import java.util.Scanner;     //引入Scanner扫描类库 

public class Demo1{
    public static void main(String[] args){
        Random r=new Random();                //随机生成一个数
        int number=r.nextInt(4);              //生成数范围是0-3,并把随机生成的数赋值给number
        Scanner s=new Scanner(System.in);     //创建键盘录入对象s
        int i=3;                              //3次猜词机会
        lable_class:                          //
        while(true){
            if(i<=0){
                break lable_class;            //机会少于0次,结束游戏
            }
            i--;                              //执行一次,机会少一次
            System.out.print("请输入一个数:");
            int a=s.nextInt();                //接收键盘输入
            if(a<number&&a>=0){
                System.out.println("偏小,还剩下"+i+"次机会");
            }
            else if(a>number&&a<4){
                System.out.println("偏大,还剩下"+i+"次机会");
            }
            else if(a==number){
                System.out.println("猜对了");
                break;                        //猜对了,结束游戏
            }
            else{                             //输入的数超出随机生成的范围
                System.out.println("输入错误,还有"+i+"次机会");
            }
        }
    }
}

控制台登陆

/*   控制台登录,可输入3次    */
/*  比较String不能使用“==”,要用类方法.equals   因为“==”是比较地址,不是String的值    */
import java.util.Scanner;
public class Login {

    public static void main(String[] args){
    Scanner userName=new Scanner(System.in);
    Scanner passWord=new Scanner(System.in);

    int i=3;
    while(i>0){
        i--;
        System.out.println("请输入用户名:");
        String uN=userName.next();
        System.out.println("请输入密码:");
        String pW=passWord.next();
        if(!uN.equals("zj")&&pW.equals("123")){
            System.out.println("用户名错误!您还有"+i+"次机会");
        }
        else if(uN.equals("zj")&&!pW.equals("123")){
            System.out.println("密码错误!您还有"+i+"次机会");
        }
        else if(!uN.equals("zj")&&!pW.equals("123")){
            System.out.println("用户名&密码错误!您还有"+i+"次机会");
        }
        else{
            System.out.println(uN+pW);
            System.out.println("登陆成功!");
            break;
        }
    }
    
    }
}

方法

  • 完成特定功能的代码块
  • 当一段代码被反复使用,可以把它提取成方法

方法格式说明

修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2```){
    函数体;
    return 返回值;
}
  • 修饰符:public static
  • 返回值类型:结果的数据类型
  • 方法名:方法的名称==(小驼峰)==
  • 参数列表:执行该方法需要的条件
    • 参数类型:基本/引用类型
    • 参数名:即变量名
//static和参数列表可以不写
public class SumDemo{
    public static void main(String[] args){
        System.out.println(sum(3,5));       //调用方法sum
    }
    public static int sum(int a,int b){     //方法sum
        int c=a+b;
        return c;
    }
}

方法重载

  • 同一个类中有多个方法,方法名相同,参数列表不同,称为方法重载,与返回值类型与修饰符无关
/*  
    比较两个int类型的数是否相等
    比较两个double类型的数是否相等
*/
public class Compare{
    public static void main(String[] args){
        int a=3;
        int b=5;
        
        System.out.println(compare(a,b));
        
        double c=3.14;
        double d=4.13;
        System.out.println(compare(c,d));
    }
    
    public static boolean compare(int a,int b){
        System.out.println("判断两个int类型的数是否相等:");
        return a==b;
    }
    public static boolean compare(double a,double b){
        System.out.println("判断两个double类型的数是否相等:");
        return a==b;
    }
}
课堂练习
//最好把Scanner操作写在main函数里

/*    Practice.java    */
import java.util.Scanner;
public class Sum {

    public int large(){              //方法——返回键盘输入的两个数最大值
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入两个整数:");
        int a=sc.nextInt();
        int b=sc.nextInt();
        return(a>b?a:b);
    }
    public boolean compare(){        //方法——判断键盘输入的两个数是否相等
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入两个整数:");
        int a=sc.nextInt();
        int b=sc.nextInt();
        return  a==b;
    }
    public int select(){               //方法——返回键盘输入的三个数中的最大值
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入三个整数:");
        int a=sc.nextInt();
        int b=sc.nextInt();
        int c=sc.nextInt();
        int temp=(a>b)?a:b;
        int max=(temp>c)?temp:c;
        return max;
    }
}

/*    Test.java    */
public class Test {
    public static void main(String[] args){
        Practice s1=new Practice();        //创建类的实例化
        
        //通过实例,调用类中的方法
        System.out.println(s1.large());
        System.out.println(s1.compare());
        System.out.println(s1.select());
    }
}

数组

  • 数组用于存储多个数据值
  • 是存储同一种数据类型(基本/引用)多个元素的容器类也可做为数组类型
  • 一个类的整体也可以当成一个数组,如下
public class User {
    private int name;
    private String address;

    /*
    无参构造方法
     */
    public User(){}

    /*
    有参构造方法
     */
    public User(int name,String address){
        this.name=name;
        this.address=address;
    }

    public void setName(int name) {
        this.name = name;
    }
    public int getName(){
        return name;
    }
    public void setAddress(String address){
        this.address=address;
    }
    public String getAddress(){
        return address;
    }
}
import com.zj.Day3.User;

public class TestUser {
    public static void main(String[] args){
        /*
        无参构造
         */
        User u1=new User();
        u1.setName(01);
        u1.setAddress("镇江市京口区");
        User u2=new User();
        u2.setName(02);
        u2.setAddress("镇江市京口区");
       
        /*
        	因为类属于引用数据类型,所以一个类也可当作一个数组元素
        */
        User[] arr1=new User[2];    //一个类作为数组的元素类型
        arr1[0]=u1;
        arr1[1]=u2;
       
        for(int i=0;i<2;i++){
            System.out.println(arr1[i].getName()+arr1[i].getAddress());
        }

        /*
        有参构造
         */
        User u11=new User(11,"镇江");
        User u22=new User(22,"镇江");
        
        User[] arr3=new User[2];
        arr3[0]=u11;
        arr3[1]=u22;
       
        for(int i=0;i<2;i++){
            System.out.println(arr3[i].getName()+" "+arr3[i].getAddress());
        }
    }
}

数组的格式

public class Array{
    public static void main(String[] args){
        
        //格式1——创建数组对象
        int[] arr1=new int[3];
        
        //格式2——创建数组对象并初始化
        int[] arr2=new int[]{1,2,3};
        
        //格式3——创建数组对象并初始化
        int[] arr3={1,2,3};
    }
}

数组的访问

  • 通过数组索引访问数组元素
/*    访问数组    */
public class Array{
    public static void main(String[] args){
        int[] arr1={1,2,3};
        System.out.println(arr1[0]);
    }
}
/*     遍历数组     */
public class Array{
    public static void main(String[] args){
        int[] arr1={1,2,3};
        for(int i=0;i<arr1.length;i++){
            System.out.println(arr1[i]);
        }
    }
}

数组初始化

  • 是在内存中为数组开辟连续空间并为每个元素赋值的过程

  • 动态初始化:仅指定长度,由系统给出默认值

    • 整数型:0
    • 浮点型:0.0
    • 字符型:“\u0000"(空字符)
    • 布尔型:false
    • 引用类型:null
  • 静态初始化:给出初始值,由系统决定数组长度

Java程序的内存分配

  • 方法区

    • 存储可运行的class文件,包含方法,静态成员,常量等
    • 方法运行时使用的内存,”先进后出“
    • 存储new出的数组或对象
  • 本地方法栈

    • JVM在调用操作系统功能时使用,与开发无关
  • 寄存器

    • CPU使用,与开发无关
  • 数组类型

    • 变量arr存储的是数组在堆内存中的地址值,不是元素值,它通过内存地址引用堆内存中的数据,所以数组是引用类型
/*   一个数组,两个引用    */
public class Array{
    public static void main(String[] args){
        int[] arr1=new int[3];
        arr1[0]=1;
        arr1[1]=2;
        arr1[2]=3;
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
        
        int[] arr2=arr1;
        arr2[2]=4;
        System.out.println(arr1[2]);
        System.out.println(arr2[2]);
    }
}

数组操作异常

  • 数组索引越界

    • Array Index out of bounds exception
    • 访问到了数组中不存在的索引时发生
  • 空指针异常

    • Null Pointer Exception
    • 数组引用没有指向实体,却在操作实体中的元素时发生

数组案例

/*    求数组中最大元素    */
public class Array{
    public static void main(String[] args){
        int[] arr={238,459,465,856,365,764,576,324,657,834,456,765};
        int temp=arr[0];
        for(int i=0;i<arr.length;i++){
            if(arr[i]>temp){
                temp=arr[i];
            }
        }
        System.out.println("数组中最大的为:"+temp);
    }
}
/*     8个工人工资      */
Array.java
public class Array {
  
    public double[] getArray(){            //方法——创建一个数组,并封装到方法getArray中
        double[] salary =new double[]{200.34,400.32,544.34,344.65,299.43,900.56,900.23,333.11};
        return salary;
    }

    public double large(double[] salary){      //方法——得到一个数组中的最大值
        double temp=salary[0];
        for(int i=0;i<salary.length;i++){
            if(temp<salary[i]){
                temp=salary[i];
            }
        }
        return temp;
    }

    public double average(double[] salary){     //方法——得到数组的平均值
        int sum=0;
        int av=0;
        for(int i=0;i<salary.length;i++){
            sum+=salary[i];
        }
        av=sum/salary.length;
        return av;
    }
}

Test.java
public class Test {
    public static void main(String[] args){
        Array a1=new Array();
        a1.getArray();
        for(int i=0;i<a1.getArray().length;i++){      //遍历输出数组
            System.out.println((i+1)+":"+a1.getArray()[i]);
        }
        System.out.println("large:"+a1.large(a1.getArray()));
        System.out.println("average:"+a1.average(a1.getArray()));
    }
}

temp;
}

public double average(double[] salary){     //方法——得到数组的平均值
    int sum=0;
    int av=0;
    for(int i=0;i<salary.length;i++){
        sum+=salary[i];
    }
    av=sum/salary.length;
    return av;
}

}

Test.java
public class Test {
public static void main(String[] args){
Array a1=new Array();
a1.getArray();
for(int i=0;i<a1.getArray().length;i++){ //遍历输出数组
System.out.println((i+1)+":"+a1.getArray()[i]);
}
System.out.println(“large:”+a1.large(a1.getArray()));
System.out.println(“average:”+a1.average(a1.getArray()));
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值