簡體   English   中英

如何在 try-catch 塊之外使用變量

[英]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:27‌​2)

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM