gpt4 book ai didi

java - Java 中的意外编译错误

转载 作者:行者123 更新时间:2023-12-01 18:03:32 24 4
gpt4 key购买 nike

这是一个小代码,如果输入数组的长度是 2 的幂,则段数组的大小为 2*(input_array.length)-1 else 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 语句中声明变量,因为它超出了 scope 范围。一旦 block 结束。所以代替:

if (...) {
int[] a = ...;
} else {
int[] a = ...;
}

你可能想要:

int[] a; // declare the variable first, *then* initialize it
if (...) {
a = ...;
} else {
a = ...;
}

其次,你的条件语句被破坏了; & 的左侧是一个 int,但右侧是一个 boolean。按位与运算符支持这两种类型,但不能同时支持;至 convert a boolean to an int你可以简单地明确地这样做,例如

((input_array.length - 1) == 0) ? 1 : 0

检查是否input_array.length is a power of two你想要:

(input_array.length & (input_array.length - 1)) == 0

注意 -1 之后额外的右括号。

最后,您的语法很草率,这可能会使您的代码更难使用。尽管Java允许多种形式的数组声明(例如intvariable[]int[]variableint[]variable),但只有最后一种是常用的。我强烈建议始终将数组声明为 type[] variableName,即使您不必这样做。同样,在编写 block (ifelsefor 等)时始终使用 { },因为它使您的代码更容易阅读,并且将来修改起来更安全。

关于java - Java 中的意外编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38758115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com