JAVA中关于把数组作为参数传递的问题,在线等

时间:2021-09-01 21:26:31
首先我定义了一个函数,该函数的作用是返回两个数组中相同元素所占的比例,我要传入的参数为2个字符串数组。
当我这样定义两个数组时,可以正确返回结果:是这样调用的:x=cut.percentOfNeg(cutWordResult, negWords);

String [] cutWordResult={"你好","刚才","收到","的","手机","不喜欢"};
String []negWords ={"不喜欢","高兴","很好","真的","不错","的"};

但是当我这样用时,结果全是0.0,我还是这样调用的x=cut.percentOfNeg(cutWordResult, negWords);

//下面这条语句是调用cut对象的readNegWords方法,该方法的返回值是一个字符串数组。,然后复制给negWords
String []negWords=cut.readNegWords("D:/workspace/Percent1/negative_simplified.txt");
String [] cutWordResult={"你好","刚才","收到","的","手机","不喜欢"};
此时的返回结果是0.0,但是我能打印出negWords这个数组内的元素,并且他和第二个数组时有相同元素的,可结果却不对,谁能告诉我原因呢?

11 个解决方案

#1


你打印下negWords这个数组的长度看看

#2


能打印出来,是5000多行

#3


贴下相除的代码看看,1/1000如果不转型的得的结果就是0

#4


相除的代码我转型了:
return((float)num/cutWordResult.length);结果全是0.0
如果是
return((float)++num/cutWordResult.length);结果是1/数组长度;

好像说明num的值为0;但我比较果2个数组,里面是有相同的字符串的

#5


你把是一样的打印出来看看吧?有时候肉眼看的是一样的,但其实不一样比如会多个什么回车什么换行的字符

#6


public int percentOfNeg(String []cutWordResult,String []negWords){

int num=0;
for(int j=0;j<cutWordResult.length;j++)
{
 for(int k=0;k<negWords.length;k++)
 {
 
 if(cutWordResult[j]==(negWords[k]))
  {
        
         num++;
         break;
  
  }
         
      }
 
}  
return(num);

打印出来的这个num值也为0;
我所比较的数组,第一个是通过按行(一行为一个字符串,比如喜欢)读取文本文件,先把每一行添加到lis集合中,然后得到List的size,这样在逐一把list中的内容复制到数组中
第二个是通过split函数,按空格分割形成的数组。因为里面的数据形式是这样的:你好 今天 没 发现 什么 优点

#7


我知道了,肯定第一个数组中多了回车换行符,但我该怎么把它去掉呢

#8


Pattern p = Pattern.compile("\t|\r|\n"); 
试试看

#9


/读取负性情感词文件,把结果存放到negWords字符串数组中-----------------------------------------------------------------------------
public String [] readNegWords (String path)
{
Pattern p = Pattern.compile("\t|\r|\n");  

File file = new File(path);
List list = new ArrayList();
String[] negWords = null;
try{
 BufferedReader br = new BufferedReader(new FileReader(file));
 String line=null;
 while((line = br.readLine()) != null)
 {
    list.add(line);//因为不知道有几行数据,所以先存入list集合中

 }
 br.close();
 }
 
catch (IOException e)
{
    e.printStackTrace();
}
negWords=new String[list.size()];
for(int i=0;i<list.size();i++)
{
 String s=(String)list.get(i);
 Matcher m = p.matcher(s);
 String after = m.replaceAll("");


negWords[i]=after;

 
}
return negWords;

}

我把这个数组这样处理了,可结果还是0

#10


文件只放二三个词,一步步的跟吧,代码貌似没问题

#11


你加我QQ:657614925,我把我的程序给你,你帮我调试调试可以吗?这个问题困扰我好久了

#1


你打印下negWords这个数组的长度看看

#2


能打印出来,是5000多行

#3


贴下相除的代码看看,1/1000如果不转型的得的结果就是0

#4


相除的代码我转型了:
return((float)num/cutWordResult.length);结果全是0.0
如果是
return((float)++num/cutWordResult.length);结果是1/数组长度;

好像说明num的值为0;但我比较果2个数组,里面是有相同的字符串的

#5


你把是一样的打印出来看看吧?有时候肉眼看的是一样的,但其实不一样比如会多个什么回车什么换行的字符

#6


public int percentOfNeg(String []cutWordResult,String []negWords){

int num=0;
for(int j=0;j<cutWordResult.length;j++)
{
 for(int k=0;k<negWords.length;k++)
 {
 
 if(cutWordResult[j]==(negWords[k]))
  {
        
         num++;
         break;
  
  }
         
      }
 
}  
return(num);

打印出来的这个num值也为0;
我所比较的数组,第一个是通过按行(一行为一个字符串,比如喜欢)读取文本文件,先把每一行添加到lis集合中,然后得到List的size,这样在逐一把list中的内容复制到数组中
第二个是通过split函数,按空格分割形成的数组。因为里面的数据形式是这样的:你好 今天 没 发现 什么 优点

#7


我知道了,肯定第一个数组中多了回车换行符,但我该怎么把它去掉呢

#8


Pattern p = Pattern.compile("\t|\r|\n"); 
试试看

#9


/读取负性情感词文件,把结果存放到negWords字符串数组中-----------------------------------------------------------------------------
public String [] readNegWords (String path)
{
Pattern p = Pattern.compile("\t|\r|\n");  

File file = new File(path);
List list = new ArrayList();
String[] negWords = null;
try{
 BufferedReader br = new BufferedReader(new FileReader(file));
 String line=null;
 while((line = br.readLine()) != null)
 {
    list.add(line);//因为不知道有几行数据,所以先存入list集合中

 }
 br.close();
 }
 
catch (IOException e)
{
    e.printStackTrace();
}
negWords=new String[list.size()];
for(int i=0;i<list.size();i++)
{
 String s=(String)list.get(i);
 Matcher m = p.matcher(s);
 String after = m.replaceAll("");


negWords[i]=after;

 
}
return negWords;

}

我把这个数组这样处理了,可结果还是0

#10


文件只放二三个词,一步步的跟吧,代码貌似没问题

#11


你加我QQ:657614925,我把我的程序给你,你帮我调试调试可以吗?这个问题困扰我好久了