Для 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()
- это функция области видимости в пределах области действия любого Контроллера.
Вот быстрое решение:
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 );
}
}
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;
}
Я думаю, вам просто нужны фигурные скобки вокруг ВСЕХ ваших утверждений 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 );
}
}
Может быть, чего-то не хватает, хотя.