Java 如何查找2D数组的行数和列数以存储介于0到1000之间的素数
取0-1000个数字的范围,找出该范围内的素数。将素数存储在二维数组中,第一个维度表示范围0-100、100-200,依此类推。而第二个维度代表这个范围内的素数 要在2d数组中存储,我们需要知道行数和列数..有人能帮我吗?…Integer[]由findPrimNumbers方法返回…但我必须在2d整数数组中存储素数。 这是我写的代码Java 如何查找2D数组的行数和列数以存储介于0到1000之间的素数,java,arrays,Java,Arrays,取0-1000个数字的范围,找出该范围内的素数。将素数存储在二维数组中,第一个维度表示范围0-100、100-200,依此类推。而第二个维度代表这个范围内的素数 要在2d数组中存储,我们需要知道行数和列数..有人能帮我吗?…Integer[]由findPrimNumbers方法返回…但我必须在2d整数数组中存储素数。 这是我写的代码 public class PrimeNmbers2D { public static boolean isPrime(int nu
public class PrimeNmbers2D
{
public static boolean isPrime(int number)
{
boolean status=true;
for(int n=0;n<=number;n++)
{
int count=0;
for(int i=1;i<=number;i++)
{
if(n%i==0)
{
count++;
}
}
if(count==2)
{
status=true;
}
}
return status;
}
public static Integer[] findPrimeNumbers(int start,int end)
{
ArrayList<Integer> primes=new ArrayList<>();
for(int from=start;from<=end;from++)
{
if(isPrime(from))
{
primes.add(from);
}
}
return primes.toArray( new Integer[primes.size()]);
}
public static void main(String[] args)
{
int[][] primeGroups=new int[10][];
for(int i=0;i<10;i++)
{
int start=0;
int end=100;
for(int j=0;j<10;j++)
{
primeGroups[i][j]=findPrimeNumbers(start, end);
}
start=end+1;
end=end+100;
}
}
}
公共类PrimeNmbers2D
{
公共静态布尔值iPrime(整数)
{
布尔状态=真;
对于(int n=0;n我认为您的方法isPrimeNum()应该返回一个布尔值,如果返回值为true,则将变量num添加到应该返回的数组中。
另一件事是,这部分代码是不必要的
ArrayList <Integer>intArr=isPrimeNum(num);
Object [] obj = intArr.toArray();
Integer[] intArray = (Integer[])obj;
但是我不完全理解你的代码的目的,如果你需要从0到1000的所有素数,为什么你需要一个输入?你应该有一个方法,用从0到1000的所有数填充一个数组,然后另一个方法迭代该数组,并将素数放入另一个数组中,我们调用它方法findPrimeNumbers()。方法findPrimeNumbers应接收包含所有数字的数组,并对每个数字调用isPrimeNum()方法,如果为true,则添加到返回数组中
希望能有所帮助。在阅读了Rafael Strack的答案后,我想我现在明白了
因此,您需要找到从0
到1000
的所有素数。然后将它们分组为0-100
,101-200
,201-300
这意味着您的结果是一个整数数组数组
int[][] primeGroups; // please excuse the name...
现在您必须初始化第一个维度:
int[][] primeGroups = new int[10][];
这是因为共有10组:
0 -> 0 - 100
1 -> 101 - 200
2 -> 201 - 300
3 -> 301 - 400
4 -> 401 - 500
5 -> 501 - 600
6 -> 601 - 700
7 -> 701 - 800
8 -> 801 - 900
9 -> 901 -1000
但是,您的primeGroups
仍然是“空的”。因此,使用Rafael Strack提供的解决方案,您可以实现您的isPrimeNum(int number)
并测试:
findPrimeNumbers(int from, int to){
ArrayList<Integer> primes = new ArrayList<>(); // arrays don't grow dynamically, so you need a list and convert it in the end to an array
for( ; from<to; from++){
if(isPrimeNum(from)){
primes.add(from);
}
}
// at this point you have all your prime numbers from "from" to "to" in the primes list
// now convert it and return it:
return primes.toArray(new Integer[primes.size()]); // ugly but it does the job
}
等等
编辑
您的代码中仍有一些“hick up”。以下是一些建议:
1您的isPrime(number)
方法的名称表明,您想知道number
是否为prime
。但是,您正在迭代从n=0
到n=number
的所有数字,并测试所有数字是否为prime。删除外部循环,它会给您留下如下结果:
int count=0;
for(int i=1; i<=number; i++){
...
}
return count==2; // shortcut: no need to return true or false - just return the result of your condition
3这就给您的main
方法带来了另外两个问题:
int start=0;
int end = 100;
需要在循环之外。否则在每次迭代时重新初始化它们(这将导致相同数字的10倍)
最后,您的findPrimeNumber(start,end)
已经返回了一个int[]
。因此您可以简单地将该结果放入primeGroups[i]
你可以这样读:
int[][] primeGroups = new int[10][]; // array of int arrays primegroups is a new array and can contain 10 arrays
primeGroups[i] = findPrimeNumbers(start, end); // primeGroups at index i is the result of findPrimeNumbers... (which is an array)
我希望这能有所帮助。你的问题是什么?你面临什么问题?“有人能帮我吗?”-是的,如果你能说明你的问题。如果我可以给你一些建议,你的代码是不必要的复杂,简化它。例如,变量名什么都不说。如果你只叫你的号码num
,那么你就记不起这个号码的用途了。你还有一个名为intArr
的列表和一个数组intArray
(哪个是哪个?)。我想说的是,不要缩写(除了索引变量,如I,j,k
)并明智地选择名称。还有一件事,当你调用一个方法时,你需要一个布尔值(是不是?)而不是一个列表。对不起,我帮不了你。我相信你会很快找到解决方案(列表是个好主意)@Amongalen我的问题是我必须找到介于0到1000之间的素数,并使用findPrimeNumbers()将所有素数存储在2d数组中。
您甚至不需要所有数字都在0到1000之间的数组。您可以添加两个参数:findPrimeNumbers(int-from,int-to)
然后创建for循环:for( ; from@Rafael斯特拉克,你的回答对我很有帮助。谢谢你的帮助。游戏机器人建议的方法更好!@drug你不需要知道第二维度的确切大小,它就像一个矩阵,你可以有相同大小的所有行,也可以有不同大小的行。使用游戏机器人的例子:int[][]primeGroups=new int[10][];primeGroups[0]=new int[10];primeGroups[1]=new int[5];@RafaelStrack是的……我已经这样做了,但是……findPrimeNumber();..返回整数数组,但..我们需要整数数组…要再次执行此操作,我们需要创建一个整数数组并从整数数组中存储元素…这将与我最初发布的代码相同…如果我wrong@drug啊,现在我想我明白了!你想把整数的数组列表转换成整数的数组吗?你可以这样做:数组List primes=findpromenumbers(0100);int[]arr=primes.stream().mapToInt(i->i.toArray()),你的答案对我很有用。谢谢你的帮助,但是要在二维数组中存储素数…我们需要知道行数和列数,对吗?你只初始化了第一个维度…第二个维度呢…我会很感激…如果你能解释这个findPrimeNumber(0100);//返回整数数组,但我们需要它作为int数组
int[] result = new int[primes.size()];
for(int i=0;i<primes.size();i++){
result[i] = primes.get(i);
}
return result;
int start=0;
int end = 100;
int[][] primeGroups = new int[10][]; // array of int arrays primegroups is a new array and can contain 10 arrays
primeGroups[i] = findPrimeNumbers(start, end); // primeGroups at index i is the result of findPrimeNumbers... (which is an array)