Java 编译期间,变量的基元类型没有字段x

Java 编译期间,变量的基元类型没有字段x,java,Java,我编写了一个java程序来比较两个字符串,在编译时我得到了一个错误:length1的基本类型int没有字段j 标记“,”上的语法错误。期望 这是我的节目: import java.util.*; public class StringCompare { public static void main(String args[]){ String str1, str2; int i,j, flag=0; Scanner sc = new S

我编写了一个java程序来比较两个字符串,在编译时我得到了一个错误:length1的基本类型int没有字段j 标记“,”上的语法错误。期望

这是我的节目:

import java.util.*;

public class StringCompare {
    public static void main(String args[]){
        String str1, str2;
        int i,j, flag=0;
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the first string \n");
        str1=sc.nextLine();
        System.out.println("Enter the next string \n");
        str2=sc.nextLine();
        int length1=str1.length();
        int length2=str2.length();
        if(length1!=length2){
            System.out.println("The strings are not equal");
        }
        else
        {
            for(i=1,j=1;i<=length1, j<=length2;i++,j++){
                if(str1.charAt(i)!=str2.charAt(j)){
                    flag=1;
                    break;
                }
            }
            if(flag==0)
                System.out.println("The strings are equal \n");
            else
                System.out.println("The strings are not equal \n");
        }
    }
}
import java.util.*;
公共类字符串比较{
公共静态void main(字符串参数[]){
字符串str1,str2;
int i,j,flag=0;
扫描仪sc=新的扫描仪(System.in);
System.out.println(“输入第一个字符串\n”);
str1=sc.nextLine();
System.out.println(“输入下一个字符串\n”);
str2=sc.nextLine();
int length1=str1.length();
int length2=str2.length();
如果(长度1!=长度2){
System.out.println(“字符串不相等”);
}
其他的
{

对于(i=1,j=1;i在<<代码>中,对于循环,您不能有逗号分隔的条件列表。必须有一个表达式计算为<代码>真< /COD>或<代码> false < /代码>。

for
循环的第一部分,您可以自由地使用逗号分隔的初始化语句列表,这可能就是您所想的


这里阅读更多:

在<<代码>中,对于Load,您不能有逗号分隔的条件列表。必须有一个表达式计算为<代码>真或<代码> false < /C> >。< /P> 在
for
循环的第一部分,您可以自由地使用逗号分隔的初始化语句列表,这可能就是您所想的


阅读此处了解更多信息:

因为length1和length2在for循环中具有相同的值,所以您只需要
i
变量。将其简化为:

for (i = 0; i < length1; i++){
    if(str1.charAt(i) != str2.charAt(i)){
        flag = 1;
        break;
    }
}
(i=0;i{ if(str1.charAt(i)!=str2.charAt(i)){ flag=1; 打破 } }

编辑:您的代码中也有一个bug。假设字符串长度为3,循环从1变为3,当调用str1.charAt(3)(i==3)时,它将崩溃。您需要从0开始,然后停止到2(i因为length1和length2在for循环中具有相同的值,所以您只需要
i
变量。将其简化为:

for (i = 0; i < length1; i++){
    if(str1.charAt(i) != str2.charAt(i)){
        flag = 1;
        break;
    }
}
(i=0;i{ if(str1.charAt(i)!=str2.charAt(i)){ flag=1; 打破 } }

编辑:您的代码中也有一个错误。假设字符串长度为3,循环从1变为3,当调用str1.charAt(3)(i==3)时,它将崩溃。您需要从0开始并停止到2(ifor
范围错误的字符串索引的原因(i=0;i
是指编译器试图访问字符串中不存在的点。它应该是
for(i=1;ifor
(i=0;ifor(i=1;i可能意味着编写
&&
而不是
。因此,这可能是合适的修复方法。我用&&替换了,但在编译时,我得到了错误:java.lang.String.charAt处的字符串索引超出范围(未知源代码)@BijoyJoseph:这不是编译错误,这是运行时异常。这意味着代码中存在逻辑缺陷,但至少是在编译。您需要附加一个调试器并遍历代码以查看错误,或者更仔细地查看堆栈跟踪。我建议阅读“Java中的堆栈跟踪是什么”.这对你会有很大帮助。我是认真的。错误是你有
(@Gendarme,你需要在零开始
I
j
,而不是一)。他可能打算编写
&&
而不是
。因此,这可能是合适的修复方法。我用&&替换了,但在编译时,我得到了错误:java.lang.String.charAt处的字符串索引超出范围(未知源代码)@BijoyJoseph:这不是编译错误,这是运行时异常。这意味着代码中存在逻辑缺陷,但至少是在编译。您需要附加一个调试器并遍历代码以查看错误,或者更仔细地查看堆栈跟踪。我建议阅读“Java中的堆栈跟踪是什么”.这对你会有很大帮助。我是认真的。错误是你有
(@Gendarme,你需要在零开始
I
j
,而不是一)。我尝试了你的方法,但仍然得到一个编译错误我尝试了你的方法,但仍然得到一个编译错误顺便说一句,除非这是为了练习,否则你的代码完全没有必要。你只需执行
if(str1.equals(str2))System.out.print(“字符串相等”);else System.out.print(“字符串不相等”);
@Gendarme是的。它只是为了练习:)。我想使用很少的内置函数。顺便说一句,除非这是为了练习,否则你的代码是完全不必要的。你可以简单地执行
if(str1.equals(str2))System.out.print(“字符串相等”);else System.out.print(“字符串不相等”);
@Gendarme是的。这只是为了练习:)。我想使用很少的内置函数。如果从索引1(I=1)开始循环,代码不会比较索引0处的第一个字符。如果从索引1(I=1)开始循环,代码不会比较索引0处的第一个字符。