java 找到二维数组指定元素的位置

这个是代码编译时没有问题运行出错。主要功能是首先将txt格式文本导入二维数组,然后在二维数组中查找指定元素的行号和列号。运行结果出错显示为:importjava.util... 这个是代码 编译时没有问题 运行出错。
主要功能是首先将txt格式文本导入二维数组,然后在二维数组中查找指定元素的行号和列号。
运行结果出错显示为:

import java.util.*;
import java.io.*;
public class ReaderFile
{
public static void main(String[] args)
{
ReaderFile rf=new ReaderFile();
String ss[][]=rf.getArray("e:/1.txt");//文件路径
System.out.println(find(ss, "价位"));

}
public static int find(String[][] ss,String str){
boolean flag=false;
for (int i = 0; i < ss.length; i++) {
for (int j = 0; j < ss[i].length; j++) {
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("\r\n");
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;
}
}
展开
 我来答
p6631035
推荐于2017-09-21 · TA获得超过186个赞
知道小有建树答主
回答量:136
采纳率:0%
帮助的人:103万
展开全部
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;
}
}
追问
哇,太帅了!!!!!编译没有错误,但是为什么返回的值不对,我再看看
实诚又灵活灬比目鱼n
2014-12-31 · TA获得超过102个赞
知道小有建树答主
回答量:97
采纳率:0%
帮助的人:63万
展开全部
if (ss[i][j].equals(str)) 这一行报空指针异常,ss[0][1]==null
追问
嗯,好像是这样的。。。代码该如何修改呢???怎样把txt导入的数组初始化给ss
感恩。。。。

String ss[][]=rf.getArray("e:/1.txt"); 不能算初始化吧????怎样修改??
追答
把这一行改成 if(ss[i][j] != null && ss[i][j].equals(str))。意思是数组不是空并且数组元素的值等于str这个值时候才让程序进入flag = true;
System.out.print(i + 1 + "\t");
System.out.println(j + 1);的执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sbfivwsll
2014-12-31 · 超过25用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:43万
展开全部
if (ss[i][j].equals(str)) {
这里ss[i][j]为null,你看你的读方法 是不是哪出错了,调试一下。
更多追问追答
追问

追答
String [][] x=new String [15][15];
这里定义得太大了,你实际的内容没有15行,15列……
用数组 不好处理 ,在if判断这里规避吧……
if (str!=null && str.equals(ss[i][j])) {
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式