JavaScript Object-Oriented JavaScript Getters and Setters Creating Getter Methods

tal Shnitzer
PRO
tal Shnitzer
Pro Student 5,242 Points

getter function - what is wrong with the switch statement?

I get that my conditional return the wrong level:

class Student {
    constructor(gpa, credits){
        this.gpa = gpa;
        this.credits = credits;
    }

    stringGPA() {
        return this.gpa.toString();
    }

  get level() {
    switch (this.credits) {
  case (this.credits>90):
    return 'Senior';
    break;
  case (this.credits<=90 && this.credits>=61):
    return 'Junior';
    break;
  case (this.credits<=60 && this.credits>=31):
    return 'Sophomore';
    break;
  case (this.credits<=30 ):
    return 'Freshman';
    break;
   default: 
        return 'Freshman';
   }
  }
}

const student = new Student(3.9);

can anyone tell me whats wrong with it?

creating_getters.js
class Student {
    constructor(gpa, credits){
        this.gpa = gpa;
        this.credits = credits;
    }

    stringGPA() {
        return this.gpa.toString();
    }

  get level() {
    switch (this.credits) {
  case (this.credits>90):
    return 'Senior';
    break;
  case (this.credits<=90 && this.credits>=61):
    return 'Junior';
    break;
  case (this.credits<=60 && this.credits>=31):
    return 'Sophomore';
    break;
  case (this.credits<=30 ):
    return 'Freshman';
    break;
   default: 
        return 'Freshman';
   }
  }
}

const student = new Student(3.9);
tal Shnitzer
tal Shnitzer
Pro Student 5,242 Points

this is the task: Inside the getter method use the conditional statement of your choice to determine the level of the student. If the value of the "credits" property is over 90, return 'Senior'. If it's between 61 and 90, return 'Junior'. If it's between 31 and 60, return 'Sophomore'. If it's 30 or less, return 'Freshman'.'

2 Answers

Hakim Rachidi
Hakim Rachidi
35,366 Points

Use an if statement

  • I don't know why but with an if statement and the same conditionals it works fine (the challenge wants you to make one).
  • Replace the initialization of student with this:
const student = new Student(3, 9);

use a comma to make the 9 the second parameter.

Here is a final shorten version:

class Student {
    constructor(gpa, credits){
        this.gpa = gpa;
        this.credits = credits;
    }

    stringGPA() {
        return this.gpa.toString();
    }

  get level() {
    if (this.credits > 90) {
        return 'Senior';
    } else if (this.credits > 61) {
        return 'Junior';
    } else if (this.credits > 31) {
        return 'Sophomore';
    } else {
        return 'Freshman';
    }
  }
}

const student = new Student(3, 9);

Hope this helps;

tal Shnitzer
tal Shnitzer
Pro Student 5,242 Points

yes, the problem is in the switch. thanks

Andrew Huang
Andrew Huang
5,563 Points

You should put the "expression" in switch(), not property

so code corrected as blow code:

Before

  get level() {
    switch (this.credits) {     // expression 
  case (this.credits>90):
    return 'Senior';

After

  get level() {
    switch (true) {     // expression 
  case (this.credits>90):
    return 'Senior';