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;
}
} 展开
主要功能是首先将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;
}
} 展开
3个回答
展开全部
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;
}
}
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;
}
}
追问
哇,太帅了!!!!!编译没有错误,但是为什么返回的值不对,我再看看
展开全部
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);的执行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询