从方法访问 ArrayList 有哪些不同的方式?
What are the different ways of accessing an ArrayList from a method?
我正在编写一些家庭作业程序,我需要尽可能多地使用函数式编程原则来完成 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();
这两行抛出 "cannot find symbol",我知道这是因为 ArrayList 的声明方式使得 main 之外的方法无法访问 in。我对解决这个问题的方法有一个粗略的了解。我知道 setter 和 getter,从我的研究来看它们看起来很简单,但我认为这些是最后的资源,因为我试图避免使用变量(我知道我的程序有其他可变的东西;我正在工作上),以尽可能满足练习的限制。我也知道我可以使它 public 静态,但这会导致出现 15 个以上的错误,从我查找的内容来看,它需要 "initialized" 并且它还涉及变量。
是否有任何其他方法可以通过这两种方法访问 ArrayList?我对不涉及变量或迭代的方式特别感兴趣。
将 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( );
}
}
我正在编写一些家庭作业程序,我需要尽可能多地使用函数式编程原则来完成 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();
这两行抛出 "cannot find symbol",我知道这是因为 ArrayList 的声明方式使得 main 之外的方法无法访问 in。我对解决这个问题的方法有一个粗略的了解。我知道 setter 和 getter,从我的研究来看它们看起来很简单,但我认为这些是最后的资源,因为我试图避免使用变量(我知道我的程序有其他可变的东西;我正在工作上),以尽可能满足练习的限制。我也知道我可以使它 public 静态,但这会导致出现 15 个以上的错误,从我查找的内容来看,它需要 "initialized" 并且它还涉及变量。
是否有任何其他方法可以通过这两种方法访问 ArrayList?我对不涉及变量或迭代的方式特别感兴趣。
将 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( );
}
}