java For循环没有为每个数组索引返回不同的值

dfty9e19  于 2023-01-07  发布在  Java
关注(0)|答案(3)|浏览(138)

我写了一个程序代码,在这个程序中,一个单词被加密为一个依赖于固定参数的数字,比如“Software”变成了76389273。然而,for循环并没有为每个字母返回不同的值,而是为所有字母返回相同的值(第一个字母的值)。

import java.util.Scanner;

public class StringtoNumber {
    public static int getNumber(String word) {
        int value = 0;
        int intArray[] = new int[word.length()];
        for (int i = 0; i < word.length(); i++) {
            switch (word.charAt(i)) {
                case 'A':
                case 'B':
                case 'C':
                case 'a':
                case 'b':
                case 'c':
                    value = 2;
                    break;
                case 'D':
                case 'E':
                case 'F':
                case 'd':
                case 'e':
                case 'f':
                    value = 3;
                    break;
                case 'G':
                case 'H':
                case 'I':
                case 'g':
                case 'h':
                case 'i':
                    value = 4;
                    break;
                case 'J':
                case 'K':
                case 'L':
                case 'j':
                case 'k':
                case 'l':
                    value = 5;
                    break;
                case 'M':
                case 'N':
                case 'O':
                case 'm':
                case 'n':
                case 'o':
                    value = 6;
                    break;
                case 'P':
                case 'Q':
                case 'R':
                case 'S':
                case 'p':
                case 'q':
                case 'r':
                case 's':
                    value = 7;
                    break;
                case 'T':
                case 'U':
                case 'V':
                case 't':
                case 'u':
                case 'v':
                    value = 8;
                    break;
                case 'W':
                case 'X':
                case 'Y':
                case 'Z':
                case 'w':
                case 'x':
                case 'y':
                case 'z':
                    value = 9;
                    break;
            }
            intArray[i] = value;
            return intArray[i];
        }

        int result = 0;
        for (int i = 0; i < intArray.length; i++) {
            result += Math.pow(10, i) * intArray[intArray.length - i - 1];
        }
        return result;
    }

        public static void main (String[]arg){

            Scanner input = new Scanner(System.in);
            System.out.println("what word do you want to encrypt");
            String word = input.nextLine();
            int counter = 0;
            while (counter < word.length()) {
                System.out.print(getNumber(word));
                counter++;
            }
        }
    }

我试着找出错误,但我什么也没看到,是不是有什么我没有考虑到的?

pbwdgjma

pbwdgjma1#

请调试您的程序。return intArray[i]将在第一次执行for循环时返回第一个字母的值。

ykejflvf

ykejflvf2#

你是在for循环中返回的,所以循环不会继续,并且会在第一次迭代后返回值。

jgovgodb

jgovgodb3#

不应该将return intArray[i]放入for循环中,因为它在第一次迭代时中断循环并完成getNumber方法。
此外,您还加倍了for/while循环。因此,如果您使用getNumber方法修复问题,您将获得与word.length()一样多的加密字。
您应该:

  • 在main函数中迭代单词,并在getNumber方法中返回单个整数

  • 将getNumber的返回类型更改为int[](或者更好的String),并在getNumber中使用for循环-这将是首选解决方案

相关问题