Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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);