![](/img/trans.png)
[英]Unreachable statement error when trying to return from a while loop - Java
[英]Error: Unreachable code when trying to return two variables from a function.
該程序訪問一個名為indata.txt的文件,該文件與程序本身保存在同一文件夾中。 它只是一個簡單的文本文件,其中保存有單詞:綠色黃色藍色紅色
使用分詞器,將這些顏色詞保存到名為String [] myarray;
的數組中String [] myarray;
int numTokens;
應該計算每個單詞保存在數組中的數量。
如果numTokens = 4;
,則myarray [numTokens]
= myarray [4]
然后,以相反的順序運行該數組。
在public static int mymethod
方法中,for循環使用numTokens貫穿數組。
變量int len;
應該算出最長的單詞有多少個字母。
然后該值應返回給main方法
public static void main (String[] args) throws java.io.IOException
,然后將值打印出來。
然后,將變量int indexvalue;
應該計算數組中最長單詞的位置。
例如:綠色= 0,黃色= 1,藍色= 2,紅色= 3。
然后應該使用int indexvalue;
打印出數組中最長的單詞int indexvalue;
System.out.println("The largest length of the array is " +myarray [indexvalue]);
但是,該程序無法正常工作。 此錯誤消息出現在編譯器輸出中:
錯誤:無法訪問的代碼
我需要將兩個變量都返回到main方法以將其打印出來。
我的程序有什么問題(如果有的話)?
`import java.io.*;
import java.util.*;
public class MyFileReader
{
public static int mymethod (String [] myarray, int len, int numTokens, int length, int lengths, int indexvalue) {
for (numTokens = 3; numTokens >=0; numTokens-- ) {
length = lengths;
lengths= myarray [numTokens].length();
if (length > lengths) {
len = length;
indexvalue = numTokens;
}
else {
len = lengths;
}
}
return len;
return indexvalue; // error is here
}
public static void main (String[] args) throws java.io.IOException
{
int len =0;
int length =0;
int lengths =0;
int indexvalue =0;
String s1;
String s2;
BufferedReader br = new BufferedReader (new FileReader ("indata.txt"));
s1 = br.readLine();
System.out.println ("The line is " + s1);
System.out.println ("The line has " + s1.length() + " characters");
System.out.println ();
System.out.println ("Breaking the line into tokens we get:");
int numTokens = 0;
StringTokenizer st = new StringTokenizer (s1);
String [] myarray;
myarray = new String[4];
while (st.hasMoreTokens())
{
s2 = st.nextToken();
myarray [numTokens]= s2;
numTokens++;
System.out.println (" Token " + numTokens + " is: " + s2);
}
System.out.print("\n");
for (numTokens = 3; numTokens >= 0; numTokens--) {
System.out.println("Value of array is " +myarray [numTokens]);
}
System.out.print("\n");
System.out.println("Largest length value is " + mymethod(myarray, len, numTokens, length, lengths, indexvalue));
System.out.println("Index value is " + mymethod(myarray, len, numTokens, length, lengths, indexvalue));
System.out.print("\n");
System.out.println("The largest length of the array is " +myarray [indexvalue]);
}
}`
return len;
return indexvalue; // error is here
Java不允許永遠不會執行的代碼。 這包括return語句后的所有代碼。 由於return語句退出該方法,因此永遠無法讀取該方法之后的所有內容。 通常,多個返回在if-else條件下分支,因此只能執行其中之一。
編輯:如果想法是一次返回多個變量,則可以返回一個數組,也可以從具有所需字段的新Class中返回一個自定義對象。
一個方法只能執行一個return
語句。 一旦返回值,程序將退出該方法。 return indexvalue
無法到達,因為它在另一個return語句之后。
如果必須返回兩個值,請嘗試使用int數組
public static int[] mymethod (String [] myarray, int len, int numTokens, int length, int lengths, int indexvalue){
int[] result = new int[2];
.
.
.
result[0] = len;
result[1] = indexvalue;
return result;
}
更好的解決方案是使用這些屬性創建一個對象,然后返回該對象。 干杯。
此方法“ mymethod”僅給出第一個return語句,然后死亡,您可以返回一個數組,或者僅刪除“ len”參數並返回其他語句。
或者,您可以這樣做:
System.out.println("Largest length value is " + myarray[numTokens].length());
然后清理方法的參數,因為它們看起來很混亂,不需要那么多參數,您可能會感到困惑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.