【问题标题】:Call a void subroutine's variables in Java在 Java 中调用 void 子例程的变量
【发布时间】:2015-04-04 09:42:23
【问题描述】:

这是我的第一个问题,感谢您的帮助! (请原谅我犯的任何语法错误,我还在学习英语)

我大约在 2-3 周前开始研究这种 Java 语言,所以这个问题对你来说可能很容易,但我不明白我的问题。我相信我在代码的某个地方犯了一个小错误,浪费了很多时间思考和研究在线论坛。 (也许研究不是没用,但我仍然无法独自解决这个问题。)/我正在使用 Eclipse/

我的程序有 4 个子程序:

  1. public static void main():这是调用其他 3 个的地方。该程序的目的是询问用户一个有效的文件名,如果存在,程序会读取它并逐行计算文件中的字符、数字等。
  2. static void shortAnalyze():用户可以在短分析和长分析之间做出选择,这将只显示文本中的总字符数、所有数字、行数。
  3. static void detailAnalyze():这与上一个非常相似,除了显示更多细节,如特殊字符数、最长单词、最常用字母、元音和辅音、大写字母数量等。(并可能创建一个新的空文本文件并制作日志)
  4. static void analyzeText():这是唯一的计算子程序,其他的功能只是写出信息。基本上,shortAnalyze() 和 detailAnalyze() 这 2 个子程序是组合在一起的“数学方程”。

当前代码尚未完成,但我可以运行它而不会出错。我还使用了一个名为 TextIO 的 Java 类,我发现它比 Scanner 更易于使用。

这是我的实际问题开始的地方:

static void analyzeText() {

        String   line;
        char     currChar    = ' ';
        int      nAll        = 0;          // nLetters    + nNumbers   + nOther    +nEmpty
        int      nCharacters = 0;          // nLetters    + nNumbers   + nOther
        int      nEmpty      = 0;          //                                       nEmpty
        int      nOther      = 0;          //                            nOther
        int      nNumbers    = 0;          //               nNumbers
        int      nLetters    = 0;          // nLetters
        int[]    uniqueChar  = new int[2048];
        boolean  readingFile = true;       // it is true, because analyzeText can be called only if fileName is valid

        while(readingFile){
            try {

                line = TextIO.getln();
                for (int i=0; i < line.length(); i++ ){
                        currChar = line.charAt(i);
                        if (currChar == ' '){
                            nEmpty++;
                            nAll++;
                        }

                } //end of for
            } //end of try
            catch (IllegalArgumentException end_of_file) {
                break;
            }



            } //end of analyzeText
       } //end of readingFile

(请注意有很多无用无用的东西和代码)

这是我的子程序:

static void shortAnalyze(){

           System.out.println();

       }

我知道(或者我完全错了)void 不能返回任何值。 我仍然想要类似的东西:

static void shortAnalyze(){

           System.out.println(analyzeText.nAll);

       }

static void shortAnalyze(){

           System.out.println(nAll);

       }

所以我想将一个变量从 void analyzeText() 调用到另一个 void,称为 shortAnalyze()。 你认为有可能吗?你对我有什么建议、建议吗?

【问题讨论】:

  • 如果您想在其中使用,请在您的 shortAnalyze 方法中添加一个参数。
  • 您好 ControlAltDel,感谢您的回答。对不起,我有点困惑。如果我在我的方法中添加了一个参数,它将不再是一个空洞吗?这意味着我需要返回一个值,但我只想写出'nAll',我不想更改它的值,将其返回并在其他地方使用。我很惭愧,但我不理解你,对不起。

标签: java eclipse parameters void subroutine


【解决方案1】:

您可以将要在方法之间共享的变量声明为类的实例变量。只需在方法之外声明它们。
然后你可以使用:

static void shortAnalyze(){

           System.out.println(nAll);

       }

【讨论】:

  • 谢谢 GobletSky,这真的很有帮助!我创建了一个变量''static int nAll'';而且我还注意到,通过创建“public static int nAll”,我可以在我的包中的任何地方访问“nAll”,你用 1 个答案解决了我的 2 个问题!再次感谢您,先生!
  • 不客气。尽管我建议您仔细考虑是否要使用实例变量或局部变量。检查这个答案:stackoverflow.com/a/4588772/1559914
猜你喜欢
  • 2020-06-08
  • 2017-07-07
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多