Ⅰ 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;
}
}