[英]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.