변수가 초기화되지 않았을 수 있음 오류
이것을 컴파일하려고 할 때 :
public static Rand searchCount (int[] x)
{
int a ;
int b ;
...
for (int l= 0; l<x.length; l++)
{
if (x[l] == 0)
a++ ;
else if (x[l] == 1)
b++ ;
}
...
}
다음과 같은 오류가 발생합니다.
Rand.java:72: variable a might not have been initialized
a++ ;
^
Rand.java:74: variable b might not have been initialized
b++ ;
^
2 errors
내가 방법의 상단에서 초기화 한 것 같습니다. 무슨 일이야?
당신은 선언 을하지만, 당신이 그들을 초기화되지 않았습니다. 초기화는 값과 동일하게 설정하는 것입니다.
int a; // This is a declaration
a = 0; // This is an initialization
int b = 1; // This is a declaration and initialization
변수를 초기화하지 않았기 때문에 오류가 발생하지만 루프 a++
에서 변수를 증가시킵니다 (예 for
:).
Java 프리미티브에는 기본값이 있지만 한 사용자가 아래에 주석을 달았습니다.
클래스 멤버로 선언 된 경우 기본값은 0입니다. 지역 변수에는 기본값이 없습니다.
지역 변수는 기본값을 얻지 못합니다. 그들의 초기 값은 어떤 방법으로 값을 할당하지 않고 정의되지 않습니다. 지역 변수를 사용하려면 먼저 초기화해야합니다.
클래스 수준 (즉, 필드로 멤버)과 메서드 수준에서 변수를 선언 할 때 큰 차이가 있습니다.
클래스 수준에서 필드를 선언하면 유형에 따라 기본값이 적용됩니다. 메서드 수준에서 또는 블록 ({} 내부의 모든 코드를 의미 함)으로 변수를 선언하면 어떤 값도 얻지 않고 어떤 식 으로든 시작 값, 즉 일부 값이 할당 될 때까지 정의되지 않은 상태로 유지됩니다.
클래스의 필드로 선언 된 경우 실제로 0으로 초기화됩니다.
다음과 같이 작성하면 약간 혼란 스럽습니다.
class Clazz {
int a;
int b;
Clazz () {
super ();
b = 0;
}
public void printA () {
sout (a + b);
}
public static void main (String[] args) {
new Clazz ().printA ();
}
}
그러면이 코드는 "0"을 인쇄합니다. Clazz의 새 인스턴스를 만들 때 특수 생성자가 호출되기 때문입니다. 처음에는 super ()
필드 a
가 묵시적으로 초기화되고 라인 b = 0
이 실행됩니다.
You declared them, but not initialized.
int a; // declaration, unknown value
a = 0; // initialization
int a = 0; // declaration with initialization
You declared them, but didn't initialize them with a value. Add something like this :
int a = 0;
You declared them at the start of the method, but you never initialized them. Initializing would be setting them equal to a value, such as:
int a = 0;
int b = 0;
You declared them but did not provide them with an intial value - thus, they're unintialized. Try something like:
public static Rand searchCount (int[] x)
{
int a = 0 ;
int b = 0 ;
and the warnings should go away.
Imagine what happens if x[l] is neither 0 nor 1 in the loop. In that case a and b will never be assigned to and have an undefined value. You must initialize them both with some value, for example 0.
You haven't initialised a
and b
, only declared them. There is a subtle difference.
int a = 0;
int b = 0;
At least this is for C++, I presume Java is the same concept.
Set variable "a" to some value like this,
a=0;
Declaring and initialzing are both different.
Good Luck
It's a good practice to initialize the local variables inside the method block before using it. Here is a mistake that a beginner may commit.
public static void main(String[] args){
int a;
int[] arr = {1,2,3,4,5};
for(int i=0; i<arr.length; i++){
a = arr[i];
}
System.out.println(a);
}
You may expect the console will show '5' but instead the compiler will throw 'variable a might not be initialized' error. Though one may think variable a is 'initialized' inside the for loop, the compiler does not think in that way. What if arr.length
is 0? The for loop will not be run at all. Hence, the compiler will give variable a might not have been initialized
to point out the potential danger and require you to initialize the variable.
To prevent this kind of error, just initialize the variable when you declare it.
int a = 0;
참고URL : https://stackoverflow.com/questions/2448843/variable-might-not-have-been-initialized-error
'IT Share you' 카테고리의 다른 글
ListBox.items를 일반 목록으로 변환하는 가장 간결한 방법 (0) | 2020.12.10 |
---|---|
Python 3.1에서 문자열의 HTML 엔티티를 어떻게 이스케이프 해제합니까? (0) | 2020.12.09 |
Javascript로 2 자리 연도를 얻는 방법은 무엇입니까? (0) | 2020.12.09 |
GNU sed 및 BSD / OSX sed 모두에서 작업하려면 내부 편집을 위해 sed -i 명령이 필요합니다. (0) | 2020.12.09 |
Java ArrayList-목록이 비어 있는지 확인 (0) | 2020.12.09 |