Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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/2/jsf-2/2.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
for循环中的String.charAt(i)在Java中不起作用_Java_Loops_Variables_If Statement_Charat - Fatal编程技术网

for循环中的String.charAt(i)在Java中不起作用

for循环中的String.charAt(i)在Java中不起作用,java,loops,variables,if-statement,charat,Java,Loops,Variables,If Statement,Charat,我有一个任务,要编写一个方法,该方法接受两个字符串作为参数,并返回一个值1,0,-1(分别),如果第一个字符串按字典顺序在第二个字符串之前、相等或之后,只使用charAt()和length()字符串类中的方法 问题是,即使我在for循环中初始化了一个int变量,它在以后使用charAt()方法时在循环中也无法识别它们。编译器一直在说“意外类型。必需:变量;找到:值”(使用BlueJ) 公共类单词{ 私人字符串(st); /** *小写字母范围:a=97,z=122。 * *范围大写字母:A=6

我有一个任务,要编写一个方法,该方法接受两个字符串作为参数,并返回一个值
1
0
-1
(分别),如果第一个字符串按字典顺序在第二个字符串之前、相等或之后,只使用
charAt()
length()
字符串类中的方法

问题是,即使我在for循环中初始化了一个int变量,它在以后使用
charAt()
方法时在循环中也无法识别它们。编译器一直在说“意外类型。必需:变量;找到:值”(使用BlueJ)

公共类单词{
私人字符串(st);
/**
*小写字母范围:a=97,z=122。
* 
*范围大写字母:A=65,Z=90。
*/
公共整数myCompare(字符串s1、字符串s2){
字符[]字母表={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
//第一环路i;
//第二回路j;
//第三回路k;
对于(int i=0;is2.字符(0)){
返回-1;
}
否则{
返回0;
}*/
}
}
那么我到底做错了什么?感谢您的帮助。

\u st.charAt(i)+=32

这是毫无意义的

\u st.charAt(i)
返回一个
char
。如果不将结果存储在某个变量中,则向该字符添加32没有任何意义

您可以将其替换为:

 char c = _st.charAt(i);
 c += 32;
\u st.charAt(i)+=32

这是毫无意义的

\u st.charAt(i)
返回一个
char
。如果不将结果存储在某个变量中,则向该字符添加32没有任何意义

您可以将其替换为:

 char c = _st.charAt(i);
 c += 32;

享受这种工作方式

public static int compareWords(String mot1,String mot2){

    String toLowerCase = mot1.toLowerCase();
    String toLowerCase1 = mot2.toLowerCase();
    int answer=0,lenght=(mot1.length()<mot2.length())?mot1.length():mot2.length();

    for (int i = 0; i < lenght; i++) {

        if (toLowerCase.charAt(i)<toLowerCase1.charAt(i)) {
            answer=1;
          //  System.out.println("loop1:"+answer);
        }else{
            if (toLowerCase.charAt(i)>toLowerCase1.charAt(i)) {

            answer=-1;
            break;
            }
        }
    }
    if (answer==0) {
        if (mot1.length()<mot2.length()) {
            answer=1;
         //   System.out.println("if1:"+answer);
        }else {
            if (mot1.length()==mot2.length()) {
                answer=0;
            }else answer=-1;
        }
    }
   // System.out.println("answer:"+answer);
    return answer;
}
publicstaticintcompareWords(字符串mot1,字符串mot2){
字符串toLowerCase=mot1.toLowerCase();
字符串toLowerCase1=mot2.toLowerCase();

int answer=0,lenght=(mot1.length()享受这种工作方法吧

public static int compareWords(String mot1,String mot2){

    String toLowerCase = mot1.toLowerCase();
    String toLowerCase1 = mot2.toLowerCase();
    int answer=0,lenght=(mot1.length()<mot2.length())?mot1.length():mot2.length();

    for (int i = 0; i < lenght; i++) {

        if (toLowerCase.charAt(i)<toLowerCase1.charAt(i)) {
            answer=1;
          //  System.out.println("loop1:"+answer);
        }else{
            if (toLowerCase.charAt(i)>toLowerCase1.charAt(i)) {

            answer=-1;
            break;
            }
        }
    }
    if (answer==0) {
        if (mot1.length()<mot2.length()) {
            answer=1;
         //   System.out.println("if1:"+answer);
        }else {
            if (mot1.length()==mot2.length()) {
                answer=0;
            }else answer=-1;
        }
    }
   // System.out.println("answer:"+answer);
    return answer;
}
publicstaticintcompareWords(字符串mot1,字符串mot2){
字符串toLowerCase=mot1.toLowerCase();
字符串toLowerCase1=mot2.toLowerCase();

int answer=0,lenght=(mot1.length()此外,
\u st.charAt(i)+=32;
对结果没有任何影响,您的算法有点复杂。您应该使用两个字符串进行比较,而不是通过字母表:

public static int myCompare(String string1, String string2) {
    int result = 0;
    int differenceCases='a'-'A';
    int end = (string1.length() > string2.length())
            ? string2.length()
            : string1.length();
    for (int index = 0; index < end; index += 1) {
        int char1=(string1.charAt(index)>'Z')?(string1.charAt(index)-differenceCases):(string1.charAt(index));
        int char2=(string2.charAt(index)>'Z')?(string2.charAt(index)-differenceCases):(string2.charAt(index));
        int difference = char1-char2;
        if (difference == 0 || abs(difference) == differenceCases) continue;
        return (difference < 0) ? 1 : -1;
    }
    return result;
}
2) 您可以使用两个字符串的ASCII值

2aa)计算不同的位置

2ab)确保您有相同的案例进行比较

int char1=(string1.charAt(index)>'Z')?(string1.charAt(index)-differenceCases):(string1.charAt(index));
如果是小写,则减去大小写之间的差异('a'-'a')

2ba)如果差值为0,则有两个相同类型的字符

2bb)如果绝对差为“a”-“a”,则字母相同,但大小写混合

