[英]Unexpected Compilation Error in Java
這是一個小代碼,如果輸入數組的長度是2的冪,則段數組的大小是2 *(input_array.length)-1,否則是2 *(input_array.length之后的下一個2的冪)-1。
public static int ByLogs(int n)
{
double y = Math.floor(Math.log(n)/Math.log(2));
return (int)Math.pow(2, y + 1);
}
public static void main(String [] args)
{
int input_array[] = {-1,2,4,0,3};
if(( input_array.length & (input_array.length - 1) == 0 ) && input_array.length > 0)
int [] segment_array = new int[2*(input_array.length)-1];
else
int [] segment_array = new int[2*(ByLogs(input_array.length))-1];
//Arrays.fill(segment_array,999);
System.out.println(segment_array.length);
}
但是在編譯之后,發生了以下錯誤。
SegmentTree.java:17: error: '.class' expected
int [] segment_array = new int[2*(input_array.length)-1];
^
SegmentTree.java:17: error: not a statement
int [] segment_array = new int[2*(input_array.length)-1];
^
SegmentTree.java:17: error: illegal start of expression
int [] segment_array = new int[2*(input_array.length)-1];
^
SegmentTree.java:17: error: ';' expected
int [] segment_array = new int[2*(input_array.length)-1];
^
SegmentTree.java:17: error: ']' expected
int [] segment_array = new int[2*(input_array.length)-1];
^
SegmentTree.java:17: error: not a statement
int [] segment_array = new int[2*(input_array.length)-1];
^
SegmentTree.java:17: error: illegal start of expression
int [] segment_array = new int[2*(input_array.length)-1];
^
SegmentTree.java:17: error: ';' expected
int [] segment_array = new int[2*(input_array.length)-1];
^
SegmentTree.java:17: error: not a statement
int [] segment_array = new int[2*(input_array.length)-1];
^
SegmentTree.java:17: error: ';' expected
int [] segment_array = new int[2*(input_array.length)-1];
我找不到我的錯誤。
首先,您實際上不能在這樣的if語句中聲明變量,因為一旦塊結束,它就會超出范圍 。 所以代替:
if (...) {
int[] a = ...;
} else {
int[] a = ...;
}
您可能想要:
int[] a; // declare the variable first, *then* initialize it
if (...) {
a = ...;
} else {
a = ...;
}
其次,您的條件被取消了; 的左手側&
是一個int
但右手側是boolean
。 按位和運算符支持兩種類型,但不一起支持; 要將boolean
轉換為int
您可以簡單地明確地將其轉換為int
,例如
((input_array.length - 1) == 0) ? 1 : 0
要檢查input_array.length
是否為2的冪,請執行以下操作:
(input_array.length & (input_array.length - 1)) == 0
請注意-1
之后的額外關閉。
最后,您的語法草率,可能會使您的代碼更難使用。 盡管Java允許以多種形式聲明數組(例如, int variable[]
, int [] variable
, int[] variable
),但只有最后一種是常用的。 我強烈建議始終將數組聲明為type[] variableName
,即使您不必這樣做。 同樣,在編寫塊( if
, else
, for
等)時,請始終使用{ }
,因為這會使您的代碼更易於閱讀,並且將來可以更安全地進行修改。
if語句中有錯誤。
見評論:
public static int ByLogs(int n)
{
double y = Math.floor(Math.log(n)/Math.log(2));
return (int)Math.pow(2, y + 1);
}
public static void main(String[] args)
{
int input_array[] = {-1,2,4,0,3};
int [] segment_array;
int n = input_array.length;
//for positive n
if( (n & (n - 1)) == 0 ) {
segment_array = new int[(2*(input_array.length))-1];
} else {
segment_array = new int[(2*(ByLogs(input_array.length)))-1];
}
//Arrays.fill(segment_array,999);
System.out.println(segment_array.length);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.