有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java显示报告和流程结果

我需要有关位于调查文件末尾的reportSummary()方法的帮助。我正在使用我在网上找到的说明从头开始构建一个调查程序。我一直到这一点,但我不确定我错过了什么

当前错误(使用以下答案的帮助后):

C:\Users\Nael\Documents\NetBeansProjects\Survey\src\survey\Survey.java:156: error: illegal start of type
    if (questions[i] instanceof (DoubleQuestions))
C:\Users\Nael\Documents\NetBeansProjects\Survey\src\survey\Survey.java:156: error: not a statement
    if (questions[i] instanceof (DoubleQuestions))
C:\Users\Nael\Documents\NetBeansProjects\Survey\src\survey\Survey.java:156: error: ';' expected
    if (questions[i] instanceof (DoubleQuestions))
C:\Users\Nael\Documents\NetBeansProjects\Survey\src\survey\Survey.java:186: error: class, interface, or enum expected
}
4 errors
C:\Users\Nael\Documents\NetBeansProjects\Survey\nbproject\build-impl.xml:930: The following error occurred while executing this line:
C:\Users\Nael\Documents\NetBeansProjects\Survey\nbproject\build-impl.xml:270: Compile failed; see the compiler error output for details.

调查。爪哇:

    package survey;

import java.util.Scanner;
import java.io.Serializable;


public class Survey implements Serializable
{
    private String surveyName;
    private Question[] questions;
    private int numQuestions;
    private int maxResponses;
    private boolean initialized;

    public Survey(String n)
    {
        surveyName = n;
        initialized = false;
    }


        //initialize() sets up the numQuestions, MaxResponses, and questions for the survey

    public char Questions()
    {
        Scanner input = new Scanner(System.in);

        System.out.println("Initializing survey \"" + surveyName + "\"\n");

        //add a method for password validation!?!?!?  yes!!!  see the bank accounts lab

        System.out.print("Enter max number of responses: ");
        maxResponses = input.nextInt();

        System.out.print("Enter number of questions: ");
        numQuestions = input.nextInt();

        input.nextLine(); //have to do this to "eat" the new line character or the next input won't work correctly
        System.out.println();

        questions = new Question[numQuestions];
           char choice='c';
        for(int i = 0; i < numQuestions;i++)
        {


        //output menu options
        System.out.println();      
        System.out.println("    S - Create a String Question");
        System.out.println("    N - Create a Integer Question");
        System.out.println("    D - Create a Double Question");


        //loop until a valid input is entered

            System.out.print("Enter choice: ");
            choice = input.next().charAt(0);
            input.nextLine(); //still have to "eat" the current response

            //if choice is one of the options, return it.  Otherwise keep looping
            if( choice == 'N'  )
            {
                 System.out.print("Enter text for question " + (i+1) + ": ");


            //you will also need to ask what KIND of question - right now, defaults to integer question

            questions[i] = new IntegerQuestion(input.nextLine(),maxResponses);
             initialized = true;
            }  

            else if(choice == 'S')
            {
                   System.out.print("Enter text for question " + (i+1) + ": ");

            //you will also need to ask what KIND of question - right now, defaults to integer question

            questions[i] = new TextQuestion(input.nextLine(),maxResponses);
             initialized = true;
            }
             else if(choice == 'D')
            {
                   System.out.print("Enter text for question " + (i+1) + ": ");

            //you will also need to ask what KIND of question - right now, defaults to integer question

            questions[i] = new DoubleQuestions(input.nextDouble(),maxResponses);
             initialized = true;
            }
            else
            {
                System.out.println("Invalid choice.  Ensure a capital letter. Please re-enter.");
                choice = '?';
            }

      }

                         return choice;

    }


    /*
        run() gives the survey to a new survey taker, basically asks all the questions in the survey
    */

    public void startSurvey()
    {
        if(initialized)
        {
            System.out.println("Welcome to the survey \"" + surveyName + "\"\n");

            for(int i = 0;i < numQuestions; i ++)
            {
                questions[i].askQuestion();
            }

            System.out.println("Thank you for participating!");
        }
        else
        {
            System.out.println("Survey has not yet been setup.  Please initialize first.");
        }

    }

    /*
        displayResults() displays the raw data for the survey
    */
    public void Results()
    { 
        System.out.println("Displaying data results for \"" + surveyName + "\"\n");

        for(int i = 0;i < numQuestions; i ++)
        {
            questions[i].displayResults();
            System.out.println();
        }
    }

    /*
        displayReportSummary() should run tests on your data 
        Examples could be: the most common response (median), the average response (mean), or display a graph of the results?
        The choices are endless!
    */
    public void reportSummary()
    {
        for(int i=0;< numQuestions; i ++)
        {
            if (questions[i] instanceof (DoubleQuestions)
                    {
                        DoubleQuestions temp = (DoubleQuestions) questions[i];
                        temp.doubleAverage();
                    System.out.println();
                    }
        }
    }


}

双重问题:

package survey;


import java.util.Scanner;


public class DoubleQuestions extends Question 


{
        private double[] responses;


    public DoubleQuestions(double q, int m)
        {
            super(Double.toString(q),(m)); 
            responses = new double[m];
        }

        @Override
        public void askQuestion()
        {
            double response;            
            Scanner input = new Scanner(System.in);
            System.out.print(question + " ");
            input.nextLine(); //still have to "eat" the current response          
            response = input.nextDouble(); 
            responses[numResponses] = response;
            numResponses++;
        }

        @Override
        public void displayResults()
        {
            System.out.println(question);
            for(int i = 0; i < numResponses;i++)
                System.out.println(responses[i]);
        }

}

共 (2) 个答案

  1. # 1 楼答案

    在这个循环中有三个错误

    这一行中的一个:

    for(int i=0;< numQuestions; i ++)
    

    这里您错误地使用了条件< numQuestions

    这一行中的另一个:

    if (questions[i] instanceof (DoubleQuestions)
    

    在这里,您错过了右括号)

    但是

    if (questions[i] instanceof (DoubleQuestions))
    

    上述行应为:

    if (questions[i] instanceof DoubleQuestions)
    

    修复它:

    for(int i=0; i < numQuestions; i ++)
    {
        if (questions[i] instanceof DoubleQuestions)
                {
                    DoubleQuestions temp = (DoubleQuestions) questions[i];
                    temp.doubleAverage();
                System.out.println();
                }
    }
    

    另外,您的doubleAverage()方法没有在DoubleQuestions类中实现。所以你不能从中引用

    所以你不能这样做:

    DoubleQuestions temp = (DoubleQuestions) questions[i];
    temp.doubleAverage();
    

    首先实现doubleAverage()。然后试试看

  2. # 2 楼答案

    您应该尝试理解编译器向您抛出的错误消息。它清楚地说明了行号和代码中的错误

    您需要关闭if条件的附件:

    if (questions[i] instanceof (DoubleQuestions)
    

    一定是

    if (questions[i] instanceof (DoubleQuestions)) 
    

    您的for循环在条件中缺少i

        for(int i=0;< numQuestions; i ++)
    

    必须是:

        for(int i=0;i < numQuestions; i ++)
    

    public void reportSummary()
    {
        for(int i=0;< numQuestions; i ++)
        {
            if (questions[i] instanceof (DoubleQuestions)) // This line
                    {
                        DoubleQuestions temp = (DoubleQuestions) questions[i];
                        temp.doubleAverage();
                    System.out.println();
                    }
        }
    }
    

    希望这有帮助