[英]How to use variable outside of try-catch block
我正在制作一个解密程序,但我不太确定如何在我的 try catch 块之外使用变量“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);
}
}
您只是在该块中进行声明。
String user = inputScanner.next();
int cip = Integer.parseInt(user);
将这些添加到文件的开头,就在main()
行之后:
int cip = 0;
String user = "";
移动后的错误(没有=
东西)表明你在try
块之后使用了cip
,所以我们需要用空数据初始化它,以防try
失败。
现在只需将当前在try
块中的行更改为:
// Remove the 'String' part.
user = inputScanner.next();
// Remove the 'int' part.
cip = Integer.parseInt(user);
然后您可以继续处理下一个不相关的错误。
解决方案是将变量声明移到循环外,或者将要使用它的位置移到循环内。
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 中查找。
这是: 链接。 现在阅读。
第 2 步:尝试理解消息。 在这种情况下,你只需要知道的信息是,这是超出范围的指数值。 但是您应该能够根据异常的 javadoc 猜测...... (通常这些消息的信息量更大一些,但这个信息是从编译代码中抛出的,由于技术原因,很难产生信息量更大的错误。)
堆栈跟踪的第二行告诉您异常在哪里抛出。 在本例中,“unscrambler.java”的第 35 行 ... 在main
方法中。
第 3 步:在编辑器或 IDE 中打开源文件,然后查看该行代码的内容。
在这种情况下,它是(我认为)这一行:
System.out.println(charArray[j]);
第 4 步:现在您必须开始思考。 (思考是调试非常重要的部分!)那行怎么可能抛出那个异常? 是什么原因造成的?
在这种情况下,要观察的第一个想法是该行上只有一个地方在进行数组索引,它是表达式charArray[j]
。 所以这意味着......(您填写详细信息)。 但是……(您填写详细信息)是从哪里来的? 看看在此声明之前发生了什么。 看到了吗? (如果没有就再看一遍,仔细看应该很明显吧!)
剩下的由你来整理...... :-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.