2017-06-08 8 views
-1

申し訳ありませんが、私ははっきりと説明していないかもしれません。これは私の動機ですarraylistから3の偶数と3の倍数を表示する方法

正の整数を入力します。入力が正でない場合、アルゴリズムはエラーメッセージを出力し、ユーザーに入力を促します。このプロセスは、入力が有効になるまでループし続ける必要があります。あなたのアルゴリズムは、入力が偶数で3の倍数であるかどうかを出力する必要があります。ソリューションでは、サブモジュールを適切に使用する必要があります。

私は、ユーザー入力から正の数を取得するメソッドを作成する必要があります。そして、このArrayListから偶数と3の倍数を表示する必要があります。私はそのためのコードを書いていますが、私はこのArrayListを表示するために別のサブモジュールを使用する方法に苦労しています。

import java.util.ArrayList; 
import java.util.*; 

public class Array { 

    public static void main(String[] args) 
    { 

     Scanner sc = new Scanner(System.in); 
     ArrayList<Integer> list; 
     list = new ArrayList<Integer>(); 
     int number = -1; 
     printList(list, number); 
     System.out.println("Enter number. Enter 0 to end."); 
     while (true) 
     { 
      System.out.print(" "); 
      number = sc.nextInt(); 

     while(number < 0) 
     { 
     System.out.print("Enter your next positive integer, or 0 to end: "); 
     number = sc.nextInt();  
     } 
     if (number == 0) 
       break; 
      list.add(number);    
     }  

    } 
     public static void printList (ArrayList<Integer> list, int number) 
     { 
      for(int i = 0;i <= number.size(); i++) 
      { 
      if(i % 2 ==0 && i % 3 ==0) 
      { 
       System.out.println(list(i)); 
      } 
      } 
     } 
    } 
+0

「***なるん何***ユーザーからの正の数は "残りの質問と関係がありますか? 1つの番号のみを要求する場合、リストは1つだけ長く、リストに3つの位置付けされた値の均等配置または複数の値がありません。 – Andreas

+1

何が問題なのですか? – Vihar

+0

コードがコンパイルされません!コンパイルエラーが問題の場合は、コンパイルエラーを質問に表示して質問してください。 – Andreas

答えて

1

私はあなたの問題を取得し[OK]を、あなたがリストを印刷することができないように見える、あなたはおそらく、あなただけのwhileループの後がprintlistを()&ペーストする必要があなたのコードの小さな

を変更する必要があります。

while (true) 
{ 
    System.out.print(" "); 
    number = sc.nextInt(); 

    while(number < 0) 
    { 
     System.out.print("Enter your next positive integer, or 0 to end: "); 
     number = sc.nextInt();  
    } 
    if (number == 0) 
     break; 
    list.add(number);    
} 
printList(list); 

とあなたがprintlist方法が正しくありません、それはこのことができます。この

public void printlist(List<Integer> numberList){ 
    for(int i = 0;i <= numberList.size(); i++) 
    { 
     if(i % 2 ==0 && i % 3 ==0) 
     { 
      System.out.println(numberList.get(i)); 
     } 
    } 
} 

希望のようにする必要があります! 幸運を祈る!

+0

まだ 'IndexOutOfBoundsException'があります。 – Andreas

+0

入力が正の**数値でなければならないので、 'while(number <0)'がエラーキャッチのために 'list.add()'がこの解決法に間違って置かれています。 **ネガティブ**(「ゼロ未満」)に該当します。 – XenoRo

+0

@ AlmightyRありがとう、整流 – Vihar

1
  1. がprintlist方法は、ループ
  2. 内から呼び出すことができますが、リストの大きさではなく、番号を確認する必要があります。

次のコードは、私はあなたがこの権利のように動作プログラムを探していると思う

public class Array { 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     ArrayList<Integer> list; 
     list = new ArrayList<Integer>(); 
     int number = -1; 
     System.out.println("Enter number. Enter 0 to end."); 
     while (true) { 
      System.out.print(" "); 
      number = sc.nextInt(); 

      while (number < 0) { 
       System.out.print("Enter your next positive integer, or 0 to end: "); 
       number = sc.nextInt(); 
      } 
      if (number == 0) { 
       sc.close(); 
       break; 
      } 
      list.add(number); 
      printList(list, number); // Moved the print here. 
     } 

    } 

    public static void printList(ArrayList<Integer> list, int number) { 
     for (int i = 0; i <= list.size(); i++) { // You have to get size on 
               // list. 
      if (i % 2 == 0 && i % 3 == 0) { // Are you planning to check the 
              // index or the content in the list 
              // ? 
       System.out.println(list.get(i)); // Get the number from list 
      } 
     } 
    } 
} 
+0

System.out.println(list.get(%私)); //リストから番号を取得する –

0

に役立ちます見てください?

public class Array { 

    public static void main(String... args) { 
     Scanner sc = new Scanner(System.in); 
     List<Integer> list = new ArrayList<>(); 
     int number; 
     do { 
      System.out.print("Enter a positive integer or 0 to end: "); 
      number = sc.nextInt(); 
      if (number > 0) { list.add(number); } 
     } while (number != 0); 

     for (int i = 0; i < list.size(); i++) { 
      int number = list.get(i); 
      if (number % 2 == 0 && number % 3 == 0) { 
       System.out.println(number); 
      } 
     } 
    } 
} 

起因IndexOutOfBoundException議論に、(あなたは、Java 8を使用している場合)このような、より安全で読みやすい方法であなたの番号を印刷するには考える:

list.stream().filter(num -> num % 2 == 0) 
      .filter(num -> num % 3 == 0) 
      .forEach(System.out::println); 
関連する問題