Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 循环关键字程序作业_Java_Loops_Helper - Fatal编程技术网

Java 循环关键字程序作业

Java 循环关键字程序作业,java,loops,helper,Java,Loops,Helper,它将要求用户输入要搜索的关键字。然后,它会要求用户反复输入句子。用户可以通过输入“stop”而不是一个句子来停止这个过程(当然,这意味着我们不能分析一个单词的句子“stop”,但这没关系)。用户完成句子输入后,程序应显示以下统计信息: 输入的句子总数 包含关键字的句子总数 关键字在包含关键字的句子中的平均起始位置 有人能帮我把这个程序组合起来吗?对于#3,我们只计算包含关键字的句子的平均位置 我有循环部分,对于#3,我猜我们会使用indexOf#2输入字符串。包含(关键字)我猜?有人能帮我做1-

它将要求用户输入要搜索的关键字。然后,它会要求用户反复输入句子。用户可以通过输入“stop”而不是一个句子来停止这个过程(当然,这意味着我们不能分析一个单词的句子“stop”,但这没关系)。用户完成句子输入后,程序应显示以下统计信息:

  • 输入的句子总数
  • 包含关键字的句子总数
  • 关键字在包含关键字的句子中的平均起始位置
  • 有人能帮我把这个程序组合起来吗?对于#3,我们只计算包含关键字的句子的平均位置

    我有循环部分,对于#3,我猜我们会使用indexOf#2输入字符串。包含(关键字)我猜?有人能帮我做1-3并把它们放到Java程序中吗?谢谢

    import java.util.Scanner;
    
    public class Lab6Loops {
    
        public static void main(String[] args)  {
    
            String keywordString;
            String inputString;
            Scanner keyboard = new Scanner (System.in);
            int numofSentences = 0;
            int numofKeyword = 0;                       
            System.out.println ("Enter a keyword. We will search each sentence for this word.");
            keywordString = keyboard.nextLine ();
            System.out.println ("Please enter a sentence or type 'stop' to finish");
            inputString = keyboard.nextLine ();
            while( !inputString.equals ("stop"))
            {       
                if(inputString.contains (inputString));
                numofSentences = numofSentences + 1;
                if(inputString.contains (keywordString));
                numofKeyword = numofKeyword + 1;
                System.out.println ("Enter a line of text or 'stop' to finish");
                inputString = keyboard.nextLine();
            }
            System.out.println ("You entered " + numofSentences + " sentences");
            System.out.println ("You have " + numofKeyword + "sentences that contain the keyword");
        }   
    }
    

    我喜欢使用自文档化代码,因此这里有一些建议,可以帮助您创建一个紧凑的主循环:

    功能语义

    public void loop() {
      // TODO: ask for the keyword and store it somewhere
    
      while(true) {
        try {
          updateStatistics(checkOutput(getSentence()));
        } catch (EndOfInput) {
          printStatistics();
        }
      }
    }
    
    面向对象

    public void loop() {
      String keyword = myPrompter.getNextSentence();
      myAnalyzer.setKeyword(keyword);
    
      while (true) {
        String sentence = myPrompter.getNextSentence();
        AnalysisResult result = myAnalyzer.analyze(sentence);
        if (result.isEndOfInput()) {
          myAnalyzer.printStatistics();
          return;
        }
      }
    }
    
    这两种方法都提供了一个插入特定逻辑的简单框架。您可以在主循环中完成所有操作,但这可能会让人困惑。相反,最好让一个函数完成一项任务。一个函数运行循环,另一个函数获取输入,另一个函数计算句子数,等等


    有时我会从这些小函数开始,自下而上构建应用程序,因此我会编写一个方法,该方法接受一个字符串并根据字符串“stop”返回true/false。您甚至可以为该方法编写单元测试,这样当您构建应用程序的其余部分时,您就知道该方法实现了您想要的功能。有很多模块化组件可以在测试过程中进行测试,这很好,而不是编写一个巨大的长循环,并想知道为什么它没有达到您想要的效果。

    听起来您需要提示用户进行初始输入,然后进入一个循环,该循环将持续到用户按下stop(或其他)按钮为止,在每次迭代中,您需要提示用户输入一个句子,如果用户输入的数据增加一个存储句子数量的计数器,则根据输入的关键字测试句子,并增加第二个计数器(如适用),您还需要将单词出现在堆栈中的位置推到堆栈中,以获得平均值,该值应为堆栈的总和除以大小。你应该能够使用
    indexOf()
    来获得这个职位。

    我对Java真的是个新手。这是我第一个学期做编程,所以我不太确定如何在这里包含我的代码。复制和粘贴是你的朋友如果我复制和粘贴它,它不会以代码的形式出现。现在我刚刚写了这个程序的基础。如何格式化代码以粘贴到此处?编辑页面上有说明。你在找{}按钮。谢谢,卡尔,我找到了。我已经正确地完成了循环,并且计算了句子的数量。但是我对关键字计数器有个问题。当我在运行程序时键入关键字时,无论我为句子输入什么,它都会向计数器添加+1。因此,如果我输入3个句子,即使它们不包含关键字,也会显示为3。如果我输入4,它输出4。等等,有人看到问题了吗?嘿,汤姆,我刚把代码包括进去。我想我搞错了关键字字符串,因为它无法正确输出用户是否在句子中输入关键字。看到什么不对劲了吗?您好,非常接近,我想您只需要稍微晃动一下,然后添加一个数组来保持赋值第3部分的位置,您不需要while语句中的条件,您可以在用户输入“stop”时中断循环,还可以为if/else块使用括号:)您不需要跟踪位置(你只是被要求输出平均位置,你不太可能在以后需要数据进行任何其他统计分析,所以只需保持位置的连续总数,然后除以@user1276514中带有术语的句子。是的,问题是我不知道如何得到带有术语的句子。我一定是在什么地方搞砸了。)因为它没有给我包含关键词的句子的正确输出。我知道这是一个常见的习语,但用缩写“no”来表示“number”总是让我感觉不对劲。当我读它时,我把它读成“no of matches”。我想你加上“of”,这样它就不会读成“no matches”,人们会认为它是boolean flag,但这种说法一开始就违背了缩写的目的。如果必须的话,为什么不直接称它为“matches”或“numMatches”或“matchCount”?同意-但使用#(不允许)或否(不允许)或matches(?)即matches bool…我应该使用数字并完成它,但我接受你的观点
    package console;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class Console {
    
        static float averagePositionInSentence = 0;
        static String searchTerm = "";
        static int noOfSentencesEntered = 0;
        static int noOfMatches = 0;
    
        public static void main(String[] args) {
            searchTerm = writeToConsoleAndReturnInput("Add phrase to search for.");
            writeToConsole("Now type some sentences. To exit type the word 'stop' on its own");
            mainInputLoop();
            outputResults();
        }
    
        public static void mainInputLoop() {
    
            boolean ended = false;
            while (!ended) {
                try {
                    String input = readLineFromConsole();
                    if (!input.equalsIgnoreCase("stop")) {
                        maintainStatisticalData(input);
                    } else {
                        ended = true;
                    }
                } catch (Exception e) {
                    writeToConsole("There was an error with your last input");
                }
            }
        }
    
        public static void outputResults() {
            writeToConsole("You entered " + noOfSentencesEntered + " sentences of which " + noOfMatches + " conatined the search term '" + searchTerm + "'");
            writeToConsole("");
            writeToConsole("On average the search term was found at starting position " + (averagePositionInSentence / noOfSentencesEntered) + " in the sentence");
        }
    
        public static void maintainStatisticalData(String input) {
            noOfSentencesEntered++;
            if (input.contains(searchTerm)) {
                noOfMatches++;
                int position = input.indexOf(searchTerm)+1;
                averagePositionInSentence += position;
            }
        }
    
        //terminal helper methods
        public static void writeToConsole(String message) {
            System.out.println(message);
        }
    
        public static String writeToConsoleAndReturnInput(String message) {
            System.out.println(message);
            try {
                return readLineFromConsole();
            } catch (IOException e) {
                //should do something here
                return "Exception while reading line";
            }
        }
    
        public static String readLineFromConsole() throws IOException {
            InputStreamReader converter = new InputStreamReader(System.in);
            BufferedReader in = new BufferedReader(converter);
    
            return in.readLine();
        }
    }