Hello, I am currently learning painless and one of the exercises is to associate letter grades to a range of numbers. I have been stuck on a specific error which is:
{
"error": {
"root_cause": [
{
"type": "script_exception",
"reason": "compile error",
"script_stack": [
"""... {
letter_grade = 'A';
}
else ...""",
" ^---- HERE"
],
"script": """
Map toLetterGrade(int numeric_grade){
Map grade = new HashMap();
char letter_grade;
if (numeric_grade >= 93 && numeric_grade <= 100) {
letter_grade = 'A';
}
else if (numeric_grade >= 85 && numeric_grade <= 92) {
letter_grade = 'B';
}
else if (numeric_grade >= 76 && numeric_grade <= 84) {
letter_grade = 'C';
}
else if (numeric_grade >= 65 && numeric_grade <= 75) {
letter_grade = 'D';
}
else if (numeric_grade >= 0 && numeric_grade <= 64) {
letter_grade = 'F';
}
else {
throw new IllegalArgumentException();
}
grade.put(letter_grade, numeric_grade);
return grade;
}
return toLetterGrade(params.numeric_grade);
""",
"lang": "painless",
"position": {
"offset": 181,
"start": 156,
"end": 206
}
}
],
"type": "script_exception",
"reason": "compile error",
"script_stack": [
"""... {
letter_grade = 'A';
}
else ...""",
" ^---- HERE"
],
"script": """
Map toLetterGrade(int numeric_grade){
Map grade = new HashMap();
char letter_grade;
if (numeric_grade >= 93 && numeric_grade <= 100) {
letter_grade = 'A';
}
else if (numeric_grade >= 85 && numeric_grade <= 92) {
letter_grade = 'B';
}
else if (numeric_grade >= 76 && numeric_grade <= 84) {
letter_grade = 'C';
}
else if (numeric_grade >= 65 && numeric_grade <= 75) {
letter_grade = 'D';
}
else if (numeric_grade >= 0 && numeric_grade <= 64) {
letter_grade = 'F';
}
else {
throw new IllegalArgumentException();
}
grade.put(letter_grade, numeric_grade);
return grade;
}
return toLetterGrade(params.numeric_grade);
""",
"lang": "painless",
"position": {
"offset": 181,
"start": 156,
"end": 206
},
"caused_by": {
"type": "class_cast_exception",
"reason": "Cannot cast from [java.lang.String] to [char]."
}
},
"status": 400
}
For reference, my current code is:
POST _scripts/painless/_execute
{
"script": {
"lang": "painless",
"source": """
Map toLetterGrade(int numeric_grade){
Map grade = new HashMap();
char letter_grade;
if (numeric_grade >= 93 && numeric_grade <= 100) {
letter_grade = 'A';
}
else if (numeric_grade >= 85 && numeric_grade <= 92) {
letter_grade = 'B';
}
else if (numeric_grade >= 76 && numeric_grade <= 84) {
letter_grade = 'C';
}
else if (numeric_grade >= 65 && numeric_grade <= 75) {
letter_grade = 'D';
}
else if (numeric_grade >= 0 && numeric_grade <= 64) {
letter_grade = 'F';
}
else {
throw new IllegalArgumentException();
}
grade.put(letter_grade, numeric_grade);
return grade;
}
return toLetterGrade(params.numeric_grade);
""",
"params": {
"numeric_grade": 98
}
}
}
I cannot understand what is causing the error and how to fix it, so any help/fix is appreciated! (FYI: the code does run if I change the data type to String, I am just curious why char is not working here )