如何删除不包括0和1的素数,我想找到不包括0和1的素数?现在如果我有{0,1,3,5,8} ---- >在编译之后,它会找到0和1作为素数。“找到的素数= 0找到的素数=找到1个素数=找到3个素数= 5”这是我的程序: 谢谢你的帮助。
public static void main(String args[])
{
Scanner s=new Scanner(System.in);
int i,j,size;
boolean status;
System.out.print("Enter size of array=");
size=s.nextInt();
int arr[]=new int[size];
int tmp[]=new int[size];
System.out.println("Enter Elements in array...");
for(i=0;i<size;i++)
{
arr[i]=s.nextInt();
}
for( i=0;i<size;i++)
{
status=true;
for(j=2;j<arr[i]-1;j++)
{
if(arr[i]%j==0||(arr[i]==0)||arr[i]==1)
{
status=false;
tmp[i]=arr[i];
break;
}
}
if(status==true)
{
System.out.println("Prime Number Found="+arr[i]);
}
}
System.out.println("New Array....");
for(i=0;i<size;i++)
{
System.out.println(tmp[i]);
}
}
}
答案 0 :(得分:1)
您的代码充满了问题,但在下面的代码中我确实解决了以下主要问题:
main()
方法末尾打印的输出数组。请查看下面的代码,了解您可能要做的事情。
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
boolean status;
System.out.print("Enter size of array=");
int size = s.nextInt();
int arr[] = new int[size];
int tmp[] = new int[size];
System.out.println("Enter Elements in array...");
int primerCounter = 0;
for (int i=0; i < size; i++) {
arr[i] = s.nextInt();
}
for (int i=0; i < size; i++) {
status = true;
if (arr[i] == 0 || arr[i] == 1) {
status = false;
}
else {
for (int j=2; j <= arr[i]-1; j++) {
if (arr[i] % j ==0) {
status = false;
break;
}
}
}
if (status == true) {
tmp[primerCounter++] = arr[i];
System.out.println("Prime Number Found="+arr[i]);
}
}
System.out.println("New Array....");
for (int i=0; i < primerCounter; i++) {
System.out.println(tmp[i]);
}
}
对于0到20(含)的数字输入,我得到以下输出:
{2, 3, 5, 7, 11, 13, 17, 19}
答案 1 :(得分:0)
您的问题不是很清楚,但我假设您的问题是您发布的代码将0和1视为素数,而您并不想要这样。如果是这样的话。错误是检查
(arr[i]==0)||arr[i]==1)
在for循环中
for(j=2;j<arr[i]-1;j++)
实际上,当arr [i]等于0或1时,条件
j<arr[i]-1
将立即计算为false,因为j = 2并且arr [i] -1的计算结果为-1或0.因此,代码
if(arr[i]%j==0||(arr[i]==0)||arr[i]==1)
{
status=false;
tmp[i]=arr[i];
break;
}
永远不会执行,并且在以下循环中
status==true
将评估为真。
一种解决方案是删除支票
arr[i]==0)||arr[i]==1
从现在的位置开始,如果条件为
,则将其放在同一个位置status==true
更改== with!=。后
简而言之,
if(arr[i]%j==0||(arr[i]==0)||arr[i]==1)
{
status=false;
tmp[i]=arr[i];
break;
}
应该成为
if(arr[i]%j==0)
{
status=false;
tmp[i]=arr[i];
break;
}
和
if(status==true)
{
System.out.println("Prime Number Found="+arr[i]);
}
应该成为
if(status==true || arr[i]!=0 || arr[i]!=1)
{
System.out.println("Prime Number Found="+arr[i]);
}
您发布的代码中还有另一个错误:您使用相同的索引i迭代arr并选择要为其分配值的tmp元素。因为并非arr的每个元素都是素数,因此不会被复制到tmp,这会导致数组tmp带有一些&#34;空洞&#34;,即未分配的元素。您应该将不同的索引k初始化为0以访问tmp的元素并手动递增:
tmp[k]=arr[i];
k++;
而不是
tmp[i]=arr[i];
另外,当你最终迭代tmp时,请记住它的大小不会与arr相同,但是更小(因为我刚才解释过)。因此,
for(i=0;i<size;i++)
{
System.out.println(tmp[i]);
}
应替换为
for(i=0; i < actual-size-of-tmp; i++)
{
System.out.println(tmp[i]);
}