Java 三元运算符不是一个语句

Java 三元运算符不是一个语句,java,intellij-idea,ternary-operator,Java,Intellij Idea,Ternary Operator,我有以下三元表达式: ((!f.exists()) ? (f.createNewFile() ? printFile() : throw new Exception("Error in creating file")) : printFile()); 出于一个或多个原因,我不知道IDE对我说这不是一个声明。为什么?看起来您将其用作语句,而不是赋值 我认为你需要回到这样一个if-else条款: if (!f.exists()) { try { f.createNewFile

我有以下三元表达式:

((!f.exists()) ? (f.createNewFile() ? printFile() : throw new Exception("Error in creating file")) : printFile());

出于一个或多个原因,我不知道IDE对我说这不是一个声明。为什么?

看起来您将其用作语句,而不是赋值

我认为你需要回到这样一个if-else条款:

if (!f.exists()) {
   try {
      f.createNewFile();
      printFile();
   } catch(Exception e ) {
      System.out.println("Error in creating file");
   }
} else {
   printFile();
}

这是无效的,您需要返回一个值

printFile() : throw new Exception("Error in creating file")
试试这个

if(f.exists() || f.createNewFile()) {
  printFile();
}else{
  throw new Exception("Error in creating file");
}
“COND?Statement:Statement”构造是一个表达式。它不能用作语句。 在没有赋值的情况下,它可以在函数调用中解析条件参数或字符串连接中使用

Func( (COND ? param1 : param2) );
"Hi"+(con?"Miss":"Mr.")+"";

三元运算符中的语句必须是非void。他们需要归还一些东西

例如:

  • 考虑这样一种情况,count变量递增,我检查它的值并返回高于某个阈值的true或false
  • System.out.println((计数>10?真:假))
  • 与之相比,
    count>10?true:false
    编译器会抱怨这不是一条语句

不用回答问题,只需观察一个问题:您确定要让代码看起来像这样吗?如果我像这样写的话,我会踢自己,并且在几周后不得不重新审视它……是的,对我来说更容易阅读,而且我在我的代码中使用注释。你想通过投掷来获得什么?您知道三元运算符仅适用于赋值吗?您能在三元表达式中使用
throw
吗?@KevinEsche三元运算符不“仅适用于赋值”。我认为该错误是使用
f.createNewFile()
引发的,而不会引发自定义异常。至少当我为文件输入无效路径时。我认为建议的代码应该以不同的方式工作,我没有更改功能。即使答案与问题不完全一致,也接受链接正确解释问题。只是你提到赋值有点不合适:三元数的元素必须是表达式(throw不是表达式),三元数本身必须用作表达式(在示例中用作语句)。顺便说一句,Eclipse和javac都报告了
throw
上的语法错误。