2016-05-04 14 views
-1

リストのすべての要素が1桁の場合(つまり、< 10)、trueを返す関数のJava再帰実装の概要を説明しようとしています。リストに正の数値のみが含まれていると仮定できます。Arraylist and recursive implementation

ここに私が試したことはありますが、リストに2桁の数字があっても本当に戻ってきます。

import java.util。*;

パブリッククラスQ3B {

static boolean allSingleDigit(ArrayList list) { 
    if (list.size() == 0) 
     return false; 
    else { 
     int first = (Integer) list.get(0); 
     list.remove(0); 

     if (first < 10) 
      return true; 
     else 
      return allSingleDigit(list); 
    } 

} 

public static void main(String[] args) { 
    ArrayList<Integer> list = new ArrayList(); 
    Collections.addAll(list, 4, 25, 3, 2, 3, 1, 3); 
    boolean res1 = allSingleDigit(new ArrayList(list)); 
    System.out.println("List Contains all single number" + res1); 
} 

}

任意の提案の男?ありがとうございます。

答えて

5

ロジックを少しフリップして、配列に要素が残っていない場合にのみtrueを返すようにしたいと思うかもしれません。

static boolean allSingleDigit(ArrayList list) { 
if (list.size() == 0) 
    return true; 
else { 
    int first = (Integer) list.get(0); 
    list.remove(0); 

    if (first < 10) 
     return allSingleDigit(list); 
    else 
     return false 
} 
+0

ああwiat、それは今働いています。私は最初に真実に戻ることを忘れる。 –

+1

それは働く男です。 ありがとう –

2

あなたのプログラムが唯一の問題は、あなたが最初の要素>= 10に遭遇するとすぐにfalseを返し、リストのサイズが0ときtrueを返すべきである、罰金です。以下に示すように、それを変更します。

static boolean allSingleDigit(List<Integer> list) { 
    if (list.size() == 0) 
    return true; 

    int first = list.remove(0); 

    if (first == null || first >= 10) 
    return false; 
    else 
    return allSingleDigit(list); 

} 

あなたはそれを最適化し、一般的なListを使用して直接Listからremove()方法を使用して、それをより簡潔にすることができます。私はまた、逃したnullチェックを追加しました。

+0

iは \tにそれを変更した場合(第一> = 10) \t \t \tリターン偽。他 \t \t \t \t \t \t \tリターンallSingleDigit(リスト); \t \t 今私はいつもfalseになる... –

+0

申し訳ありませんが、私は最初の 'if'節を逃しました。それを更新しました。 –

+0

それはあまりにも働いています 助けてくれてありがとう –

0

私はこれがあなたが望む方法だと思います。

static boolean allSingleDigit(ArrayList list) { 
    if (list.size() == 0) 
     return true; 
    else { 
     int first = (Integer) list.get(0); 
     list.remove(0); 

     if (first >= 10) 
      return false; 
     else 
      return allSingleDigit(list); 
    } 

} 

私はあなたのコードを変更しました。