空密码 -- Java

Null Cipher -- Java

我正在尝试为学校作业编写空密码,但我不知道自己做错了什么。

密码应该从模式class中给定的数字中获取字符。如果是“-1”,则结束程序并输出 return。如果模式 return 为“0”,则跳过该词并继续下一个模式值。任何其他整数和程序应该从那个地方的单词中获取字符。

所以在下面的例子中,模式是{1, 0, 0, 1, 5, -1} 文本是:"Hello, is it me you're looking for".

输出应该是:"Hmr"

但是我遇到了越界错误,当我调整它时,它没有打印正确的字符。

代码如下,请帮帮我

编辑:我更改它以便 runtimeError 消失,但现在我得到不正确的输出:"e'[space]"

ArrayList<Character> text;
ArrayList<Character> output;
int outputLen;
ArrayList<Integer> pattern;

public Preform()
{
    text = new ArrayList<Character>();
    output = new ArrayList<Character>();
    pattern = new ArrayList<Integer>();
    {
        pattern.add(1);
        pattern.add(0);
        pattern.add(0);
        pattern.add(1);
        pattern.add(5);
        pattern.add(-1);
    }
}

public void updateLength()
{
    outputLen = output.size();
}

public void stringToChar(String input)
{
    for (int i = 0;i < input.length();i++)
    {
        String value = input.substring(i,i+1);
        text.add(value.charAt(0));
    }
}

public void printString ()
{
    for (int i = 0; i < output.size();i++)
    {
        System.out.println(output.get(i) + ", ");
    }
}

public ArrayList<Character> run()
{
    int nullValue = 0;
    int textVal = 0;
    for (int i = 0; i < pattern.size(); i++)
    {
        nullValue = pattern.get(i);
        if (nullValue == -1)
        {
            return output;
        }
        else if (nullValue == 0)
        {
            textVal = nextWord(textVal);
        }
        else
        {
            textVal += nullValue;
            char temp = text.get(textVal);
            output.add(temp);
            textVal = nextWord(textVal);
        }
    }
    return output;
}

public int nextWord (int starting)
{
    // go to the next word
    int addVal = 0;
    do{
            starting++;
    } while(text.get(starting).equals(' '));
    addVal += starting;
    return addVal;
}

public static void main (String[] args)
{
    Preform event = new Preform();
    event.stringToChar("Hello, is it me you're "
            + "looking for");
    event.run();
    event.printString();
}

谢谢!

对于您的例外情况:在 运行 中,您必须检查 pattern.size() 而不是 test.size。始终查看出现异常的那一行。

类似的问题出现在 运行 中,您比较的是文本大小,但实际上是指模式

除此之外,您的代码非常复杂,即您可以简单地使用 "my string".split(" "); 而不是 nextWord。你会得到一个包含每个单词的字符串数组。还有一些其他问题,但这是你要弄清楚的(毕竟是作业)

编辑:您的主要逻辑问题是您在 运行 中使用 nextWord 的方式。 首先,您需要调整 nextowrd 以实际执行您想要的操作(跳至下一个 space,然后跳至下一个单词的开头):

public int nextWord (int starting)
{
    // go to the next word
    do{
            starting++;
    } while(!text.get(starting).equals(' '));
    // skip the space
    starting++;
    return starting;
}

您在 运行 中获得正确字符的逻辑也需要调整:

        else
        {
            char temp = text.get(textVal + nullValue - 1);
            output.add(temp);
            textVal = nextWord(textVal);
        }