Ⅰ java的二维数组
a[0] = new int[2];
因为是二维的
所以a 是一个数组对象的数组引用(数组是对象)
a[0] 是一个整型数组的数组引用
a[0][0] 才是整型
所以上一句的意思是 给这个整型数组引用 分配一个整型数组
如果没那句
a[0]就是null
说得简单点,一维数组a[]的引用 a是一个对象引用,指向一个数组
二维的时候 第二维类似上面一维,而第一维指向的不是具体数据的数组,而是一个引用的数组 以此类推
三维的时候 第一维指向一个二维数组引用的数组 就像树一样,支上再长支,分叉,最后一级才是数据类型(叶子),其他的 都是指向引用的数组
好比,家庭里 人为基本数据类型 在家庭(一维数组,把每个人编号)
在村里,以家庭编号,
在镇上,以村编号, 而除了最低级别的 人,其他都是不同维数的数组
Ⅱ java 找到二维数组指定元素的位置
Scanner sn=new Scanner(new File(path)).useDelimiter("\r\n"); 这行代码的意思应该是指定分割符为“/r/n”吧,这个/r/n不一定是换行,用这个分割的数组元素全了空值,换个成这样吧
Scanner sn=new Scanner(new File(path)).useDelimiter([\\s]");
这样表示用空字符分割
还有find方法里的这行代码
if (ss[i][j].equals(str))
因ss[i][j]的值可能是空的,直接调用equals的话可能报空指针异常
所以equals前加个if 判断一下,如果是空就不用equals了
这是我改的代码
package com.jhc.cglib.test;
import java.util.*;
import java.io.*;
public class ReaderFile {
public static void main(String[] args) {
ReaderFile rf = new ReaderFile();
String ss[][] = rf.getArray("C:/Users/Administrator/Desktop/111.txt");// 文件路径
System.out.println(find(ss, "价位"));
}
public static int find(String[][] ss, String str) {
if(ss==null||ss.length==0)
return -1;
boolean flag = false;
for (int i = 0; i < ss.length; i++) {
for (int j = 0; j < ss[i].length; j++) {
if(ss[i][j]==null)
continue;
if (ss[i][j].equals(str)) {
flag = true;
System.out.print(i + 1 + "\t");
System.out.println(j + 1);
}
}
}
if (flag == false) {
return -1;
}
return -1;
}
public String[][] getArray(String path) {
String[][] x = new String[15][15];
try {
Scanner sn = new Scanner(new File(path)).useDelimiter("[\\s]");
int i = 0;
while (sn.hasNextLine()) {
String[] ss = sn.next().split(" ");
System.out.println(Arrays.toString(ss));
for (int j = 0; j < ss.length; j++) {
x[i][j] = ss[j];
}
++i;
}
} catch (Exception e) {
e.printStackTrace();
}
return x;
}
}