2017-07-16 155 views
-3

如何删除不包含0和1的素数,并且想要找到只包含0和1的素数?现在,如果我有{0,1,3, 5,8} ---->编译后它会发现0和1为素数。“找到的素数= 0素数找到= 1素数找到= 3素数找到= 5”这是我的程序: 谢谢您的帮助。从数组中删除素数-java

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]); 
     } 
    } 
} 
+1

什么是您的实际问题/问题被取代?您的代码似乎已经正确识别用户输入的素数。 –

+0

现在我有0和1作为素数,但我想排除0和1。我已经试过这一行:if(arr [i]%j == 0 ||(arr [i] == 0 )|| arr [i] == 1),但没有任何变化 – Invictus05

+0

这显然不起作用。如果数字是0或1,你是否试图考虑你的程序是否可以达到'if'?它显然不能。 – Tom

回答

1

你的代码是完全的问题,但在下面的代码我并解决以下主要问题:

  • 你不处理的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} 
0

你的问题不是很清楚,但我假设你的问题是,你的代码张贴认为0和1作为素数,你不想这样做。如果是这样的话。的错误是支票

是内for循环

for(j=2;j<arr[i]-1;j++)

事实上,当ARR [i]是等于0或1,条件

j<arr[i]-1 

将立即评估为假,因为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 

将评估为true。

一种解决方案是从那里现在是删除复

arr[i]==0)||arr[i]==1 

,并把它放在相同的,如果是,其条件是

status==true 

改变==与后一个!= 。

简而言之,

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,即未赋值的元素。你应该保持一个不同的索引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]); 
    }