프로그래밍 언어/Java

class is public, should be declared in a file named .java 에러 해결

happy_life 2021. 10. 25. 11:40

문제 상황

필요한 코드를 복사 붙여넣기하였는데 실행 전에 이런 오류가 발생

class "" is public, should be declared in a file named .java

 

이 문제는 아마 Android 초보분들께 발생하는 것이라고 생각합니다.

복잡한 코드에 놀라지마시고 천천히 확인해보시면 쉽게 해결하실 겁니다.

 

 

문제의 코드



import androidx.appcompat.app.AppCompatActivity;

public class InputFilterMinMax implements InputFilter{

    private int min,max;

    public InputFilterMinMax(int min, int max){

        this.min = min;
        this.max = max;
    }

    public InputFilterMinMax(String min, String max){
        this.min = Integer.parseInt(min);
        this.max = Integer.parseInt(max);
    }

    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        try {
            int input = Integer.parseInt(dest.toString() + source.toString());
            if (isInRange(min, max, input))
                return null;
        } catch (NumberFormatException nfe) { }
        return "";
    }

    private boolean isInRange(int a, int b, int c) {
        return b > a ? c >= a && c <= b : c >= b && c <= a;
    }

}

public class MainActivity extends AppCompatActivity {


    EditText EditText_et;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText_et = findViewById(R.id.EditText_et);
        EditText_et.setFilters(new InputFilter[]{new InputFilterMinMax("1","12")});
    }
}

원인

안드로이드에서 public이 하나여야 하기 때문이라고 함.

 

해결방안

 

빨간 부분의 코드를 파란 부분으로 복사 붙여넣기 해주기 

 

결과 코드

import androidx.appcompat.app.AppCompatActivity;



public class MainActivity extends AppCompatActivity {


    public class InputFilterMinMax implements InputFilter{

        private int min,max;

        public InputFilterMinMax(int min, int max){

            this.min = min;
            this.max = max;
        }

        public InputFilterMinMax(String min, String max){
            this.min = Integer.parseInt(min);
            this.max = Integer.parseInt(max);
        }

        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            try {
                int input = Integer.parseInt(dest.toString() + source.toString());
                if (isInRange(min, max, input))
                    return null;
            } catch (NumberFormatException nfe) { }
            return "";
        }

        private boolean isInRange(int a, int b, int c) {
            return b > a ? c >= a && c <= b : c >= b && c <= a;
        }

    }
    EditText EditText_et;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText_et = findViewById(R.id.EditText_et);
        EditText_et.setFilters(new InputFilter[]{new InputFilterMinMax("1","12")});
    }

해결 완료