我有一个n个单元格的数组,其中单元格0具有int 0,单元格1具有2 ... etern ... [0,2,3,4,n ...]
我的目标是让用户在数组中选择一个值(而不是单元格#),只有下列两个条件都为真时,所选值才变为零:
用户选择不可用的任何号码都会有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");
}
感谢您的帮助。
答案 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;
}