簡體   English   中英

錯誤:嘗試從函數返回兩個變量時,代碼無法訪問。

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

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