我对这段代码有问题:
if (90 >>= angle =<< 180)
错误的解释是:
赋值语句左侧必须是一个变量。
我理解这句话的意思,但是我该如何将上述代码转换为正确的代码呢?
我对这段代码有问题:
if (90 >>= angle =<< 180)
错误的解释是:
赋值语句左侧必须是一个变量。
我理解这句话的意思,但是我该如何将上述代码转换为正确的代码呢?
我看到您的代码中有一些错误。
您可能使用了数学术语
90 <= angle <= 180,意思是角度在90-180范围内。
if (angle >= 90 && angle <= 180) {
// do action
}
(90 <= angle) <= 180
,这是将布尔值与整数进行比较,这是不允许的。 - Doradus//If "x" is between "a" and "b";
.....
int m = (a+b)/2;
if(Math.abs(x-m) <= (Math.abs(a-m)))
{
(operations)
}
//如果总和不是偶数,就必须使用浮点数转换;
简单的例子:
//if x is between 10 and 20
if(Math.abs(x-15)<=5)
public static boolean between(int variable, int minValueInclusive, int maxValueInclusive) {
return variable >= minValueInclusive && variable <= maxValueInclusive;
}
return i >= minValueInclusive && i <= maxValueInclusive
呢? - user<<=
表示“左移赋值”,类似于 +=
。例如 x <<= 1
是指 x = x << 1
。这就是为什么 90 >>= angle
无法解析的原因。另外,正如其他人所说,Java 没有一种优雅的语法来检查某个数字是否在一个区间内,所以您必须按照长时间的方式来做。它也不能执行 if (x == 0 || 1)
,只能将其写成冗长的形式。
您是否在为Android编写Java代码?如果是的话,您应该写成:
也许应该这样写:
if (90 >= angle && angle <= 180) {
如果将代码更新为更好的样式(如某些建议),则会得到:
if (angle <= 90 && angle <= 180) {
<
和>
符号,并且实际上想要...if (angle >= 90 && angle <= 180) {
我认为使用org.apache.commons.lang3.Range是一个不错的解决方案。它还可以与Guava Preconditions很好地集成,用于参数检查。下面是一些示例代码:
import org.apache.commons.lang3.Range;
import java.util.List;
class Scratch {
public static void main(String[] args) {
// Create a range object
Range<Double> validRange = Range.between(90.0, 180.0);
// and some test values
List<Double> testValues = List.of(65.3, 89.99, 90.0, 90.11, 134.4, 177.7, 180.00, 180.000001, 32321.884);
// Test them all
for (Double testValue : testValues) {
// Check if it's in the range
final boolean inRange = validRange.contains(testValue);
System.out.println(String.format("[%f] in range [%b]", testValue, inRange));
}
}
}
它会打印出来
[65.300000] in range [false]
[89.990000] in range [false]
[90.000000] in range [true]
[90.110000] in range [true]
[134.400000] in range [true]
[177.700000] in range [true]
[180.000000] in range [true]
[180.000001] in range [false]
[32321.884000] in range [false]
if (90 >= angle && angle <= 180 ) {
(你是不是想说90度是小于角度angle
?如果是的话,应该这样写:90 <= angle
)
=
,编译器就会报错 ... if (9 = x)
- 编译错误 - if (x = 9)
- 在C中始终有效 - peter90 >= angle
,但正如我在答案中提到的那样,很明显 OP 的意思是在 90 到 180 之间,这就是为什么我保留它的原因。感谢取消点赞。 - aliteralmind我认为使用静态方法可以提高可读性,如果将这种静态方法定义为标准,还可以在性能方面有所改进:
比如说,在java.lang.Math
中,你可以有一个方法isBetween(int toCheck, int from, int to)
,它的定义如下:
public static boolean isBetween(int toCheck, int from, int to){
// eventually validate the range
return from <= toCheck && toCheck <= to;
}
第一个好处是,如果你import static Math.isBetween
,那么你可以像这样编写代码
if(isBetween(userInput, 0, 16)){
//...
}
第二个好处是,多次调用此方法(例如在字符串、数组或其他静态大小的数据结构中进行边界检查)可以导致易于C2编译的方法(可能是内联的),最终如果有人指出HotSpot编译器生成了分支,由于存在条件跳转,则可以编写一个改进,生成无分支代码,每个应用程序都可以受益,只需升级到更高版本的运行时。
另一个可读性的改进可以来自Valhalla项目:如果int
可以有方法,那么您只需编写if(userInput.isBetween(0, 16))
if (age >= 90 && age <=180) {
// statements
}
if (90 >>= angle =<< 180 )
没有意义,而且我不清楚你是否正在做你认为你正在做的事情。 - jww>>=
不是比较运算符,而是位移赋值运算符。 - killjoy