返回顶部

【Java查漏补缺(一)】数组与循环


除了数组与循环,还有方法,讲究看吧!后续练习内容都是连贯的!

Basical Java

看下Java中的变量类型吧!

数据类型关键字内存占用二进制位数
字节型 byte 1个字节 4位
短整型 short 2个字节 8位
整型 int(常用) 4个字节 32位
长整型 long 8个字节 64位
单精度浮点数 float 4个字节 32位
双精度浮点数 double(常用) 8个字节 64位
字符型 char 2个字节 8位
布尔类型 boolean 1个字节 4位

输入和输出

正常的输入和输出没什么好说的。看看下面这句

System.out.println(5 + 5 + "hello" + 5 + 5);

最终的结果是什么?10hello55

java中任意数据和字符串拼接结果一定是个字符串

变量定义

变量的定义方式

有两种定义方式:玩了这么久的Java,才知道这玩意叫语法糖。

//语法糖方式定义
int a = 1;

// 先声明,后赋值,再使用
int b;
b = 1;

还有嗷,单精度浮点数和长整型数定义的时候要加F(大小写均可)/L(大小写均可)。

类型转换

分为显式类型转换(也叫强转-会损失精度)和隐式类型转换。

  • 1,隐式(小的范围赋值给大的,int赋值给long

  • 2,显式(大的范围赋值给小的损失精度*

他们两个之间的区别就是计算会不会丢失精度。(强转会丢失精度-大容器放到小容器中)

范围由小到大byte -> short, char -> int -> long -> float -> double boolean不参与**.

int e = 100;
long f = e ;  // 隐式类型转化(不会损失精度
System.out.println(f);
float g = 109.3F;
int h = (int) g;  // 显式类型转换(强制转换会损失精度
System.out.println(h);

ASCII码表

a - 97

A - 65

0 - 48

System.out.println('a' + 0);
System.out.println('A' + 0);
System.out.println('0');

运算符优先级及三元运算符

// 运算符优先级(从后往前执行)
int i = 10;
int j = i++ + --i + ++i;  // 从后往前 10+10+11
System.out.println(i);
System.out.println("算术运算符执行顺序测试结果为:" + j);
//三元运算符
int k = 5 < 3 ? 10 : 18;
System.out.println("三元运算符输出:" + k);

条件判断语句

if - else if 语句

public class Demo02_Mulit_If {
   public static void main(String[] args) {
       System.out.print("请输入您的年龄:");
       Scanner sc = new Scanner(System.in);
       int age = sc.nextInt();
       if (age >= 3 && age <= 5){
           System.out.println("可以上幼儿园了!");
      } else if (age >=6 && age <=12) {
           System.out.println("可以上小学了!");
      }else if (age >= 13 && age <= 15){
           System.out.println("可以上中学了!");
      }else {
           System.out.println("没有这样的学校!");
      }
  }
}

switch判断语句

public class Demo03_Switch {
   public static void main(String[] args) {
       //case 穿透好不好?看情况
       // switch中可以放什么?byte,short,char,int,枚举,String
       int month = 10;
       switch (month){
           case 12:
           case 1:
           case 2:
               System.out.println("冬季");
               break;
           case 3:
           case 4:
           case 5:
               System.out.println("春季");
               break;
           case 6:
           case 7:
           case 8:
               System.out.println("夏季");
               break;
           case 9:
           case 10:
           case 11:
               System.out.println("秋季");
               break;
           default:
               System.out.println("没有这样的季节!");
      }
  }
}

for循环与while循环

这里说下死循环的3种实现方式:while(true),for(;true;)for(;;)

还有for循环的快捷键 itar (iterator)

手写冒泡排序-这算是写穿了的一个循环吧

冒泡排序

 int[] array = {1, 2, 32, 45, 9, 3};  // 定义数组,静态初始化
//             0 1   2   3 4 5
for (int i = 0; i < array.length - 1; i++) {
    // 这里是0,length - 1
    for (int j = 0; j < array.length - i - 1; j++) {
        // 这里是 0, length -i -1
        // 前一个大于后面的一个就交换(到后面,说明元素是由小到大排列的
        if (array[j] > array[j + 1]) {
            int temp = array[j];
            array[j] = array[j + 1];
            array[j + 1] = temp;
        }
    }
}
// 循环遍历数组
for (int i = 0; i < array.length; i++) {
    System.out.print(array[i] + ",");
}

for循环打印99乘法表

//演示循环嵌套打印9*9乘法表
for (int i = 1; i <= 9; i++) {
   // 1*1 1*2 .. 1*9
   for (int j = 1; j <= i; j++) {
       System.out.println(i + "*" + j + "=" + (i*j));
  }
   System.out.println();
}

Scanner详解

步骤:

  1. 导包. import java.util.Scanner;

  2. 创建对象. Scanner sc = new Scanner(System.in);

  3. 调用方法. int num = sc.nextInt();

获取字符串类型用.next()方法

获取int类型用.nextInt()方法

获取字符类型用.nextChar()方法

//Scanner 案例(判断三个小和尚最高身高
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个和尚的身高: ");
int h1 = sc.nextInt();
System.out.println("请输入第二个和尚的身高: ");
int h2 = sc.nextInt();
System.out.println("请输入第三个和尚的身高: ");
int h3 = sc.nextInt();

经典案例Scanner结合三元运算符

// 第一种写法
/*
int temp = h1 > h2 ? h1: h2;
int result = h2 > h3 ? h2: h3;
*/
int result = h1 > h2 ? (h1 > h3 ? h1 : h3): (h2 > h3 ? h2: h3);  // 通常情况可以去掉括号
System.out.println("最高身高的和尚为:"+ result);

数组

数组的两种初始化方式:动态初始化静态初始化

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

  • 静态初始化,给出初始值,系统决定长度

// 数组定义方式-动态初始化,静态初始化
// 动态初始化,指定长度,系统给定默认值
//默认值:int -> 0, double -> 0.0, boolean -> false, String -> null
int[] arr = new int[3];  // 推荐使用,掌握
// 另一种定义方式
int arr1[] = new int[3];  // new 代表去堆内存中开辟空间
// 静态初始化,给出初始值,系统决定长度
int[] array = {13, 32, 5, 56};  // 推荐使用,掌握
int[] array1 = new int[]{12, 32, 43};

数组的基操

获取数组长度

打印数组最大索引

打印数组元素的地址值

// 数组的基本操作
// 定义一个三个元素的数组
int[] array3 = new int[3];
System.out.println(array3[1]);
array3[1] = 10;
System.out.println(array3[1]);
// 打印数组长度
System.out.println(array3.length);
// 打印数组最大索引
System.out.println(array3.length - 1);
// 打印数组元素的地址值
System.out.println(array3);

关于数组遇到的两个问题 NullPointerException,ArrayIndexOutOfBoundsException

NullPointerException — 数组为空

ArrayIndexOutOfBoundsException — 数组元素不存在

int[] array4 = new int[4];
array4 = null;
int[] array5 = new int[5];
// NullPointerException数组为空
try {
   System.out.println(array4[0]);
}catch (Exception e) {
   System.out.println(e);
}
// ArrayIndexOutOfBoundsException数组元素不存在
try {
   System.out.println(array5[5]);
}catch (Exception e){
   System.out.println(e);
}

遍历数组&数组求最值

// 遍历数组
int[] arrx = {11, 22, 33, 44, 55};
// iterator array -> itar(快捷键
for (int i = 0; i < arrx.length; i++) {
   System.out.print(arrx[i] + "\t");
}
System.out.println();
//获取数组元素的最值
int[] arry = {5, 15, 2000, 10000, 100, 4000};
int max = arry[0];
for (int i = 0; i < arry.length; i++) {
   if (max < arry[i]){
       max = arry[i];
  }
}
System.out.println("数组最值是: " + max);

方法Method

跟Python中的def 函数名(): 这种函数差不多

把具有独立功能的代码整合到一起, 使其成为具有特殊功能的代码集.

方法的好处: 提高代码的 复用性.

方法的格式

修饰符  返回值的数据类型  方法名(数据类型 参数名1, 数据类型 参数名2) {
      方法体;
return 具体的返回值;
}
格式解释:
   修饰符:             目前理解为固定格式   public static
   返回值的数据类型:     指的是方法执行完毕后, 返回什么类型的结果, 如果明确知道方法没有具体的返回值, 则返回值类型必须写成void
   方法名:             就是方法的名字, 要符合小驼峰命名法, 方便我们调用的.
   参数列表:           简称形参, 指的是调用方法需要传入什么类型的值.
   方法体:             就是以前的逻辑代码(if, for...), 用来完成某些功能的.
   return:            主要作用是用来结束方法的, 捎带着可以返回方法的执行结果.

注意事项

注意事项: 1. 方法与方法之间是平级关系, 不能嵌套定义. 2. 方法只有被调用才会执行. 3. 定义方法时候, 写的参数列表叫: 形参, 指的是调用方法需要传入什么类型的值. 4. 调用方法的时候, 传入的参数叫: 实参, 指的是实际参与运算的数值.

  1. 方法的功能越单一越好, 最好一个方法就做一件事儿.

public class Methods {
    public static void main(String[] args) {
        // 需求1: 定义方法, 计算两个整数的和.
        // 需求2: 方法版的遍历数组
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个整数");
        int a = sc.nextInt();
        System.out.println("请输入第二个整数");
        int b = sc.nextInt();
        int result = getSum(a,b);
        System.out.println("两个数的和为:" + result);
        int[] arr = {12, 32, 33, 99};  // 定义数组
        printArray(arr);
    }

    /**
     * 这是一个文档注释
     * @param a 要计算的第一个整数
     * @param b 要计算的第二个整数
     * @return 方法 的返回值(求和结果
     */
    public static int getSum(int a, int b){
        // 定义方法, 计算两个整数的和.
        int result = a + b;
        return result;
    }
    public static void printArray(int[] array){
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);

        }
    }
}
posted @ 2023-06-08 22:49  FlowersandBoys  阅读(51)  评论(0编辑  收藏  举报