# scoreUp challenge

Hi,

I am working on below challenge
http://codingbat.com/prob/p180365

The "key" array is an array containing the correct answers to an exam, like {"a", "a", "b", "b"}. the "answers" array contains a student's answers, with "?" representing a question left blank. The two arrays are not empty and are the same length. Return the score for this array of answers, giving +4 for each correct answer, -1 for each incorrect answer, and +0 for each blank answer.

i was not clear on above description.

i was not clear how below result is 6 etc. please advise
scoreUp(["a", "a", "b", "b"], ["a", "c", "b", "c"]) → 6
scoreUp(["a", "a", "b", "b"], ["a", "a", "b", "c"]) → 11
scoreUp(["a", "a", "b", "b"], ["a", "a", "b", "b"]) → 16
LVL 7
###### Who is Participating?

Billing EngineerCommented:
simply looping the array, comparing the values at the same indices, and depending on the values, sum up the scores...
0

Author Commented:
giving +4 for each correct answer, -1 for each incorrect answer, and +0 for each blank answer.

simply looping the array, comparing the values at the same indices, and depending on the values, sum up the scores...
i think i got it now

scoreUp(["a", "a", "b", "b"], ["a", "c", "b", "c"]) → 6

as 'a' is same in both array give +4
then a not same as c so -1
then b same as b +4
then b not same as c -1

total is 6

let me think on pseudo code and code now
0

Billing EngineerCommented:
yes, exactly
don't forget to code for the "blank" answers
0

Author Commented:
``````public int scoreUp(String[] key, String[] answers) {
int count=0;
for(int i=0;i<key.length;i++){
count=count+4;
}else{
count=count-1;
}
}
return count;
}
``````

Expected      Run
scoreUp(["a", "a", "b", "b"], ["a", "c", "b", "c"]) → 6      6      OK
scoreUp(["a", "a", "b", "b"], ["a", "a", "b", "c"]) → 11      11      OK
scoreUp(["a", "a", "b", "b"], ["a", "a", "b", "b"]) → 16      16      OK
scoreUp(["a", "a", "b", "b"], ["?", "c", "b", "?"]) → 3      1      X
scoreUp(["a", "a", "b", "b"], ["?", "c", "?", "?"]) → -1      -4      X
scoreUp(["a", "a", "b", "b"], ["c", "?", "b", "b"]) → 7      6      X
scoreUp(["a", "a", "b", "b"], ["c", "?", "b", "?"]) → 3      1      X
scoreUp(["a", "b", "c"], ["a", "c", "b"]) → 2      2      OK
scoreUp(["a", "a", "b", "b", "c", "c"], ["a", "c", "a", "c", "a", "c"]) → 4      4      OK
scoreUp(["a", "a", "b", "b", "c", "c"], ["a", "c", "?", "?", "a", "c"]) → 6      4      X
scoreUp(["a", "a", "b", "b", "c", "c"], ["a", "c", "?", "?", "c", "c"]) → 11      9      X
scoreUp(["a", "b", "c"], ["a", "b", "c"]) → 12      12      OK
other tests
X
0

Commented:
The challenge states
"?" representing a question left blank.
this will appear in the "answers" array. Therefore the following
``````(!key[i].equals("?"))
``````
is not necessary. Your errors occur when there is a "?" in the answers. When it is found you add -1. That is wrong.
0

Billing EngineerCommented:
I confirm, and that is what I meant by:

don't forget to code for the "blank" answers
0

Author Commented:
``````The challenge states
"?" representing a question left blank.
this will appear in the "answers" array. Therefore the following
(!key[i].equals("?"))

is not necessary. Your errors occur when there is a "?" in the answers. When it is found you add -1. That is wrong.
``````

what i supposed to do when i see question mark(?)
0

Author Commented:
``````public int scoreUp(String[] key, String[] answers) {
int count=0;
for(int i=0;i<key.length;i++){
count=count+4;
}else if(key[i].equals("?")){
count=0;
count=0;
}else{
count=count-1;
}
}
return count;
}
``````

something like above?
Expected      Run
scoreUp(["a", "a", "b", "b"], ["a", "c", "b", "c"]) → 6      6      OK
scoreUp(["a", "a", "b", "b"], ["a", "a", "b", "c"]) → 11      11      OK
scoreUp(["a", "a", "b", "b"], ["a", "a", "b", "b"]) → 16      16      OK
scoreUp(["a", "a", "b", "b"], ["?", "c", "b", "?"]) → 3      0      X
scoreUp(["a", "a", "b", "b"], ["?", "c", "?", "?"]) → -1      0      X
scoreUp(["a", "a", "b", "b"], ["c", "?", "b", "b"]) → 7      8      X
scoreUp(["a", "a", "b", "b"], ["c", "?", "b", "?"]) → 3      0      X
scoreUp(["a", "b", "c"], ["a", "c", "b"]) → 2      2      OK
scoreUp(["a", "a", "b", "b", "c", "c"], ["a", "c", "a", "c", "a", "c"]) → 4      4      OK
scoreUp(["a", "a", "b", "b", "c", "c"], ["a", "c", "?", "?", "a", "c"]) → 6      3      X
scoreUp(["a", "a", "b", "b", "c", "c"], ["a", "c", "?", "?", "c", "c"]) → 11      8      X
scoreUp(["a", "b", "c"], ["a", "b", "c"]) → 12      12      OK
other tests
X
0

Author Commented:
``````public int scoreUp(String[] key, String[] answers) {
int count=0;
for(int i=0;i<key.length;i++){
count=count+4;
}else if(key[i].equals("?")){
count=0;
count=count+0;
count=count-1;
}
}
return count;
}
``````
something like above.
Above passes all tests.
0

Commented:
That code works. But, the challenge states
"key" array is an array containing the correct answers to an exam
Therefore a "?" will  never be found in the key array.     So,
``````(!key[i].equals("?"))
``````
and
``````else if(key[i].equals("?")){
count=0;
``````
are not necessary.

``````count=count+0;
``````
That is confusing for the reader. You could just use
`````` continue;
``````
0

Author Commented:

``````public int scoreUp(String[] key, String[] answers) {
int count=0;
for(int i=0;i<key.length;i++){
count=count+4;
}/*else if(key[i].equals("?")){
continue;
count=count+0;
count=count-1;
}
}
return count;
}
``````

above looks ok? any improvements, alternate approaches?
0

Commented:
above looks ok?
It looks ok, but you could clean it up to improve readability.
``````public int scoreUp(String[] key, String[] answers) {
int count = 0;
for(int i=0;i<key.length;i++){
count = count + 4;
}else count--;
}
return count;
}
``````
0

Author Commented:
why you chose if with if then else approach rather than
if with else if with else approach as i did ?
0

Commented: