Java &引用;找不到符号:变量";尽管声明了变量
当我编译下面的代码时,它说: “错误:找不到符号:变量最大值” 但是我确实定义了变量Java &引用;找不到符号:变量";尽管声明了变量,java,Java,当我编译下面的代码时,它说: “错误:找不到符号:变量最大值” 但是我确实定义了变量max public class Solution { public static boolean isOneEditDistance(String s, String t) { if (s.length() >= t.length() ) { StringBuilder a = new StringBuilder (s);
max
public class Solution {
public static boolean isOneEditDistance(String s, String t) {
if (s.length() >= t.length() ) {
StringBuilder a = new StringBuilder (s);
StringBuilder b = new StringBuilder (t);
int max = s.length();
int min = t.length();
}
else {
StringBuilder a = new StringBuilder (t);
StringBuilder b = new StringBuilder (s);
int max = t.length();
int min = s.length();
}
int flag = 0;
if ( (max-min)>1 )
return flase;
else if ( (max-min)==1 ) {
.....
变量/参数的范围不正确: 如果参数在{}范围内,则范围仅限于这些{} 因此,请将代码更改为此,以更改范围并解决问题:
public class Solution {
public static boolean isOneEditDistance(String s, String t) {
int max=0;
int min=0;
if (s.length() >= t.length() ) {
StringBuilder a = new StringBuilder (s);
StringBuilder b = new StringBuilder (t);
max = s.length();
min = t.length();
}
else {
StringBuilder a = new StringBuilder (t);
StringBuilder b = new StringBuilder (s);
max = t.length();
min = s.length();
}
int flag = 0;
if ( (max-min)>1 )
return flase;
else if ( (max-min)==1 ) {
我更喜欢如下所示的代码,这也避免了由于a和b在if语句中包含的块中的作用域而引起的问题
if( s.length() < t.length() ){
String h = s; s = t; t = h;
}
// now s is not shorter than t
int max = s.length();
int min = t.length();
StringBuilder a = new StringBuilder(s);
StringBuilder b = new StringBuilder(t);
if(s.length()
无法查看变量的原因是由于变量的范围。变量可以“深入”可见性链,但不能“挖掘”。因为变量是在if statement
中声明的,所以变量只能在该if语句中可见,因为它不能“挖掘”
以下是我出色的MS绘画技巧,它拙劣地描述了我无法“挖掘”范围外可见性的含义:
变量已在if(s.length()>=t.length())
块中初始化。因此,这些变量仅限于此
解决方案:在条件出现之前对其进行初始化。看到这张图片,我会说您的名字选择得很好;-)抱歉,无法抗拒:)@ErickG.Hagstrom-Oops。令人惊讶的是,8个月前没有人注意到这一点。谢谢!:)一般问题的一个具体案例是的,特别是关于“变量声明可能超出范围”的部分。如果使用Math.abs()“在条件之前声明它们”,而不是“在条件之前初始化它们”,则可以避免整个混乱。这不是初始化问题;编译器无法识别它们已被声明。