当前位置: 首页 > 知识库问答 >
问题:

Java中的arrayList.get()函数要求索引使用int而不是所需的long

严天逸
2023-03-14
    import java.util.ArrayList;

public class LargestPrimeFactor {
    private static long maxNum;

    public LargestPrimeFactor(long maxNum) {
        LargestPrimeFactor.maxNum = maxNum;
        ArrayList<Long> listOfPrimes = new ArrayList<>();
        listOfPrimes.add(2L);
        for (long i = 3; i < maxNum/2; i++) {
            if (i % 2 == 1 && isPrime(i)) {
                listOfPrimes.add(i);
            }
        }
//        for (long i = 0; i < listOfPrimes.size(); i++) {
//            System.out.println(listOfPrimes.get((int) i));
//        }
        for (long i = listOfPrimes.size() -1; i > -1; i--) {
            if (maxNum % (long)listOfPrimes.get(i) == 0) {
                System.out.println("Max Prime Factor is: " + listOfPrimes.get(i));
                break;
            }
//            System.out.println(listOfPrimes.get((int) i));
        }

    }

    private boolean isPrime(long num) {
        for (long i = 2; i < num; i++ ) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
}

共有1个答案

卫建义
2023-03-14

在这个循环中

for (long i = listOfPrimes.size() - 1; i >= 0; i--) {
    if (maxNum % ((long) listOfPrimes.get(i)) == 0) {
        System.out.println("Max Prime Factor is: " + listOfPrimes.get(i));
        break;
    }
}

您应该将i的类型从long更改为int。这并不是说listofprimes中的数字必须是int,它只是说listofprimes中的元素计数必须可以用一个32位有符号整数表示。

实际上,listofprimes.size()返回一个整数,而不是长的。在Java中,数组的长度总是由int指定。因此,数组不能容纳超过int所能容纳的元素。因此,ArrayList也不能容纳更多元素

 类似资料:
  • 伙计们,我正在写一个资源管理器,它可以管理不同类型的资源。资源可以是整数或一些自定义类型。所以,我定义了这样一个接口: 此接口的实现者之一管理“int”类型的资源。因为我做不到: 我最终做了: 注意:使用了“整数”而不是“整数”。 我有一段这样的代码: 函数internalToExternal()返回“int”而不是“Integer”。 问题:1.是否有从“int”到“Integer”的自动转换?

  • 随着时间的推移,我正在安装越来越多的python模块,我的站点包目录已经非常庞大。所以每次我打开pycharm时,我都要等大约15分钟(或者更久)才能完成索引。所以我的问题是:我如何指定我的项目需要的模块来索引,而不是索引我的整个python安装?

  • 我上了Java的课程,正在努力自学C和K 在Java中,您可以声明一个类似于公共静态浮点转换(int f)的函数,而不需要原型。这对我来说似乎简单得多。为什么会有差异?

  • 我有三个表在我的应用程序,把它们称为,,和。有字段为和,两者都有索引。有字段带索引,有字段带索引。 当我执行以下查询时: 它真的很慢(约1秒)。 当我执行以下查询时: 速度非常快(约20毫秒)。 据我所知,这些桌子大小差不多 关于这两个查询之间的巨大性能差异,有什么想法吗? 表大小: > tableA:2061392行 表B:175339行 TableC: 1888912行 postgresql-

  • 我明白分区键对于可伸缩性和数据存储方式很重要。但是如果我们考虑搜索,分区键是不是有点像额外的filter/where子句?所有文档都被索引,所以我可以执行查询,如下所示: 在使用此SQL查询语法时,我是否还应该指定分区键,或者指出如何允许跨分区查询?

  • 问题内容: 我们的MySql表有2500万行 以下是表中的列 以上我们在c_id,c_name,s_id,l_type,域列上具有正常索引 我打算在域,l_time,l_type列上添加复合索引。因此,现在我可以删除域上的单个索引了吗? 谢谢 问题答案: 复合索引的任何前缀也将单独用作索引。因此,如果您有一个复合索引,则相当于在和上都有索引。无需分别将这些索引分开,它们将是多余的并且浪费空间。 因