gudii9
asked on
no14 challenge
Hi,
I am working on below challenge
http://codingbat.com/prob/p136648
Psedo code description of approach :
1. loop through given array
2. check if no 1 or no 4 is then return true
3. otherwise return false
I wrote my code as below
I am not passing all tests.
How to improve my design, approach, code? please advise
I am working on below challenge
http://codingbat.com/prob/p136648
Psedo code description of approach :
1. loop through given array
2. check if no 1 or no 4 is then return true
3. otherwise return false
I wrote my code as below
public boolean no14(int[] nums) {
boolean result=false;
for(int i=0;i<nums.length;i++){
if(nums[i]!=1||nums[i]!=4){
result=true;
return result;
}
}
return result;
}
I am not passing all tests.
Expected Run
no14([1, 2, 3]) → true true OK
no14([1, 2, 3, 4]) → false true X
no14([2, 3, 4]) → true true OK
no14([1, 1, 4, 4]) → false true X
no14([2, 2, 4, 4]) → true true OK
no14([2, 3, 4, 1]) → false true X
no14([2, 1, 1]) → true true OK
no14([1, 4]) → false true X
no14([2]) → true true OK
no14([2, 1]) → true true OK
no14([1]) → true true OK
no14([4]) → true true OK
no14([]) → true false X
no14([1, 1, 1, 1]) → true true OK
no14([9, 4, 4, 1]) → false true X
no14([4, 2, 3, 1]) → false true X
no14([4, 2, 3, 5]) → true true OK
no14([4, 4, 2]) → true true OK
no14([1, 4, 4]) → false true X
other tests
X
Correct for more than half the tests
How to improve my design, approach, code? please advise
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
if(nums[i]==1)
no1=false; // it contains 1's, so it contains no 1's is false
else if(nums[i]==4)
no4=false; // it contains 4's, so it contains no 4's is false
}
what is difference between above and below
if(nums[i]!=1||nums[i]!=4){
result=true;
//return result;
}
i thought both same?
ASKER
return Arrays.toString(nums).indexOf("1")<0||Arrays.toString(nums).indexOf("4")<0;
above also passed all tests
above also passed all tests
I know that already.
The question is : did you and if so why.
ASKER
if(nums[i]==1)
no1=false; // it contains 1's, so it contains no 1's is false
else if(nums[i]==4)
no4=false; // it contains 4's, so it contains no 4's is false
}
what is difference between above and below. please advise
if(nums[i]!=1||nums[i]!=4){
result=true;
//return result;
}
Read the other expert's comment again.
if(nums[i]!=1||nums[i]!=4){
result=true;
//return result;
}
If you check the results you will see that the above return true for any given number.
But the below code uses two variables not one. Variable "no1" is true is no 1's are found. Variable "no4" is true if no 4's are found. And the code returns true if either variable is true. That is if either no 1's or no 4's were found.
if(nums[i]==1)
no1=false; // it contains 1's, so it contains no 1's is false
else if(nums[i]==4)
no4=false; // it contains 4's, so it contains no 4's is false
}
This is a more pedestrian way of breaking it down too :
boolean b = true;
for(int i : nums){if((i==1)){b = false;}}
if(b==true)return b;
b = true;
for(int i : nums){if((i==4)){b = false;}}
return b;
ASKER
If you check the results you will see that the above return true for any given number.//i see that
But the below code uses two variables not one. Variable "no1" is true is no 1's are found. Variable "no4" is true if no 4's are found. //how to decide to take as two separate variables???
And the code returns true if either variable is true. That is if either no 1's or no 4's were found.//this is clear
But the below code uses two variables not one. Variable "no1" is true is no 1's are found. Variable "no4" is true if no 4's are found. //how to decide to take as two separate variables???
And the code returns true if either variable is true. That is if either no 1's or no 4's were found.//this is clear
//how to decide to take as two separate variables???
because the question asks you to return true if EITHER 1 or 4 is not found. So a test like 2,3,4 should return true, because there are no 1s in it. A test like 2,3,1 would return true because . . . well, you tell us.
So you need to keep track of their existence *separately*.
Let's say the numbers are 1,2,3,4. If we know a given number is present, but don't know the rest of the numbers, can we determine whether the statement "contains no 1's or contains no 4's" is true or false?
# "contains no 1's or contains no 4's" "contains no 1's" "contains no 4's"
1 Can't determine False Can't determine
2 Can't determine Can't determine Can't determine
3 Can't determine Can't determine Can't determine
4 Can't determine Can't determine False
1. If we only know 1 is present, we can't be sure whether the statement is true or false. But we can be sure that part of the statement that is "contains no 1's" is false. However, we can't be sure whether the other part of the statement that is "contains no 4's" is true or false.
2. If we only know 2 is present, we can't be sure whether the statement is true or false. And we can't be sure that any part of the statement is true or false either.
3. If we only know 3 is present, we can't be sure whether the statement is true or false. And we can't be sure that any part of the statement is true or false either.
4.If we only know 4 is present, we can't be sure whether the statement is true or false. But we can be sure that part of the statement that is "contains no 4's" is false. However, we can't be sure whether the other part of the statement that is "contains no 1's" is true or false.
Since by looking at any one given number we can't be sure whether the statement is true or false, we can't use a single variable to represent whether the statement is true or false. But since by looking at any one given number, and if the number is 1, we can be sure that the statement "contains no 1's" is false, we can use a variable to represent whether the statement "contains no 1's" is true or false. Likewise since by looking at any one given number, and if the number is 4, we can be sure that the statement "contains no 4's" is false, we can use a variable to represent whether the statement "contains no 4's" is true or false.
And as shown by krakatoa 1 variable could be technically used. But this variable can only represent that a part of the statement is true or false. And since if one part of an OR statement is true the whole statement must be true, we don't need to check the other part. But if the first part was false we would need to check whether the second part is true or false.
A single boolean variable cannot be used to represent whether the whole statement is true or false. But an integer variable could be used. But it would make things complex and hard to understand.
# "contains no 1's or contains no 4's" "contains no 1's" "contains no 4's"
1 Can't determine False Can't determine
2 Can't determine Can't determine Can't determine
3 Can't determine Can't determine Can't determine
4 Can't determine Can't determine False
1. If we only know 1 is present, we can't be sure whether the statement is true or false. But we can be sure that part of the statement that is "contains no 1's" is false. However, we can't be sure whether the other part of the statement that is "contains no 4's" is true or false.
2. If we only know 2 is present, we can't be sure whether the statement is true or false. And we can't be sure that any part of the statement is true or false either.
3. If we only know 3 is present, we can't be sure whether the statement is true or false. And we can't be sure that any part of the statement is true or false either.
4.If we only know 4 is present, we can't be sure whether the statement is true or false. But we can be sure that part of the statement that is "contains no 4's" is false. However, we can't be sure whether the other part of the statement that is "contains no 1's" is true or false.
Since by looking at any one given number we can't be sure whether the statement is true or false, we can't use a single variable to represent whether the statement is true or false. But since by looking at any one given number, and if the number is 1, we can be sure that the statement "contains no 1's" is false, we can use a variable to represent whether the statement "contains no 1's" is true or false. Likewise since by looking at any one given number, and if the number is 4, we can be sure that the statement "contains no 4's" is false, we can use a variable to represent whether the statement "contains no 4's" is true or false.
And as shown by krakatoa 1 variable could be technically used. But this variable can only represent that a part of the statement is true or false. And since if one part of an OR statement is true the whole statement must be true, we don't need to check the other part. But if the first part was false we would need to check whether the second part is true or false.
A single boolean variable cannot be used to represent whether the whole statement is true or false. But an integer variable could be used. But it would make things complex and hard to understand.
ASKER
//how to decide to take as two separate variables???
because the question asks you to return true if EITHER 1 or 4 is not found. So a test like 2,3,4 should return true, because there are no 1s in it. A test like 2,3,1 would return true because . . . well, you tell us.
So you need to keep track of their existence *separately*.
//how to decide to take as two separate variables???
because the question asks you to return true if EITHER 1 or 4 is not found. So a test like 2,3,4 should return true, because there are no 1s in it. A test like 2,3,1 would return true because ...there are no 4s
So you need to keep track of their existence *separately*.
above is clear now.
ASKER
Open in new window
even putting return outside fails tests. i wonder why?