2bc)在每种情况下都没有区别,因此跳到下一个字母


2c)如果您有一个大于“a”-“a”的差值,请检查它是否为负值,因此
string2.charAt(i)
大于
string1.charAt(i)
,这意味着它在后面。

此外,
\st.charAt(i)+=32;
对结果没有任何影响,您的算法有点复杂。您应该使用两个字符串进行比较,而不是通过字母表:

public static int myCompare(String string1, String string2) {
    int result = 0;
    int differenceCases='a'-'A';
    int end = (string1.length() > string2.length())
            ? string2.length()
            : string1.length();
    for (int index = 0; index < end; index += 1) {
        int char1=(string1.charAt(index)>'Z')?(string1.charAt(index)-differenceCases):(string1.charAt(index));
        int char2=(string2.charAt(index)>'Z')?(string2.charAt(index)-differenceCases):(string2.charAt(index));
        int difference = char1-char2;
        if (difference == 0 || abs(difference) == differenceCases) continue;
        return (difference < 0) ? 1 : -1;
    }
    return result;
}
2) 您可以使用两个字符串的ASCII值

2aa)计算不同的位置

2ab)确保您有相同的案例进行比较

int char1=(string1.charAt(index)>'Z')?(string1.charAt(index)-differenceCases):(string1.charAt(index));
如果是小写,则减去大小写之间的差异('a'-'a')

2ba)如果差值为0,则有两个相同类型的字符

2bb)如果绝对差为“a”-“a”,则字母相同,但大小写混合

2bc)在每种情况下都没有区别,因此跳到下一个字母


2c)如果您有一个大于“a”-“a”的差值,请检查它是否为负值,因此
string2.charAt(i)
大于
string1.charAt(i)
,这意味着它在后面。

您可以查看
java.lang.String.compareTo()
java.lang.String.comparetognorecase()
?如果可以使用标准Java库函数,可以直接使用这些函数,如果不可以,可以参考相同的实现


我知道这是一条捷径,但它会让你更好地理解。

你可以看看
java.lang.String.compareTo()
java.lang.String.CompareTignoreCase()
?如果你可以使用标准java库函数,你可以直接使用它们,如果不可以,你可以参考它们的实现


我知道这是一条捷径,但它会让你更好地理解。

虽然这不会改变字符串本身,但如果它是应该这样做的话!@Charlie你不能改变字符串的存在。它是不可变的。虽然这不会改变字符串本身,但如果它是应该这样做的话!@Charlie你不能改变字符串的存在。它是不可变的。我会做
if(_st.charAt(I)<90)
,因为((char)95)不应该变成((char)127)!而且,你不能只使用
\u st.toUpperCase()
?如果你写了
char[]alphabet=“abcd…wxyz”。tocharray()
而不是
char[]alphabet={'a','b','c','d',…,'w','x','y','z'}
-前提是您自己键入了它。@mcepender或
char[]alphabet=new char[27];for(char c='a';c这是正确的。但是声明t