Как исправить этот Java-код, чтобы он работал для всех классов не только A?

Для angular.js, вот директива (на основе принятого ответа), которая позволит вашему контроллеру реагировать на изменение видимости:

myApp.directive('reactOnWindowFocus', function($parse) {
    return {
        restrict: "A",
        link: function(scope, element, attrs) {
            var hidden = "hidden";
            var currentlyVisible = true;
            var functionOrExpression = $parse(attrs.reactOnWindowFocus);

          // Standards:
          if (hidden in document)
            document.addEventListener("visibilitychange", onchange);
          else if ((hidden = "mozHidden") in document)
            document.addEventListener("mozvisibilitychange", onchange);
          else if ((hidden = "webkitHidden") in document)
            document.addEventListener("webkitvisibilitychange", onchange);
          else if ((hidden = "msHidden") in document)
            document.addEventListener("msvisibilitychange", onchange);
          else if ("onfocusin" in document) {
                // IE 9 and lower:
            document.onfocusin = onshow;
                document.onfocusout = onhide;
          } else {
                // All others:
            window.onpageshow = window.onfocus = onshow;
                window.onpagehide = window.onblur = onhide;
            }

          function onchange (evt) {
                //occurs both on leaving and on returning
                currentlyVisible = !currentlyVisible;
                doSomethingIfAppropriate();
          }

            function onshow(evt) {
                //for older browsers
                currentlyVisible = true;
                doSomethingIfAppropriate();
            }

            function onhide(evt) {
                //for older browsers
                currentlyVisible = false;
                doSomethingIfAppropriate();
            }

            function doSomethingIfAppropriate() {
                if (currentlyVisible) {
                    //trigger angular digest cycle in this scope
                    scope.$apply(function() {
                        functionOrExpression(scope);
                    });
                }
            }
        }
    };

});

Вы можете использовать его, как в этом примере: <div react-on-window-focus="refresh()">, где refresh() - это функция области видимости в пределах области действия любого Контроллера.

0
задан Jr Someone 3 March 2019 в 15:36
поделиться

3 ответа

Вот быстрое решение:

import javax.swing.JOptionPane;

public class Grades
{
    public String scoreToGrade( int score )
    {
        String grade;
        if( score < 50 ) return "F";
        else if( score >= 50 && score < 60) return "E";
        else if( score >= 60 && score < 70) return "D";
        else if( score >= 70 && score < 80) return "C";
        else if( score >= 80 && score < 90) return "B";
        else if( score > 90) return "A";
        else
        {
            grade = "Error: score " + score;
        }
        return grade;
    }

    public static void main( String[] args )
    {
        String input = JOptionPane.showInputDialog( "Score: " );
        int score = Integer.parseInt( input );
        Grades t = new Grades();
        String grade = t.scoreToGrade( score );
        JOptionPane.showMessageDialog( null,
                "For " + score + " points, your grade is:  " + grade );
    }
}
0
ответ дан Dezso Gabos 3 March 2019 в 15:36
поделиться

Turing85 дал вам хороший совет. Я бы посоветовал вам следовать этому, чтобы понять, что пошло не так в вашем коде.

Но чтобы помочь вам в этой конкретной ситуации, вопрос, почему ваш код не работает ни для каких других классов, заключается в том, как вы структурировали свои if условия.

Рассмотрим приведенный ниже фрагмент из вашего кода:

        if( score <= 100 )
        {
            if( score >= 90 )
                grade = "A";

        }
        else if( score <= 89 )
        {
            if( score >= 80 )
                grade = "B";
                return grade;

        }

Если score равно >=90, grade устанавливается как A. Но если score - это не >=90, а <=100, то он не пойдет в блок else if, где вы установите его на B, поскольку он будет напрямую выходить из else if лестницы из [ 1113] состояние.

Таким образом, вы должны изменить метод, как показано ниже:

public static String scoreToGrade( int score )
        {
            String grade = "";
            if( score <= 100 && score >= 90 )
            {
                    grade = "A";
            }
            else if( score <= 89 && score >= 80)
            {
                    grade = "B";
            }
            else if( score <= 79 && score >= 70)
            {
                    grade = "C";
            }
            else if( score <= 69 && score >= 60)
            {
                    grade = "D";
            }
            else if( score <= 59 && score >= 50)
            {
                    grade = "E";
            }
            else if( score <= 49 && score >= 0)
            {
                    grade = "F";
            }
            else
            {
                grade = "Error: score " + score;
            }
            return grade;
        }
0
ответ дан Madhu Bhat 3 March 2019 в 15:36
поделиться

Я думаю, вам просто нужны фигурные скобки вокруг ВСЕХ ваших утверждений if. Например,

import javax.swing.JOptionPane;

public class Grades
{
public String scoreToGrade( int score )
{
    String grade = "";
    if( score <= 100 )
    {
        if( score >= 90 ){
            grade = "A";
            return grade;
        }
    }
    else if( score <= 89 )
    {
        if( score >= 80 ) {
            grade = "B";
            return grade;
        }

    }
    else if( score <= 79 )
    {
        if( score >= 70 ) {
            grade = "C";
            return grade;
        }
    }
    else if( score <= 69 )
    {
        if( score >= 60 ) {
            grade = "D";
            return grade;
        }
    }
    else if( score <= 59 )
    {
        if( score >= 50 ) {
            grade = "E";
            return grade;
        }
    }
    else if( score <= 49 )
    {
        if( score >= 0 ) {
            grade = "F";
            return grade;
        }
    }
    else
    {
        grade = "Error: score " + score;
    }
    return grade;
}

public static void main( String[] args )
{
    String input = JOptionPane.showInputDialog( "Score: " );
    int score = Integer.parseInt( input );
    Grades t = new Grades();
    String grade = t.scoreToGrade( score );
    JOptionPane.showMessageDialog( null,
        "For " + score + " points, your grade is:  " + grade );
}
}

Может быть, чего-то не хватает, хотя.

0
ответ дан C. Peck 3 March 2019 в 15:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: