Массивы с инструкциями for loop и if

Поэтому, когда я попытался сохранить и скомпилировать все работает нормально, пока я не запущу его. Кажется, есть проблема с синтаксисом моего массива. Может кто-нибудь помочь мне найти его?Когда я запускаю эту программу, метод grades () выводит «AAA» . То, что я пытаюсь сделать в этой программе, это прочитать текст из файла txt и перечислить каждую строку, выводя имя студента и счет. Теперь в методе grades () я пытаюсь вывести вычислить буквенную оценку для каждого из классов студентов и сделать так, чтобы это шло в цикл, пока последний балл не был прочитан.

public class ReadData 
  {
private static String[] names = new String[3];
private static int line;
private static int[] scores = new int[3];
private static float mean;
private static double stdDeviation;

public static void readData() throws FileNotFoundException 
{
    File file = new File("data.txt");
    Scanner scanner = new Scanner(file);
    int l = 0;

    // float sum = 0 ;
    while (scanner.hasNextLine()) { 
        String line = scanner.nextLine();
        String [] words = line.split("t"); 
        names[l] = words[0]; 
        scores[l] = Integer.parseInt(words[1]);
        // sum+=scores[l];
        System.out.println(" name: " + names[l] + ", score: " + scores[l]);
        l++; 


    }
   //   System.out.println(scores[0]+ " " + scores[1]+ " " + scores[2]);

}

public static void fndMean() 
{

    float mean = ((25+65+89)/3);
    System.out.println(" The mean is: " + mean);
}


public static void fndStandard() throws FileNotFoundException
{
    double stdDeviation = Math.sqrt(((Math.pow(25-59, 2)+(Math.pow(65-59,2))+
            (Math.pow(89-59, 2))))/3);
    System.out.println("The Standard Deviation is: " + stdDeviation);
}

Метод рангов

public static void grades()
    {
        for(int i = 0; i < (scores.length); i++)
        {
            if(mean + stdDeviation <= scores[i])
            {
                System.out.print("A");
            }
            else if( (scores[i] >= mean+(stdDeviation/3)) &&  
           (mean     +stdDeviation)> scores[i])
            {
                System.out.print("B");
            }
            else if( (scores[i] >= mean-(stdDeviation/3)) && 
            (mean +(stdDeviation/3))> scores[i])
            {
                System.out.print("C");
            }
            else if( (scores[i] >= mean-(stdDeviation)) &&  
            (mean -            (stdDeviation/3))> scores[i])
            {
                System.out.print("D");
            }   
            else
            {
                System.out.println("F");
            }
        }
}

2 ответа

  1. При повторном объявлении переменных в таких методах, как fndMean() и fndStandard (), выполняется следующее

    double stdDeviation = Math.sqrt(((Math.pow(25-59, 2)+(Math.pow(65-59,2))+
                (Math.pow(89-59, 2))))/3);
    float mean = ((25+65+89)/3);
    

    Вы уже объявили их сверху и не нужно делать это снова, в противном случае он будет только установить локальные переменные внутри методов, а не внутри вашего класса. вы должны сделать

    stdDeviation = Math.sqrt(((Math.pow(25-59, 2)+(Math.pow(65-59,2))+
                (Math.pow(89-59, 2))))/3);
    mean = ((25+65+89)/3);
    

    Который установит эти переменные в то, что вы ожидали, когда вы вызываете эти методы перед вычислением оценок.

  2. Это то, что fndMeanи fndStandardметоды печати:

     The mean is: 59.0
    The Standard Deviation is: 26.407069760451147
    

    Сумма meanи stdDeviationсоставляет 85.40706976045115.

    Теперь условие if(mean + stdDeviation <= scores[i])проверяет, меньше ли эта суммаscore[i], и если да, печатает «A». Это может быть верно в любом из этих двух случаев:

    • Значения во втором столбце (вкладке) в txt-файлах все больше 85
    • score массив изменяется между двумя вызовами метода

    Печать значения балла перед этими условиями должна дать вам некоторое представление.