不兼容的类型:条件表达式 void 中的错误类型无法转换为布尔值。请协助
Posted
技术标签:
【中文标题】不兼容的类型:条件表达式 void 中的错误类型无法转换为布尔值。请协助【英文标题】:incompatible types: bad type in conditional expression void cannot be converted to Boolean. please assist 【发布时间】:2021-09-11 15:33:26 【问题描述】:下面是我的代码.....
我正在尝试使用 " (...)? IntStream.range(...).forEach(i->......):false;
公共类 CheckAnagram
boolean status=false;
int countForStr1=0;
int countForStr2=0;
String str1ToLowerCase,str2ToLowerCase;
public boolean isAnagram(String str1, String str2)
str1ToLowerCase=str1.toLowerCase().trim();
str2ToLowerCase=str2.toLowerCase().trim();
status = (str1ToLowerCase.length()==str2ToLowerCase.length())?
IntStream.range(0, str1ToLowerCase.length()).forEach(i->
char tempChar=str1ToLowerCase.charAt(i);
IntStream.range(0, str1ToLowerCase.length()).forEach(j->
if(str1ToLowerCase.charAt(j)==tempChar)
countForStr1++;
if(str2ToLowerCase.charAt(j)==tempChar)
countForStr2++;
);
): false;
【问题讨论】:
代码基本上是(someCondition) ? IntStream.range(...).forEach(i->...) : false
和forEach
不返回任何东西/返回void
。
哦,所以我必须在 forEach 方法中返回一些东西?
你不能从那个方法返回任何东西,它是一个流终止方法,不能改变。相反,您应该删除整个三元内联 if 而是编写一个更具可读性和表现力的 if (someCondition) IntStream stuff; status = true; else status = false;
【参考方案1】:
在声明中
status = (str1ToLowerCase.length()==str2ToLowerCase.length())?
如果条件为真,则需要为 status 赋值,然而
IntStream.range(0, str1ToLowerCase.length()).forEach(i->
char tempChar=str1ToLowerCase.charAt(i);
IntStream.range(0, str1ToLowerCase.length()).forEach(j->
if(str1ToLowerCase.charAt(j)==tempChar)
countForStr1++;
if(str2ToLowerCase.charAt(j)==tempChar)
countForStr2++;
);
)
这段代码不会返回任何东西,它只是执行一些操作。这里没有什么可以退回的。 For each 不会返回任何东西,所以你得到 void 并且代码然后将 void 分配给一个变量。你可以试试这样的:
status = str1ToLowerCase.length() == str2ToLowerCase.length();
if (status)
IntStream.range(0, str1ToLowerCase.length()).forEach(i ->
char tempChar = str1ToLowerCase.charAt(i);
IntStream.range(0, str1ToLowerCase.length()).forEach(j ->
if (str1ToLowerCase.charAt(j) == tempChar)
countForStr1++;
if (str2ToLowerCase.charAt(j) == tempChar)
countForStr2++;
);
);
【讨论】:
以上是关于不兼容的类型:条件表达式 void 中的错误类型无法转换为布尔值。请协助的主要内容,如果未能解决你的问题,请参考以下文章
“void(*)(int wall)”类型的 C++ 参数与“int”类型的参数不兼容