Java 使用三元运算符时的未分配变量错误 publicstaticvoidmain(字符串[]args){ 扫描仪输入=新扫描仪(系统输入); 字符串s=in.nextLine(); 字符串l,b; 对于(int i=0;i0 ?l=s.子串(i,i+3) :l=s.子字符串(i+1,i+4);//赋值 s、 子串(i,i+3)。与(s.substring(i+1,i+4))
相比,首先,您不能像您试图做的那样将三元赋值嵌套到Java 使用三元运算符时的未分配变量错误 publicstaticvoidmain(字符串[]args){ 扫描仪输入=新扫描仪(系统输入); 字符串s=in.nextLine(); 字符串l,b; 对于(int i=0;i0 ?l=s.子串(i,i+3) :l=s.子字符串(i+1,i+4);//赋值 s、 子串(i,i+3)。与(s.substring(i+1,i+4)),java,string,Java,String,相比,首先,您不能像您试图做的那样将三元赋值嵌套到l和b(而且您似乎也尝试并将相同的值分配给两者)。您可以在循环之前这样做 public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.nextLine(); String l,b; for(int i=0;i<(s.len
l
和b
(而且您似乎也尝试并将相同的值分配给两者)。您可以在循环之前这样做
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
String l,b;
for(int i=0;i<(s.length()-2);i++) {
if(i==0) {
l=s.substring(i,i+3);
s.substring(i,i+3).compareTo(s.substring(i+1,i+4))>0
? l=s.substring(i,i+3)
: l=s.substring(i+1,i+4); // assigned values
s.substring(i,i+3).compareTo(s.substring(i+1,i+4))<0
? b=s.substring(i,i+3)
: b=s.substring(i+1,i+4);
}
然后使初始循环条件1
类似
b = l = s.substring(0, 3).compareTo(s.substring(1, 4)) > 0 ?
s.substring(0, 3) : s.substring(1, 4);
for(int i=1;i<(s.length()-2);i++){
// ...
}
如果循环从
1
开始,则无需测试0
,三元表达式的目的是返回值。具体来说,表达式有一个从两个可能值中选择的值,具体取决于条件。该值可以在任何其他表达式可以使用的地方使用,例如
for (int i = 1; i < (s.length()-2); i++) {
// ...
}
您试图使用它来代替if
语句。也就是说,您将在?
和:
部分中放置有效的语句,并忽略表达式的值:
x = (isSomeTestTrue()) ? 2 : 5;
System.out.println((isSomeOtherTestTrue()) ? "this" : "that");
不要这样做。这不是三元表达式的用途。而且它也不会总是起作用(我认为像这样使用三元表达式可能不足以满足l
的“确定赋值”规则,尽管规则很复杂,我仍在努力弄清楚).注意:在某些语言中,如Perl或JavaScript,这可能是一个可以接受的习惯用法。但我认为您不应该在Java或C#中这样做
如果有两条语句,如果条件为真,则要执行一条语句,如果条件为假,则要执行另一条语句,请使用If
s.substring(i,i+3).compareTo(s.substring(i+1,i+4)) > 0
? l = s.substring(i,i+3)
: l = s.substring(i+1,i+4);
或者,在这种情况下,您可以使用三元运算符并将结果分配到l
:
if (s.substring(i,i+3).compareTo(s.substring(i+1,i+4)) > 0) {
l = s.substring(i, i+3);
} else {
l = s.substring(i+1, i+4);
}
因为完全糟糕的代码风格而进行向下投票。说真的,如果你想让人们阅读你的代码,你需要做得比这更好。依我看,这近乎无礼!由Niall Cosgrove修复,meHint有点贡献:即使这段代码格式正确,也绝对糟糕。你真的想学习“干净代码”吗以Robert Martin为例,了解即使是这一点点代码也可以改进多少。
l = (s.substring(i, i+3).compareTo(s.substring(i+1, i+4)) > 0)
? s.substring(i, i+3)
: s.substring(i+1, i+4);