精华内容
下载资源
问答
  • 二维数组赋值

    千次阅读 2017-07-21 20:22:10
    今天项目在给二维数组赋值过程中一直报错,是空指针异常。原来自己对二维数组初始化不了解。 这里总结一下: 下面是错误代码: String[][] temp = new String[src.length()][]; String[][] pinyinHead = new ...

         今天项目在给二维数组赋值过程中一直报错,是空指针异常。原来自己对二维数组初始化不了解。

    这里总结一下:

    下面是错误代码:

    String[][] temp = new String[src.length()][];
    String[][] pinyinHead = new String[src.length()][];

    for (int i = 0; i < srcChar.length; i++) {
    temp[i] = PinyinHelper.toHanyuPinyinStringArray(srcChar[i], hanYuPinOutputFormat);
    //pinyinHead[i] = new String[temp[i].length];
    for (int j = 0; j < temp[i].length; j++) {
    pinyinHead[i][j] = temp[i][j].substring(0, 1);

    }

    如何改呢?只需对pinyinHead二维数组初始化时把数组每行存多少数据声明一下就好了

    加上注释的那一句就对了。

    展开全文
  • 下面就具体的二维数组赋值,我们先简单分析赋值的概念,然后带来具体的赋值实例。1.赋值概念使用双下标访问二维数组中的元素:第一个下标代表:行号(高维下标)。第二个下标代表:列号(低维下标)。2.赋值实例(1)赋...

    efc06960160b921b70c953e3f472780a.png

    在java数组中,我们想要知道其长度,可以通过赋值的方法来实现。在正式开始对数组赋值前,我们要明确其中的下标问题。在准备步骤上,先找到高维的位置,再确定低纬的下标,就可以进行相关的赋值操作了。下面就具体的二维数组赋值,我们先简单分析赋值的概念,然后带来具体的赋值实例。

    1.赋值概念

    使用双下标访问二维数组中的元素:

    第一个下标代表:行号(高维下标)。

    第二个下标代表:列号(低维下标)。

    2.赋值实例

    (1)赋值:从最高维开始,分别为每一维分配空间,例如:String s[][] = new String[2][];

    s[0] = new String[2];

    s[1] = new String[3];

    s[0][0] = new String("Good");

    s[0][1] = new String("Luck");

    s[1][0] = new String("to");

    s[1][1] = new String("you");

    s[1][2] = new String("!");

    (2)输出for (int i=0; i

    for (String s1:s[i]){

    System.out.print(s1 +' ');

    }

    }

    结果Good Luck to you !

    以上就是java二维数组的赋值方法,相信大家在理解了赋值需要的下标,就可以开始着手赋值的实例操作了。大家学会后,赶快动手操作一下吧。更多Java学习指路:

    展开全文
  • 易语言学习进阶二维数组赋值源码,学习进阶二维数组赋值
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼从文件里取出数据 按行存在一维数组里面 如何存进二维数组 我们方法显示不出来 求教public static void main(String[] args) throws IOException{BufferedReader reader=...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    从文件里取出数据 按行存在一维数组里面 如何存进二维数组 我们方法显示不出来 求教

    public static void main(String[] args) throws IOException{

    BufferedReader reader=new BufferedReader(new FileReader("d:/data.txt"));

    String line1=reader.readLine();

    String line2=reader.readLine();

    String line3=reader.readLine();

    String line4=reader.readLine();

    String arr1[]=line1.split(",");

    String arr2[]=line2.split(",");

    String arr3[]=line3.split(",");

    String arr4[]=line4.split(",");

    double[] a1=new double[arr1.length];

    double[] a2=new double[arr2.length];

    double[] a3=new double[arr3.length];

    double[] a4=new double[arr4.length];

    for (int i = 0; i < a1.length; i++) {

    a1[i]=Double.parseDouble(arr1[i]);

    }

    for (int i = 0; i < a2.length; i++) {

    a2[i]=Double.parseDouble(arr2[i]);

    }

    for (int i = 0; i < a3.length; i++) {

    a3[i]=Double.parseDouble(arr3[i]);

    }

    for (int i = 0; i < a4.length; i++) {

    a4[i]=Double.parseDouble(arr4[i]);

    }

    System.out.print(a4[2]);

    int roadInfo[][] = new int[4][3];

    for(int j=0;j<2;j++){

    roadInfo[0][j]=(int) a1[j];

    }

    for(int j=0;j<2;j++){

    roadInfo[1][j]=(int) a2[j];

    }

    for(int j=0;j<2;j++){

    roadInfo[2][j]=(int) a3[j];

    }

    for(int j=0;j<2;j++){

    roadInfo[3][j]=(int) a4[j];

    }

    int k=roadInfo[2][3];

    System.out.print(roadInfo[2][2]);

    }

    展开全文
  • 小明在学到二维数组时,尝试写了一段给二维数组赋值的代码,他发现一个奇怪的现象:交换赋值顺序,效率是不同的。交换赋值顺序,效率是不同的请看下面这两段C语言代码:版本 1int test1 (){ int i,j; static int x...

    学习C语言最有效的方法就是多做实验,很多初学者深知这一点。小明在学到二维数组时,尝试写了一段给二维数组赋值的代码,他发现一个奇怪的现象:交换赋值顺序,效率是不同的。

    dd471260133d0cd4359582685f1047f1.png

    交换赋值顺序,效率是不同的

    请看下面这两段C语言代码:

    版本 1

    int test1 (){ int i,j; static int x[4000][4000]; for (i = 0; i < 4000; i++) { for (j = 0; j < 4000; j++) { x[j][i] = i + j; } } return 0;}

    版本 2

    int test2 (){ int i,j; static int x[4000][4000]; for (j = 0; j < 4000; j++) { for (i = 0; i < 4000; i++) { x[j][i] = i + j; } } return 0;}
    aa9315d03d03f37825042f9e0f23e26d.png

    唯一的不同点在于交换了 i 和 j 变量

    这两个版本的C语言代码几乎完全相同,唯一的不同点在于交换了 i 和 j 变量,但是编译成C语言程序执行后,消耗的时间却是不同的,这是怎么回事呢?

    解析

    可能有读者认为这两段C语言代码产生效率上的差异,是因为编译器处理这两段代码时,产生的指令不同。其实不是的,这两段“对称”的C语言代码产生的指令是一致的,请看:

    15d222385d2a107b3602a01314f7cf15.png

    test1() 函数对应的汇编代码

    上图是 test1() 函数对应的汇编代码,下图是 test2() 函数对应的汇编代码。

    d9ad9044c2a92d9e78378b4262dc54d5.png

    test2() 函数对应的汇编代码

    仔细对比 test1() 和 test2() 对应的指令,我们很难发现二者有什么不同。事实上,二者运行的效率差异主要来自于“缓存命中率”。简单来说,就是连续操作C语言中的多维数组的最后一个维度最快,因此 test1() 中的赋值操作几乎每次都会错过缓存,而 test2() 中的赋值操作缓存命中率更高一些,因此 test2() 执行所消耗的时间更少。

    在很多C语言初学者的脑海里,二维数组各个元素在内存中的分布可能是下面这样的:

    4fa5539e8a589a642585d35d65417d10.png

    二维数组各个元素在内存中的分布

    但是计算机中的内存地址始终是一维的,因此在计算机眼中,二维数组仍然是按照一维排列的:

    bc9de2ef2d09ee7585a28a923ac8533f.png

    二维数组仍然是按照一维排列的

    test2() 中的赋值操作先遍历第二维,这一过程是下图这样的:

    24b388c9812d71ae0f815236f9c4d552.png

    这一过程是下图这样的

    此时C语言程序每次访问数组元素,在内存中都是顺序进行的,这对于缓存命中率的提升很有帮助。再来看 test1() 中的赋值操作,它优先遍历第一维,因此访问数组元素的过程是下图这样的:

    56e7c404004774068146b30adffaa572.png

    访问数组元素的过程是下图这样的

    显然,此时C语言程序访问数组元素在内存中是“跳跃式”的,但是,计算机访问内存各个地址的效率不是都一样的吗?那为什么 test1() 和 test2() 的效率不同呢?

    答案就是 test1() 和 test2() 的缓存命中率不同。计算机 CPU 一般都有更加高速的缓存(称为“缓存线(cache line)”,常是 64 字节),访问这一缓存的速度比访问内存的速度要高的多(读者可以对比想象计算机访问内存的速度比访问硬盘数据的速度快得多)。

    小明的C语言代码中赋值的元素是 int 型的(常常是 4 字节),因此 64 字节的缓存线可以容纳 16 个连续的整数,CPU 访问这 16 个数据要比访问内存里的 16 个数据快得多,并且 CPU 在加载缓存线数据的时间内,能处理相当多的工作。

    5e851c1a8e992dd7b9502ccc349bd1a3.png

    CPU 在加载缓存线数据的时间内,能处理相当多的工作

    CPU 在处理 test2() 中的赋值时,可以获取 16 个连续的整数块,然后赋值给数组,重复 4000*4000/16次,这样的操作在缓存线的支持下相当快,因为 CPU 没有被闲置,总是在处理事务。

    再考虑 test1() 中的赋值,缓存线加载了 16 个整数块,但是接着值修改了其中一个整数,因此它需要重复 4000*4000 次,相比于 test2() 中的赋值,需要 16 倍的内存“回迁”次数。而 CPU 实际上需要花时间坐着干等内存操作完成,因此 test1() 的效率要低一些。

    小结

    本节主要讨论了一个看似“灵异”的C语言二维数组赋值问题,这无关指令差异,更多的是缓存命中差异带来的效率差异。但是读者应该明白,并不是所有的计算机程序都如此,例如 Fortran 语言中,test1() 中的赋值效率要高于 test2() 中的赋值效率,因为它将二维数组在内存中展开时,是按照“列”优先排列的(C语言是按“行”优先排列的)。

    ac624cff92275c94305528dedef7b83a.png

    点个赞再走吧

    欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

    未经许可,禁止转载。

    展开全文
  • 今天小编就为大家分享一篇解决Python二维数组赋值问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 【题目描述】在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数...
  • 动态二维数组赋值一开始是不是觉得很简单的事情,但是你是不是来百度了,是不是。。这也没什么的,程序员天天在解决bug,哪有时间去学习基本知识需求:根据json解析过来的数据,赋值给二维数据private String[][] ...
  • 易语言源码易语言学习进阶二维数组赋值源码.rar
  • 主要介绍了PHP简单实现二维数组赋值与遍历功能,涉及php数组的简单赋值、遍历、运算、读取等操作使用技巧,需要的朋友可以参考下
  • 二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。1.1 举例与思路:...
  • 下面我们就向大家介绍关于PHP二维数组赋值的相关概念。PHP本身是一种简单而强大的语言。PHP语言拥有核心特性如强大的字符串和数组处理能力,同时极大的改进了对面向对象编程的支持(PHP5以上版本)。通过使用标准的和...
  • public class test { ... // 学会二维数组的定义,初始化,循环赋值 // 用第一种方法定义二维数组 int intArray[][]; // 用第二种方法定义二维数组 int[] intArray1[]; // 用第三种方法定义二维数...
  • 用fill给二维数组赋值

    2020-02-19 15:57:35
    #用fill函数给一维赋值: int num[maxn]; fill(num,num+maxn,-1);...#用fill给二维数组赋值: int num[maxn][maxn]; fill(num[0],num[0]+maxn*maxn,-1); //值得注意的是,给二维数组赋值时,首地址必须写num[0]。 ...
  • JS二维数组赋值问题

    2021-03-21 12:50:36
    此时在给二维数组赋值时使用如下代码: list[2][1] = 2 看下赋值结束后的打印结果: 未达到预期。 ES6解析 我们看下阮一峰在es6中对fill的定义: 理解 这样就不难理解,当我们在fill时,虽然进行了new Array,但...
  • 简述数组是每个编程语言的最常用的数据结构之一,二维数组应用场景比较广泛,其赋值方式比普通的数组要复杂一些。静态初始化并赋值//二维数组 静态初始化 int[][] data = new int[][] { { 1, 2 }, { 2, 3 }, { 2, 3,...
  • 本篇文章介绍如何使用【二维数组赋值】,仅是对自己学习的记录,并没有深入分析每个模块。感谢支持! 代码 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = ...
  • 1.3 二维数组(B) 1.3.1 二维数组基础 二维数组就是数组的数组,数组的元素也是数组。 二维数组表示行列二维结构。 1.3.2 二维数组的声明 根据二维数组的定义 此时arr = new int[3][];只分配了二维数组的空间,一维...
  • P89 给二维数组赋值 2020-03-20 12:27:11 一个私人书柜有3层2列,分别向该书柜第1层1列放入历史类读物,向该书柜第二层第一例放入经济类读物,向第二层第二列放入现代科学读物.初始化一个二维数组,并为相应的数组元素...
  • 需要在程序中使用二维数组,网上找到一种这样的用法: #创建一个宽度为3,高度为4的数组#[[0,0,0],# [0,0,0],# [0,0,0],# [0,0,0]]myList = [[0] * 3] * 4但是当操作myList[0][1] = 1时,发现整个第二列都被赋值,...
  • 我今天碰到一道出乎我以前理解的问题: ...可为什么我辅助的时候采用以下这样的形式没法给二维数组赋值呢?还请大佬指点,不甚感激。 ``` int a[2][3]; for(int i=0;i;i++) scanf("%d",&a[i]); ```

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,875
精华内容 1,550
关键字:

二维数组赋值