如何检查数组中的除数

时间:2014-03-18 03:27:32

标签: java arrays java.util.scanner

我有一个n个单元格的数组,其中单元格0具有int 0,单元格1具有2 ... etern ... [0,2,3,4,n ...]

我的目标是让用户在数组中选择一个值(而不是单元格#),只有下列两个条件都为真时,所选值才变为零:

  • 用户无法选择已经为0
  • 的单元格
  • 用户无法选择数组中没有剩余除数的数字。例如;用户不能在包含[0,0,3,4,0,6,7,8]
  • 的数组中选择3,4或7

用户选择不可用的任何号码都会有System.out.println ("Invalid number");

编辑:我现在的问题是当我有[0,0,0,4,5,6]我可以选择4,5和6然后把它变成零,即使没有任何除数这些数字。

我尝试使用代码,但没有完全正常工作:

int[] NumBox = new int[StartNum];
           for (int i = 1; i < NumBox.length+1; i++)
            {NumBox[i - 1] = i;}




 if (NumBox[pick-1]!= 0)
       { 
                    boolean hasDivisor = false;

                      for (int k = 1; k < NumBox.length+1; k++) 
                   {

                         if (NumBox[k] == 0) 
                         continue;
                         if (NumBox[pick-1] % NumBox[k] == 0) 
                         {
                           hasDivisor = true;
                           break;
                         }
                   }   


                    if (hasDivisor)
                     {
                      score1 = pick + score1;
                      NumBox[pick-1]=0;
                      }

                     else
                      System.out.println ("Invalid number");
        }

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

您没有说出当前代码的问题,但我猜您可能想要更改此测试:

if (NumBox[pick-1] % NumBox[k] == 0)

到此:

if (NumBox[pick-1] > NumBox[k] && NumBox[pick-1] % NumBox[k] == 0)

这样你就不会将数字视为自己的除数。

答案 1 :(得分:0)

好的..这是一种方法。

1. Sort the array in ascending order.
2. For a given number/input say "n" at index say "i", 
   if any number before index "i" has number!=0 && n%number ==0, then it is divisible. Else, it is not divisible

答案 2 :(得分:0)

简单的方法就是这个

    1. Sort the array in ascending order.
    2. Now when the user selects a number, keep testing 
       the mod value from start until root(N) of that number. 
       If none mods to zero, then it doesn't have any divisors.

第一部分应该很简单,第二部分应该是这样的伪代码

boolean flag=false;
if(!(pick==0)){ // testing if it is already is not zero
for (int i = 0; i < args.length; i++) {
    if(pick%NumBox[i]==0){
        //divisor found
        flag=true;
        break;
    }else if(NumBox[i]>Math.sqrt(pick)){
        //No divisors found
        break;
    }
}

}

if(flag==true){
    pick=0;
}