Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何查找2D数组的行数和列数以存储介于0到1000之间的素数_Java_Arrays - Fatal编程技术网

Java 如何查找2D数组的行数和列数以存储介于0到1000之间的素数

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

取0-1000个数字的范围,找出该范围内的素数。将素数存储在二维数组中,第一个维度表示范围0-100、100-200,依此类推。而第二个维度代表这个范围内的素数

要在2d数组中存储,我们需要知道行数和列数..有人能帮我吗?…Integer[]由findPrimNumbers方法返回…但我必须在2d整数数组中存储素数。 这是我写的代码

 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)