Как исправить ошибку индекса за пределами границ? - PullRequest
0 голосов
/ 13 апреля 2020

Итак, в основном я должен получить список строк, заполнить его двумя строками и сравнить их. Например, если одна строка «1,2,3,4», а вторая «7,6,2,8,1», то она должна вывести «1,2», потому что она печатает числа, которые похожи , Но я получаю исключение arrayindexoutofbounds и не могу понять, как это исправить. Кроме того, если у вас есть какие-либо советы по сокращению этого кода, пожалуйста, сообщите мне. У меня есть привычка делать мой код очень длинным.

import java.util.*;
public class Compare
{
 public static void main(String[]args)
 {
   ArrayList<String> hap=new ArrayList<String>();
   hap.add("1,7,8,2");
   hap.add("6,2,4,10,8");
  String ar1=hap.get(0);
   String ar2=hap.get(1);
   String[]arr1=new String[ar1.length()];
   String[]arr2=new String[ar2.length()];
   for(int i=0;i<ar1.length();i++)
   {
    if(ar1.charAt(i)!=(','))
    {
      arr1[i]=""+ar1.charAt(i);
    }
     }
   for(int i=0;i<ar2.length();i++)
   {
    if(ar2.charAt(i)!=(','))
    {
      arr2[i]=""+ar2.charAt(i);
    }
   }
   ArrayList<String> b=new ArrayList<String>();
   int ah=0;
   while(ah<arr1.length)
   {
    for(int i=0;i<arr2.length;i++)
    {
     if(arr1[ah]==arr2[i])           //error on this line
     {
       b.add(arr1[ah]);
     }
     ah++;
    }
   }
   for(int i=0;i<b.size();i++)
   {
     System.out.println(b.get(i));
   }
 }
}


1 Ответ

0 голосов
/ 13 апреля 2020

здесь вместо того, чтобы вручную создавать массивы из строки, вы можете использовать метод String.split(), чтобы разделить строку с помощью ,, это вернет новый массив. и вы получаете исключение, потому что длина arr1 меньше arr2. в то время как вы увеличиваете ah++ в arr2 l oop.

Приведенный ниже код исправит вашу проблему и уменьшит размер кода.

import java.util.*;
public class Main
{
    public static void main(String[] args) {
        ArrayList<String> hap=new ArrayList<String>();
   hap.add("1,7,8,2");
   hap.add("6,2,4,10,8");
  String ar1=hap.get(0);
   String ar2=hap.get(1);
   String[] arr1=ar1.split(",");
   String[] arr2=ar2.split(",");
   ArrayList<String> b=new ArrayList<String>();
   for(int j=0;j<arr1.length;j++)
   {
    for(int i=0;i<arr2.length;i++)
    {
     if(arr1[j].equals(arr2[i]))           //error on this line
     {
       b.add(arr1[j]);
     }
    }
   }
   for(int i=0;i<b.size();i++)
   {
     System.out.println(b.get(i));
   }
    }
}
...