我写了一个程序代码,在这个程序中,一个单词被加密为一个依赖于固定参数的数字,比如“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++;
}
}
}
我试着找出错误,但我什么也没看到,是不是有什么我没有考虑到的?
3条答案
按热度按时间pbwdgjma1#
请调试您的程序。
return intArray[i]
将在第一次执行for循环时返回第一个字母的值。ykejflvf2#
你是在for循环中返回的,所以循环不会继续,并且会在第一次迭代后返回值。
jgovgodb3#
不应该将
return intArray[i]
放入for循环中,因为它在第一次迭代时中断循环并完成getNumber
方法。此外,您还加倍了for/while循环。因此,如果您使用
getNumber
方法修复问题,您将获得与word.length()
一样多的加密字。您应该:
getNumber
方法中返回单个整数或
int[]
(或者更好的String),并在getNumber
中使用for循环-这将是首选解决方案