该程序访问名为 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]);
}
}`
答案 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());
然后清理方法的参数,因为它们看起来很乱,没有必要这么多论点,你可能会感到困惑。