从方法访问ArrayList的不同方法有哪些?

时间:2018-04-06 23:54:06

标签: java arraylist functional-programming encapsulation

我正在做一些家庭作业程序,我需要尽可能使用函数式编程原理来完成Java的工作。这些是接收数字列表并打印偶数列表的程序的重要部分:

   public static void main( String args[ ] )
   {
      ArrayList<Double> listEven = new ArrayList<Double>();
      inputRecursion( );
      outputRecursion( );
   }

   public static void inputRecursion( )
   {
      Scanner in = new Scanner( System.in );
      if( in.hasNextDouble() )
      {
         if( (in.nextDouble() % 2) == 0 )
         {
            listEven.add( in.nextDouble() );
         }
         inputRecursion( );
      }
   }

   public static void outputRecursion( )
   {
      Iterator<Double> it = listEven.iterator();

      if( it.hasNext() )
      {
         System.out.println( it.next() );
         outputRecursion( );
      }
   }

这是一项正在进行的工作,但我没有运行它并检查逻辑,因为我仍然有两行编译错误:

listEven.add( in.nextDouble() );
Iterator<Double> it = listEven.iterator();

这两行抛出“找不到符号”,我知道这是因为ArrayList的声明方式使得main之外的方法无法访问。我对解决这个问题的方法有了大致的了解。我知道有关setter和getter的内容,它们看起来很简单,但我认为那些是最后一个资源,因为我试图避免使用变量(我知道我的程序有其他可变的东西;我正在工作在它上面)为了尽可能地满足锻炼的限制。我也知道我可以将它公开为静态,但是这会导致出现15个以上的错误,并且从我查看它需要“初始化”并且它还涉及变量。

还有其他方法可以从这两种方法访问ArrayList吗?我特别感兴趣的是那些不涉及变量或迭代的方法。

1 个答案:

答案 0 :(得分:0)

ArrayList声明为静态但在主函数之外,如下所示:

   static ArrayList<Double> listEven = new ArrayList<Double>();

   public static void main( String args[ ] )
   {
      inputRecursion( );
      outputRecursion( );
   }

   public static void inputRecursion( )
   {
      Scanner in = new Scanner( System.in );
      if( in.hasNextDouble() )
      {
         if( (in.nextDouble() % 2) == 0 )
         {
            listEven.add( in.nextDouble() );
         }
         inputRecursion( );
      }
   }

   public static void outputRecursion( )
   {
      Iterator<Double> it = listEven.iterator();

      if( it.hasNext() )
      {
         System.out.println( it.next() );
         outputRecursion( );
      }
   }