Почему переменная, объявленная в блоке stati c при использовании в основном методе, не найдена? - PullRequest
0 голосов
/ 30 апреля 2020

Мне немного трудно понять, как работает блок stati c

import java.io.*;
import java.util.*;

public class Solution {

    static {

            Scanner sc = new Scanner(System.in);
            int B =  sc.nextInt();
            int H =  sc.nextInt();
            boolean flag= false;
            if(B<=0 || H<=0){
                  flag= false;
                  System.out.println("java.lang.Exception: Breath and Hieght must be positive");
                  }
             }

    public static void main(String[] args){
            if(flag){
                int area=B*H;
                System.out.print(area);
            }

        }

    }

, когда я пытаюсь запустить его, он не может найти флаг символа, B, H. Кто-нибудь может объяснить, почему?

Ответы [ 3 ]

0 голосов
/ 30 апреля 2020

Все переменные в вашем блоке c будут удалены в конце выполнения блока. Чтобы предотвратить это, вы можете объявить эти переменные как поля типа

import java.io.*;
import java.util.*;

public class Solution {

    private static int B;
    private static int H;
    private static boolean flag;

    static {
        Scanner sc = new Scanner(System.in);
        B =  sc.nextInt();
        H =  sc.nextInt();
        flag = false;
        if(B<=0 || H<=0){
            flag= false;
            System.out.println("java.lang.Exception: Breath and Hieght must be positive");
        }
    }

    public static void main(String[] args){
        if(flag){
            int area=B*H;
            System.out.print(area);
        }
    }
}
0 голосов
/ 30 апреля 2020

Вы должны объявить переменные stati c вне блока кода stati c.

0 голосов
/ 30 апреля 2020

Область действия переменной находится в пределах c блока или любого другого блока в этом отношении. Вы должны объявить это вне блока и определить его внутри вашего блока c.

...