2017-10-14 8 views
0

2つのリストを取り、2番目の配列のすべての要素が最初の配列アレイ。しかし、このコードは、サイズが等しい2つの配列(例えば{1,2,3}、{3,2,1}がtrueを返す)に対してのみ機能しますが、最初の配列が2番目の配列より大きい場合はrangeCheck例外公正であることを完全に期待していた)。ArrayListが別のArrayList内に含まれていて、両方のリストが異なるサイズのものであるかどうかを確認する方法

import java.util.*; 

public class Ex8 { 
    public static void main(String[] args) { 
     Scanner scanner = new Scanner(System.in); 
     System.out.println("How many numbers do you wish to enter into the 
array?"); 
     int thisMany = scanner.nextInt(); 
     ArrayList<Integer> numbers = new ArrayList<Integer>(); 
     System.out.println("Please enter some numbers, separated by 
spaces"); 
     for(int i = 0; i<thisMany; i++) { 
      int x = scanner.nextInt(); 
      numbers.add(x); 
     } 
     Scanner sc = new Scanner(System.in); 
     System.out.println("How many numbers do you wish to enter into the 
second array?"); 
     int nowThisMany = sc.nextInt(); 
     ArrayList<Integer> numbers2 = new ArrayList<Integer>(); 
     System.out.println("Enter some numbers, separated by spaces"); 
     for(int j = 0; j<nowThisMany; j++) { 
      int y = sc.nextInt(); 
      numbers2.add(y); 
     } 
     System.out.println(Arrays.toString(numbers.toArray())); 
     System.out.println(Arrays.toString(numbers2.toArray())); 
     isContained(numbers, numbers2); 
     System.out.println(isContained(numbers, numbers2)); 
    } 

    public static boolean isContained(ArrayList<Integer> numbers, 
ArrayList<Integer> numbers2) { 
     boolean equalsTest = false; 
     for(int i = 0; i<numbers.size(); i++) { //This gives exception if 
//both arrays aren't the same size 
      if(numbers.get(i) == numbers2.get(i)) { 
       equalsTest = true; 
      } 
     } 
     return equalsTest; 
    } 
} 

どのように私は例外に実行することなく、最初の配列に対して2番目の配列を確認することができますか?ありがとう

+2

'ブールコレクション、 偽であります.containsAll(コレクション c); ' – davidxxx

答えて

0

{1、2、3}と{3,2,1}があなたの現在のコードを使って真を返した場合、私は驚くでしょう。 numbers2のすべてのアイテムがnumbersにあることを確認しているので、numbers2を繰り返し、各アイテムがnumbersであることを確認してください。

public static boolean isContained(ArrayList<Integer> numbers, 
     ArrayList<Integer> numbers2) { 
    outer: 
    for(int i = 0; i<numbers2.size(); i++) { 
     for(int j = 0; j<numbers.size(); j++){ 
      if(numbers2.get(i) == numbers.get(j)){ 
       continue outer; 
     return false; 
    return true; 
0

どのアレイが大きいかをチェックしないため、例外が発生します。このようなステートメント場合は、追加する可能性があります。

public static boolean isContained(ArrayList<Integer> numbers, 
ArrayList<Integer> numbers2) { 
    boolean equalsTest = false; 
    if(numbers.size() > numbers2.size()){ 
     for(int i = 0; i<numbers.size(); i++) { 
      if(numbers.get(i) == numbers2.get(i)) { 
       public static boolean isContained(ArrayList<Integer> numbers, ArrayList<Integer> numbers2) { 
        boolean equalsTest = false; 
        for(int i = 0; i<numbers.size(); i++) { 
         if(numbers.get(i) == numbers2.get(i)) { 
         equalsTest = true; 
         } 
        } 
        return equalsTest; 
       }  
       equalsTest = true; 
      } 
     } 
     return equalsTest; 
    } 
    else ;// Here add a logic of checking if the second list is larger 
} 
0

しばしば助けを求めるの場合と同様に、私は解決策が質問を投稿した後、あなたにいくつかの瞬間が来ることを見つけます。

いずれにせよ、私はint jを使ってネストされたforループで問題を解決して、2番目のリストを調べました。

public static boolean isContained(ArrayList<Integer> numbers, 
ArrayList<Integer> numbers2) { 
     boolean equalsTest = false; 
     for(int i = 0; i<=numbers.size()-1; i++) { 
      for(int j = 0; j<=numbers2.size()-1; j++) { //This second for loop goes through the elements of the second List separately without causing an exceptoion 
       if(numbers.get(i) == numbers2.get(j)) { 
        equalsTest = true; 
        break; 
       } 
      } 
     } 
     return equalsTest; 
} 
0

あなたのコードに問題がラインで発生する:

if(numbers.get(i) == numbers2.get(i)) { 

は、サイズが等しくないときは、この操作を行うことができないことを考えてみて、原因これは私が私のisContained方法で使用されるコードでありますあなたの最初の配列は、5 elemntsと二番目の配列が含まれている2 elemantsが含まれているあなたはnumbers2はその要素を持っていない

if(numbers.get(3) == numbers2.get(3)) { 

を比較しようとしている場合があります、あなたがエラーを取得なぜあなたは配列が簡単な方法は

boolean Collection.containsAll(Collection<?> c); 

を使用しているが、あなたは必ず以下の点を検討している作り、独自のコードを記述しようとしている場合は別のものを含んで確認したい場合には、 です、あなたのコードを更新してください:

  • アレイのサイズを考えれば、大きなアレイの中でより小さなアレイ を検索する必要があります!小さなサイズの配列の各要素について
  • 、大きな配列は、それが含まれている場合は、大規模な 配列の要素の次の1(小さな配列の次の要素)のために行くを見つけた場合、チェック、
  • かの小さな配列の要素あなたはfalseを返すと小さな配列のすべての要素は、大規模な配列 答えが真であるに設立されている場合
  • 他の人を探して無視することができますので、大規模な配列では見られない結果が
関連する問題