我在编码中遇到问题。关于这个问题,我认为我已经做得正确,但结果不对。 Plz帮助我找出错误。问题是:给定一组int,如果它不包含1或者它不包含4,则返回true。
no14({1, 2, 3}) → true
no14({1, 2, 3, 4}) → false
no14({2, 3, 4}) → true
以下是我的代码:
public boolean no14(int[] nums) {
int i=0;
int count1=0;
int count4=0;
while(i<nums.length)
{
if(nums[i]==1)
{count1++;}
i++;
}
while(i<nums.length)
{
if(nums[i]==4)
{count4++;}
i++;
}
if(count1==0&&count4!=0)
{return true;}
else if(count1!=0&&count4==0)
{return true;}
else if(count1==0&&count4==0)
{return true;}
else return false;
}
答案 0 :(得分:1)
我认为这里的许多解决方案存在缺陷,因为人们没有仔细阅读问题描述。 如果找到1或4,则返回false是不正确的。
public boolean no14(int[] nums){
/* Given an array of ints, return true if it contains no 1's OR it contains no 4's.
no14({1, 2, 3}) = true
no14({1, 2, 3, 4}) = false
no14({2, 3, 4}) = true
*/
boolean containsNoOnes=true, containsNoFours=true; //We assume we don't have any 1's or 4's.
for (int i : nums) {
if(i==1) containsNoOnes = false; //If we find a 1, then false.
if(i==4) containsNoFours = false; //If we find a 4, then false.
}
return containsNoOnes || containsNoFours; //If array did not contain any 1's return true.
//Or if array did not contain any 4's, return true;
}
答案 1 :(得分:0)
在第一个while循环之后,您必须在i
0
的值设为while
while(i<nums.length)
{
if(nums[i]==1)
{count1++;}
i++;
}
i = 0;
while(i<nums.length)
{
if(nums[i]==4)
{count4++;}
i++;
}
一旦找到1或4就可以返回false以使其有效。
答案 2 :(得分:0)
我认为你已经让它变得过于复杂,如果我明白你被要求做什么 - 这应该有效 -
public boolean no14(int[] nums) {
for (int i : nums) {
if (i == 1 || i == 4) return false;
}
return true;
}
答案 3 :(得分:0)
public boolean no14(int[] nums) {
int one = 0;
int four = 0;
for (int i=0; i<nums.length; i++)
{
if (nums[i] == 1) one++;
if (nums[i] == 4) four++;
}
if (one > 0 && four > 0) return false;
else return true;
}
答案 4 :(得分:0)
public boolean no14(int[] nums) {
boolean isOne = false;
boolean isFour = false;
for(int i = 0 ; i < nums.length; i++ ) {
if(!isOne && nums[i] == 1 ) {
isOne = true;
} else if(!isFour && nums[i] == 4) {
isFour = true;
}
}
return !(isOne && isFour);
}
答案 5 :(得分:0)
public boolean no14(int[] nums) {
boolean ones = false, fours = false;
for(int i = 0; i < nums.length; i++) {
if(nums[i] == 1) {
ones = true;
} else if(nums[i] == 4) {
fours = true;
}
}
return (!ones) || (!fours);
}
答案 6 :(得分:0)
这是我的答案:
public boolean no14(int[] nums) {
int count1 = 0;//counting 1's
int count4 = 0;//counting 4's
for(int i = 0; i < nums.length; i++){
if(nums[i] == 1){
count1++;
}
if(nums[i] == 4){
count4++;
}
}
if((count1 == 0 && count4 > 0) || (count4 == 0 && count1 > 0) || (count4 == 0 && count1 == 0) )//checking if it contains only 1's or 4's or no one
return true;
return false;
}