空密码 -- 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);
}
我正在尝试为学校作业编写空密码,但我不知道自己做错了什么。
密码应该从模式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);
}