java - 我如何计算 word 中常量的索引并在 java 中对其求和?

标签 java

我无法解决下面提到的问题。我想在控制台中看到从扫描仪插入的字符串的正确索引。但是此代码显示第一个字符的索引,它找到但不显示字符串索引的正确总和:

public class task8 {

    public static void main(String[] args) {
        Scanner sc= new Scanner(System.in);

        System.out.println("Insert word:");

        String str;
        str = sc.nextLine();

        char [] consonants = {'b', 'c', 'd', 'f','g','j','h','q','x','z','l','m','p','s','r' , 'n', 't'};
        int conlenth = consonants.length;
        int sum_ind =0;


        for (int s=0; s < str.length(); s++){
            for ( int i = 0; i < conlenth ; i++){
                char ch_cons = consonants[i];
                char ch_str = str.charAt(s);
                int con_ind = str.indexOf(ch_str);
                sum_ind = sum_ind + con_ind;
                if (ch_str == ch_cons){
                    System.out.println( "cons. = " + ch_cons + " index = " + con_ind );

                }
            }
        }
        System.out.println("summ index = " + sum_ind);
    }
}

最佳答案

对我来说,您应该简单地将 if 测试中的增量移动到仅当我们有匹配项时才增加,如下所示:

...
int con_ind = str.indexOf(ch_str);
if (ch_str == ch_cons) {
    sum_ind += con_ind;
    System.out.println( "cons. = " + ch_cons + " index = " + con_ind );
}

响应更新:

你的程序还有一个问题,你不应该使用 str.indexOf(ch_str) 来获取当前字符的索引,因为它会给你第一个匹配字符的索引在完整的 String 中,如果您在输入的 String 中有多次相同的字符,那么这是不正确的,您应该简单地使用 s 而不是已经遍历 String 的字符。

正确的代码是这样的:

main: for (int s=0; s < str.length(); s++){
    char ch_str = str.charAt(s);
    for ( int i = 0; i < conlenth ; i++){
        char ch_cons = consonants[i];
        if (ch_str == ch_cons){
            sum_ind += s;
            System.out.println( "cons. = " + ch_cons + " index = " + s );
            continue main;
        }
    }
}

注意:当我们有匹配项时,为了在内部循环中停止,我使用标签直接进入主循环的下一个迭代。

输出:

Insert word:
hello
cons. = h index = 0
cons. = l index = 2
cons. = l index = 3
summ index = 5

更快的方法可能是使用 switch 语句而不是内部循环,如下所示:

for (int s=0; s < str.length(); s++){
    char ch_str = str.charAt(s);
    switch (ch_str){
        case 'b':
        case 'c':
        ...
        case 'z':
            sum_ind += s;
            System.out.println( "cons. = " + ch_cons + " index = " + s );
            break;
    }
}

关于java - 我如何计算 word 中常量的索引并在 java 中对其求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39172364/

相关文章:

java - 通过 gremlin 服务器公开的 Titan 图的 ORM

java - 具有比较器实现的Java PriorityQueue不会返回字符串的相反顺序

java - 如何将字符串转换为日期,然后转换为其他格式?

java - 如何在java中一次合并两个java对象列表

java - Java中Windows 7输入法自动切换字符宽度

java - 从文件读取时出现 ArrayIndexOutOfBoundsException

Java MyBatis Freemarker 动态 SQL

java - Hibernate 与 Grails

Java - 为什么静态在这种情况下很重要

java - Hamcrest 的 lessThan 无法编译