我正在制作解密程序,而且我不太确定如何使用变量" cip"在我尝试捕获块的一边。我尝试移动3行,其中要求用户输入模式,但我遇到了其他问题。
我的代码是:
import java.util.*;
public class unscrambler //This class will encrpyt the program
{
public static void main (String [] args){
int cip= 0;
String user ="";
System.out.println("Please enter the code to unscramble");
Scanner inputScanner = new Scanner(System.in); //imports scanner reader
String userinput = inputScanner.next();
char[] charArray = userinput.toCharArray(); //sends userinput to charArray
int j=charArray.length;
Character [] array = new Character[j];
for(int w=0; w<j; w++){
array[w] = charArray[w];
}
int a=1;
System.out.println("Please enter the number cipher pattern (an integer)");
do{
try{
user = inputScanner.next();
cip = Integer.parseInt(user);
a=2;
System.out.println("your code is ");
for(int w =0; w<j;){
System.out.println(charArray[j]);
w+=cip;
}
if(cip<=0){
System.out.println("please enter number greater than zero");
a=1;
}
}catch(NumberFormatException f){
System.out.println("please enter a proper number");
}
}while(a==1);
}
}
答案 0 :(得分:0)
您只是在该区块中进行声明。
String user = inputScanner.next();
int cip = Integer.parseInt(user);
将这些添加到文件的开头,就在main()
行之后:
int cip = 0;
String user = "";
移动后的错误(没有=
内容)表示您在cip
阻止后使用try
,因此我们需要使用空数据初始化它try
失败的情况。
现在只需将您当前在try
区块中获得的行更改为:
// Remove the 'String' part.
user = inputScanner.next();
// Remove the 'int' part.
cip = Integer.parseInt(user);
然后你可以转到下一个不相关的错误。
答案 1 :(得分:0)
解决方案是将变量声明移到循环之外,或者将要在循环中使用它的位置移动。
Java不允许您在声明范围之外使用局部变量。周期。
我尝试移动3行,其中要求用户输入模式,但我遇到了其他问题。
嗯......你需要解决其他问题!
编程是这样的。您需要在您正在使用的编程语言的约束下工作。
我可以看到导致您最新错误的原因,但我不会告诉您它是什么。相反,我将告诉你如何为自己找到它。
“输出行”是Java Stacktrace。它包含大量有用的信息,您需要学习如何解释它。
java.lang.ArrayIndexOutOfBoundsException: 5
at unscrambler.main(unscrambler.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
Stacktraces通常会报告在正在运行的程序中某处抛出的异常。
第0步:找到堆栈跟踪。
第一行给出了异常的名称和消息。在这种情况下,异常的名称是ArrayIndexOutOfBounds
,消息是(只)“5”。
第1步:如果您无法识别异常的名称,请在javadocs中查找。
这是:link。现在阅读。
第2步:尝试了解该消息。在这种情况下,您只需要知道消息是超出范围的索引的值。但你应该能够猜测...基于异常的javadoc。 (通常消息提供的信息更多,但是这一消息是从编译的代码中抛出的,并且由于技术原因,很难产生更具信息性的错误。)
stacktrace的第二行告诉你抛出异常的位置。在这种情况下,在main
方法中,“unscrambler.java”的第35行......
第3步:在编辑器或IDE中打开源文件,看看该行的代码是什么。
在这种情况下,它(我认为)这一行:
System.out.println(charArray[j]);
第4步:现在你必须开始思考。 (思考是一个非常重要的部分调试!)该行怎么可能抛出该异常?可能是什么造成的?
在这种情况下,首先要考虑的是,在该行上只有一个地方用于进行数组索引,它是表达式charArray[j]
。这意味着......(你填写了详细信息)。但是......(你填写详细信息)来自哪里?看看本声明之前发生的事情。看到了吗? (如果不是,那就再看看。如果仔细观察,应该是非常明显的!)
剩下的就是让你理清......: - )