我正在做一些家庭作业程序,我需要尽可能使用函数式编程原理来完成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吗?我特别感兴趣的是那些不涉及变量或迭代的方法。
答案 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( );
}
}