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

时间:2015-10-28 23:55:49

标签: java

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

使用Tokenizer,这些颜色词保存在一个名为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;

打印出数组中最长的单词
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]);
  }
}`

4 个答案:

答案 0 :(得分:4)

return len;
return indexvalue;            // error is here

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

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

答案 1 :(得分:3)

方法只能执行一个return语句。一旦它返回一个值,程序退出该方法。 return indexvalue无法访问,因为它是在另一个return语句之后。

答案 2 :(得分:3)

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


更好的解决方案是创建具有这些属性的对象并返回该对象。欢呼声。

答案 3 :(得分:2)

这个方法'mymethod'只给出第一个return语句然后死掉, 你可以返回一个数组,或者只是删除'len'参数并返回其他语句。

或者你可以这样做:

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

然后清理方法的参数,因为它们看起来很乱,没有必要这么多论点,你可能会感到困惑。