• 《Java程序设计基础》 第5章手记


    《Java程序设计基础》 第5章手记


    - 一维和多维数组的定义
    - 数组元素的访问
    - 字符串及其应用

    这节课给大家发福利,将会在后面贴实验作业的代码。

    一维数组和多维数组的定义&数组元素的访问

    Java对数组等引用对象的内存分配:

    引用变量:为数组或对象起的一个名称。在堆中创建一个数组或对象后,还可在栈中定义一个引用变量存放该数组或对象在堆内存中的首地址(对象的句柄),以后就可在程序中使用栈的引用变量来访问堆中的数组或对象。

    数组和对象在没有引用变量指向它时,就会变成垃圾,不被使用,但占内存,在随后不确定的时间释放。

    一维数组和多维数组的定义类似于C#,基础知识不再赘述,请参考原书。
    常见格式:

    int[] Array = new int[] //new int[]中括号里指明数组长度
    int[][] Array = new int[][] //多维数组必须指明第一维的长度

    遍历数组foreach语句:

    //逐个打印数组中的元素
    for (type element : arr)
        {
           System.out.println(element);
           ……
         }


    Ps:在给数组赋值时,并不推荐这这种方法,可能会出现错误。

    Java多维数组与C语言的区别:

    Java中无真正的多维数组,只是数组的数组,在逻辑上Java数组不是规则的矩形,也就是说多维数组中每行的元素可以不同。

    C语言的多维数组有真正的维度,二维数组有行指针和列指针的区别,但必须是严格的矩形,即每行数组元素个数相同。

    数组Array的常用方法

    课本p66

    方法简要说明
    binarySearch(a,key)返回key在升序数组a中首次出现的地址,若未找到则返回负值
    sort(a)对数组a进行升序排列,结果保存在数组a中
    copyOf(a,length)截取数组a中长度为length的函数赋值给调用数组
    epuals(a,b)判断a和b两个数组对应元素是否相等,相等则返回true(boolean值),否则返回false

    字符串及其应用

    创建常用格式:

    String str = "Hello";
    
    str = "Hello" + "World" //str的值为"HelloWorld"

    String类的常用方法

    课本 77

    方法简要说明
    a.length;返回字符串a的长度
    a.equals(b)判断a和b两个字符串是否相等,相等返回true,否则返回false
    substring(i)返回从i开始的字符串(i是整型的是索引值,下同)
    substring(i,j)返回从到j的字符串
    charAt(i)返回位置为i的索引值
    a.indexOf(b)返回字符串b在a中首次出现的位置
    a.compareTo(b)比较字符串a和b的大小,规则同于C语言,a>b返回正值,a=b返回0,a

    实验4-1到4-4代码

    4-1

    import java.util.*;
    public class Shiyan4_1
    {
        public static void main(String[] args)
        {
            int max,min;
            int[] a = new int[5];
            Scanner reader = new Scanner(System.in);
    
            System.out.println("请输入5个数");
            for(int i =0; i<a.length; i++)
            {
                a[i] = reader.nextInt();
            }
    
            max = a[0];
            min = a[0];
            for(int j =1 ; j<a.length; j++)
            {
                if(a[j]>max) max = a[j];
                if(a[j]<min) min = a[j];
            }
    
            System.out.println("最大和最小的数分别为:" +max +" " +min);
        }
    }

    4-2

    import java.util.Arrays;
    public class Shiyan4_2
    {
        public static void main(String[] args)
        {
            int[][] a = new int[2][3];
    
            for(int i=0; i<a.length; i++)
            {
                for(int j=0; j<a[i].length; j++)
                    a[i][j] = (int)(Math.random()*100);
            }
    
            for(int i=0; i<2; i++)
                Arrays.sort(a[i]);
    
            for(int i=0; i<2; i++)
                for(int j=0; j<a[i].length; j++)
                    System.out.println(a[i][j]);
    
        }
    }

    4-3

    public class Shiyan4_3
    {
        public static void main(String[] args)
        {
            String str1 = "Hello";
            String str2 = "World";
            String str3 = "HelloWorld";
            String str = str1 + str2;
    
            System.out.println(str);
            System.out.println("str长度:" +str.length());
            System.out.println("or在str中出现的位置:" +str.indexOf("or"));
            System.out.println("转为小写:" +str.toLowerCase());
            System.out.println("转为大写:" +str.toUpperCase());
            System.out.println("str和str3的值是否相等:" +str.equals(str3));
    
            if(str==str3)   System.out.println("True");
            else            System.out.println("False");
        }
    }

    4-4

    public class InitArray {
        public static void main(String[] args)
        {
            if(args.length != 3)
                System.out.println( 
                   "Error:请提供三个整数值, 分别表示数组长度、
    " +
                   "首元素初值、后续元素的增量.");
            else
            {
                int arrayLength = Integer.parseInt(args[0]); 
                int array[] = new int[arrayLength];// create array
                //把第二、三个参数分别保存在两个整型变量中
                int arrayfirst = Integer.parseInt(args[1]);
                int arraygrow = Integer.parseInt(args[2]);
    
                //两个整型值分别作为数组第一个元素的初值和增量,
                //通过循环对整个数组元素赋值
                array[0] =arrayfirst;
    
                for(int i=1; i<array.length; i++)
                    array[i] += arraygrow*i;
                System.out.printf("%s%8s
    ", "Index", "Value");
                for(int counter = 0; counter<array.length; counter++)
                    System.out.printf("%5d%8d
    ", counter, array[counter]);
             }
        }
    }


    zhihu@Solo | weibo@从流域到海域

  • 相关阅读:
    (转)A*算法详解及习题
    BZOJ1444[Jsoi2009]有趣的游戏——AC自动机+概率DP+矩阵乘法
    交通——set+dsu on tree
    [Codeforces1132G]Greedy Subsequences——线段树+单调栈
    BZOJ4482[Jsoi2015]套娃——贪心+set
    BZOJ4477[Jsoi2015]字符串树——可持久化trie树
    BZOJ4475[Jsoi2015]子集选取——递推(结论题)
    [UOJ86]mx的组合数——NTT+数位DP+原根与指标+卢卡斯定理
    BZOJ2428[HAOI2006]均分数据——模拟退火
    BZOJ4712洪水——动态DP+树链剖分+线段树
  • 原文地址:https://www.cnblogs.com/wanghongze95/p/13842667.html
Copyright © 2020-2023  润新知