变量的基本类型在编译期间没有字段x

时间:2016-10-11 19:36:44

标签: 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 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");
        }
    }
}

3 个答案:

答案 0 :(得分:4)

for循环中间,您不能拥有以逗号分隔的条件列表。您的表达式必须仅为truefalse

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

请阅读此处了解更多信息:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html

答案 1 :(得分:1)

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

for (i = 0; i < length1; i++){
    if(str1.charAt(i) != str2.charAt(i)){
        flag = 1;
        break;
    }
}
编辑:你的代码中也有一个错误。让我们说你的字符串长度是3,你的循环从1到3,当str1.charAt(3)被调用(i == 3)时它会崩溃。你需要从0开始并停止到2(i&lt; length1)。

答案 2 :(得分:0)

for (i = 0; i < length1; i++)的范围错误的字符串索引的原因是编译器正在尝试访问字符串中不存在的点。它应该是for(i=1;i<=length1-1;i++)