Java 错误:尝试从函数返回两个变量时无法访问代码。

Java 错误:尝试从函数返回两个变量时无法访问代码。,java,Java,此程序访问名为indata.txt的文件,该文件与程序本身保存在同一文件夹中。它只是一个简单的文本文件,其中保存了以下文字: 绿黄蓝红 使用标记器,这些颜色词被保存到一个名为String[]myarray的数组中 intnumtokens应该计算每个单词保存在多少数组中 如果numTokens=4,然后myarray[numTokens]=myarray[4] 然后数组按相反顺序运行 在方法publicstaticintmymethod中,for循环使用numTokens运行数组 变量int l

此程序访问名为indata.txt的文件,该文件与程序本身保存在同一文件夹中。它只是一个简单的文本文件,其中保存了以下文字: 绿黄蓝红

使用标记器,这些颜色词被保存到一个名为
String[]myarray的数组中

intnumtokens
应该计算每个单词保存在多少数组中

如果
numTokens=4
,然后
myarray[numTokens]
=
myarray[4]

然后数组按相反顺序运行

在方法
publicstaticintmymethod
中,for循环使用numTokens运行数组

变量
int len
应该计算最长单词的字母数

然后,应该将该值返回给main方法

publicstaticvoidmain(字符串[]args)抛出java.io.IOException
,然后将打印出值

然后,变量
int indexvalue
应该计算数组中最长单词的位置

例如:绿色=0,黄色=1,蓝色=2,红色=3

然后,应使用
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
语句。一旦返回值,程序将退出该方法<代码>返回索引值
不可访问,因为它位于另一个返回语句之后。

一个方法只能执行一个
返回
语句。一旦返回值,程序将退出该方法<代码>返回索引值
不可访问,因为它位于另一个return语句之后

return len;
return indexvalue;            // error is here
Java不允许永远不会执行的代码。这包括return语句后面的任何代码。由于return语句退出该方法,因此它之后的任何内容都无法读取。通常,多个返回在if-else条件下进行分支,以便只能执行其中一个

编辑:如果想法是一次返回多个变量,则可以返回数组,也可以从包含所需字段的新类返回自定义对象

Java不允许永远不会执行的代码。这包括return语句后面的任何代码。由于return语句退出该方法,因此它之后的任何内容都无法读取。通常,多个返回在if-else条件下进行分支,以便只能执行其中一个


编辑:如果一次返回多个变量,您可以返回一个数组,也可以从包含所需字段的新类返回自定义对象。

此方法“mymethod”只给出第一个返回语句,然后消失, 您可以返回一个数组,或者删除'len'参数并返回其他语句

return len;
return indexvalue;            // error is here
或者你可以这样做:

System.out.println("Largest length value is " + myarray[numTokens].length());

然后清理方法的参数,因为它们看起来很凌乱,不需要这么多参数,您可能会感到困惑。

此方法“mymethod”只给出第一个返回语句,然后消失, 您可以返回一个数组,或者删除'len'参数并返回其他语句

return len;
return indexvalue;            // error is here
或者你可以这样做:

System.out.println("Largest length value is " + myarray[numTokens].length());

然后清理方法的参数,因为它们看起来很乱,不需要这么多参数,您可能会感到困惑。

如果必须返回两个值,请尝试使用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;
}


更好的解决方案是创建具有这些属性的对象,然后返回这些属性。干杯。

如果必须返回两个值,请尝试整数数组

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;
}



更好的解决方案是创建具有这些属性的对象,然后返回这些属性。干杯。

一行中不能有两个返回语句,因为第二个语句永远不会执行。那么,我如何返回第二个语句呢?如果必须,假设最简单的方法是返回一个int[],其中包含所需的两个值。一行中不能有两个返回语句,由于第二个变量永远不会被执行,那么我该如何返回第二个呢?如果必须的话,假设最简单的方法是返回一个int[],其中包含您需要的两个值。我需要将两个变量都返回主方法。我需要将两个变量都返回主方法。我非常同意最后一部分。在一种方法中使用名为
len
length
length
的变量使我感到畏缩。我非常同意最后一部分。在一个方法中使用名为
len
length
length
的变量会让我感到畏缩。这可能是我会做的。另一种方法是创建一个包含要返回的信息的类。错误:类型不匹配:无法从int[]转换为int。@Galaxy您需要在方法声明中更改返回类型。我可能会这样做。另一种方法是创建一个包含要返回的信息的类。错误:类型不匹配:无法从int[]转换为int。@Galaxy您需要在方法声明中更改返回类型。虽然我理解您的观点(并且您提出的观点是正确的),但一个方法可能有许多
return
语句,只要他们解决了这样的问题,以免截断其他功能,但这可能只是让OP现在要处理的混乱问题。我是老派,所以我只相信一个入口/出口;)谢谢你指出这一点!我知道一个方法可以有多个返回语句,但只能执行其中一个;为了清楚起见,我现在编辑了我的原始答案。虽然我理解你的观点(而且你提出的观点是正确的),但一个方法可能有许多
返回
语句,只要