向初学者解释如何在该方法中使用ArrayList和数组

问题描述 投票:0回答:1

我的问题涉及我在学习 Java 时所做的练习中的一种方法。我明白该程序应该做什么(一种方法确定数字是否为素数,另一种方法仅存储数组中的素数。我明白了。

我也了解数组和数组列表有何不同。我也知道什么是方法。但由于某种原因,我无法理解这两行放在一起时发生的事情。

public ArrayList<Integer> onlyPrimes(int[] numbers) {
ArrayList<Integer> primes = new ArrayList<Integer>();

这就像将 arrayList 与方法合并并使用数组作为参数。有人可以用一个“非常简单的例子/解释”来向初学者解释这里发生的事情吗?我不明白这一切是如何运作的。 非常感谢专业人士的帮助!

public boolean isPrime(int number) { if (number==2) { return true; } else if (number<2) { return false; } for(int i=2;i<number;i++) { if(number % i==0) { return false; } } return true; } public ArrayList<Integer> onlyPrimes(int[] numbers) { ArrayList<Integer> primes = new ArrayList<Integer>(); for (int number : numbers) { if (isPrime(number)) { primes.add(number); } } return primes; } public static void main(String[] args) { PrimeDirective pd = new PrimeDirective(); int[] numbers = {6, 29, 28, 33, 11, 100, 101, 43, 89}; System.out.println(pd.isPrime(7)); System.out.println(pd.isPrime(28)); System.out.println(pd.isPrime(2)); System.out.println(pd.isPrime(0)); System.out.println(pd.onlyPrimes(numbers)); }

}

java arrays arraylist methods
1个回答
1
投票
我无法理解这两行代码发生了什么

我能理解你的困惑。这两行内容发生了很多事情。

第一行定义了

方法

签名。该方法的名称为 onlyPrimes。此方法将返回对

object
reference,即 ArrayList 类的实例(或返回
null
)。 
ArrayList
对象将包含零个、一个或多个元素,每个元素都是对
Integer
类的对象的引用。当程序员调用这个
onlyPrimes
方法时,她将传递一个原始
[]
值的数组 (
int
)。在我们的
onlyPrimes
方法体内,这个传递的数组将被称为
numbers
下一行是我们名为 

onlyPrimes

的方法主体中的第一行。请注意我如何更正您的缩进,以明确 (a) 方法的声明和 (b) 该方法的主体之间的关系。

{
大括号标记声明方法体的开始。
方法体的第一行声明了一个名为 

primes

的对象引用变量。该变量应保存对类

ArrayList
的实例的引用。该实例是
Integer
类的对象集合。 EQUALS 符号将对象引用分配给我们的变量
primes
EQUALS 符号后面的代码实例化一个新集合,即类 

ArrayList

的对象。该集合是空的,不包含任何元素,但能够保存对

Integer
类的对象的引用。实例化返回对新集合对象的引用。该引用被分配为我们以名称
primes
声明的对象引用变量的内容。

我建议您学习一个更简单的教程,该教程将介绍此代码的各个部分。一个不错的起点是 Oracle 公司免费提供的

Java 教程。另一个优秀的教程是 Head First Java,第 3 版 作者:Kathy Sierra、Bert Bates、Trisha Gee

我会对该代码进行一些更改。

我会将方法参数标记为

final

,以确保在方法主体中没有其他引用分配给

numbers
我们不需要在第二行重复 

Integer

作为列表的类型。现代 Java 中的编译器可以推断出该类型。所以只需使用

<>
通常最好使用提供所需功能的尽可能最高的超类或超接口。 

ArrayList

的超级接口是

List
。在 Java 21 及更高版本中,更高的超级接口是 
SequencedCollection
(请参阅 
JEP 431
)。 我是认为通常最好返回“不可修改的集合”的人之一。因此,在填充

ArrayList

后,我将通过调用 List

 生成一个新的不可修改的 
List.copyOf
我会让代码文本呼吸,添加一些空格字符。这种挤在一起的风格是一种历史文物,可以追溯到 80 列
打孔卡

终端

时代。 public SequencedCollection < Integer > onlyPrimes( final int[] numbers ) { SequencedCollection < Integer > primes = new ArrayList<>(); … return List.copyOf( primes ) ; }

© www.soinside.com 2019 - 2024. All rights reserved.