繁体   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