【问题标题】:Java For Loop Ignores i Position when Letter of Array is the SameJava For循环在数组字母相同时忽略i位置
【发布时间】:2019-04-06 15:49:19
【问题描述】:
import java.util.Scanner;
import java.lang.*;

public class testing {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        char[] engArray = {'A','B','C','D','E','F','G','H','I'};
        String stringEngArray = String.valueOf(engArray);

        System.out.println("Text input");
        String input2 = input.nextLine().toUpperCase();

        int inputedOffset = 4;

        char[] finalArray = inpute2.toCharArray();

        for (int i = 0; i < inputedText.length(); i++) {
            int arrayPosition = inpute2.indexOf(inputedText.charAt(i));
            int engPosition = stringEngArray.indexOf(inputedText.charAt(i));
            int test = (arrayPosition % inputedOffset);
            int newTest = engPosition+test;
            finalArray[i] = engArray[newTest];

        }
        String output = new String(finalArray);
        System.out.println(output);

    }
}

我正在尝试更改用户输入的文本以完成一些基本加密。

当我输入 abcd 或 tesla 或 world 时,输出按预期工作,并且正在更改为 aceg 到 tfuoa 到 wptod 当我输入 aaaa 或 aabbcc 或通常在文本上重复一个字母时会出现问题。在第二次 for 循环找到相同的字母时,它只使用第一次读取的相似字母的数组位置。

有什么想法吗?

【问题讨论】:

    标签: java string loops for-loop char


    【解决方案1】:

    发生这种情况是因为inputedText.indexOf(inputedText.charAt(i));,这就是导致它返回相同索引的原因,因为它只会抓取a 的第一次出现,这对于每个a 字符都是相同的。

    你正在尝试获取数组位置,但是当数组位置已经是变量i时,为什么要这样做?

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        char[] engArray = { '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' };
        String stringEngArray = String.valueOf(engArray);
    
        System.out.println("Text input");
        String inputedText = input.nextLine().toUpperCase();
    
        int inputedOffset = 4;
    
        char[] finalArray = inputedText.toCharArray();
    
        for (int i = 0; i < inputedText.length(); i++) {
            int engPosition = stringEngArray.indexOf(inputedText.charAt(i));
            int test = (i % inputedOffset);
            int newTest = engPosition + test;
            finalArray[i] = engArray[newTest];
    
        }
        String output = new String(finalArray);
        System.out.println(output);
    }
    

    【讨论】:

    • 非常感谢
    【解决方案2】:

    您正在使用indexOf() 获取数组位置。这将始终返回该字符在字符串中第一次出现的位置。
    您可以简单地使用i 作为数组位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-05
      • 2014-07-24
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      • 2013-04-26
      相关资源
      最近更新 更多