Как рассчитать сумму элементов массива - PullRequest
0 голосов
/ 10 октября 2018

У меня есть этот код, где я могу рассчитать среднее количество баллов, но не могу рассчитать сумму и процент.

И я хочу напечатать имя студента под именем студента, но яполучить только номер студента.

Я пытался понять об этом больше, но не смог дозвониться.

Не могли бы вы мне помочь?

package cube;

import java.io.*;
import java.util.Scanner;

public class ReportCard {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int DB[][], nos = 0;
String arrayOfNames[] = new String[nos];
String S = "";
Scanner s = new Scanner(System.in);

void Input() throws Exception {
    System.out.print("Enter The Number Of Students : ");
    nos = Integer.parseInt(br.readLine());
    DB = new int[nos + 1][6];

    for (int i = 0; i < arrayOfNames.length; i++) {
        System.out.print("Enter the name of student:");
        arrayOfNames[i] = s.nextLine();


        System.out.print("\nEnter " + arrayOfNames[i] + "'s English   Score : ");
        DB[i][0] = Integer.parseInt(br.readLine());
        System.out.print("Enter " + arrayOfNames[i] + "'s Science Score : ");
        DB[i][1] = Integer.parseInt(br.readLine());
        System.out.print("Enter " + arrayOfNames[i] + "'s Maths  Score : ");
        DB[i][2] = Integer.parseInt(br.readLine());
        DB[i][3] = (int) (DB[i][0] + DB[i][1] + DB[i][2] / 3); //calculating the Average Marks of Each Student
        DB[i][4] = (int) (DB[i][0] + DB[i][1] + DB[i][2]);

    }
}


void PrintReport() {
    System.out.println("\nGenerated Report Card :\n\nStudent Name.  English   Science   Maths   Average   Total\n");
    for (int i = 0; i < nos; i++) {
        Padd("Student Name.  ", (i + 1));
        Padd("English   ", DB[i][0]);
        Padd("Science   ", DB[i][1]);
        Padd("Maths   ", DB[i][2]);
        Padd("Average", DB[i][3]);
        Padd("Total", DB[i][4]);
        System.out.println(S);
        S = "";
    }
}

void Padd(String S, int n) {
    int N = n, Pad = 0, size = S.length();
    while (n != 0) {
        n /= 10;
        Pad++;
    }
    System.out.print("    " + N);
    for (int i = 0; i < size - Pad - 5; i++)
        System.out.print(" ");
}

public static void main(String args[]) throws Exception {
    ReportCard obj = new ReportCard();
    obj.Input();
    obj.PrintReport();
}
}

Ответы [ 4 ]

0 голосов
/ 11 октября 2018

Массивы не являются динамическими.либо вы объявляете его размер заранее, либо используете Arraylist ..

boolean loopNaming = true;
        int i = 0;
        //you are creating array of zero size, use ArrayList instead
        //  String[] name = new String[i];
        ArrayList<String> nameList = new ArrayList<>();

        while (loopNaming == true) {
            System.out.printf("Enter name of student or done to finish: ");
            String name = keyboard.nextLine();
            //check if name is 'done'
            if (name.equals("done")) {
                loopNaming = false;
            } else {
                nameList.add(name);
                System.out.println("Enter score: ");
                score = keyboard.nextDouble();
                //nextLine positions cursor to next line
                keyboard.nextLine();
            }
            i = i + 1;

        }
        System.out.println(nameList);
0 голосов
/ 10 октября 2018

Вы создаете массив имен, то есть arrayOfNames как массив длины 0, поскольку nos изначально равно нулю.Обратите внимание:

int DB[][],nos=0; //nos is initialized to 0
String arrayOfNames[] = new String[nos];  //arrayOfNames is of size = nos,which is in turn equal to 0, hence arrayOfNames is basically an array which can't hold anything.

вместо этого сделайте это: просто объявите arrayOfNames и не инициализируйте его.==> String arrayOfNames[];

определить размер строки после того, как вы примете размер, то есть nos.Таким образом, это должно быть следующим образом:

void Input() throws Exception {
    System.out.print("Enter The Number Of Students : ");
    nos = Integer.parseInt(br.readLine());
    arrayOfNames[] = new String[nos];  //now define the size
    ...

Это обеспечит доступность строки вне функции Input(), а также с допустимым размером.

0 голосов
/ 10 октября 2018

Следующие исправления могут заставить ваш код работать ..

package testProgram;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;

public class ReportCard {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int DB[][], nos = 0;
    //here initaialise reference will null
    String arrayOfNames[] = null;
    String S = "";
    Scanner s = new Scanner(System.in);

    void Input() throws Exception {
        System.out.print("Enter The Number Of Students : ");
        nos = Integer.parseInt(br.readLine());
        DB = new int[nos + 1][6];
        //create string array object here
        arrayOfNames = new String[nos];
        for (int i = 0; i < arrayOfNames.length; i++) {
            System.out.print("Enter the name of student:");
            arrayOfNames[i] = s.nextLine();

            System.out.print("\nEnter " + arrayOfNames[i] + "'s English   Score : ");
            DB[i][0] = Integer.parseInt(br.readLine());
            System.out.print("Enter " + arrayOfNames[i] + "'s Science Score : ");
            DB[i][1] = Integer.parseInt(br.readLine());
            System.out.print("Enter " + arrayOfNames[i] + "'s Maths  Score : ");
            DB[i][2] = Integer.parseInt(br.readLine());
            //take extra variable that holds total, it increases the readability of the code
            int total = DB[i][0] + DB[i][1] + DB[i][2];
            DB[i][3] = (total) / 3; //calculating the Average Marks of Each Student
            DB[i][4] = total;

        }
    }

    void PrintReport() {
        System.out.println("\nGenerated Report Card :\n\nStudent Name.  English   Science   Maths   Average   Total\n");
        for (int i = 0; i < nos; i++) {
            Padd("Student Name.  ", (i + 1));
            Padd("English   ", DB[i][0]);
            Padd("Science   ", DB[i][1]);
            Padd("Maths   ", DB[i][2]);
            Padd("Average", DB[i][3]);
            Padd("Total", DB[i][4]);
            System.out.println(S);
            S = "";
        }
    }

    void Padd(String S, int n) {
        int N = n, Pad = 0, size = S.length();
        while (n != 0) {
            n /= 10;
            Pad++;
        }
        System.out.print("    " + N);
        for (int i = 0; i < size - Pad - 5; i++)
            System.out.print(" ");
    }

    public static void main(String args[]) throws Exception {
        ReportCard obj = new ReportCard();
        obj.Input();
        obj.PrintReport();
    }
}
0 голосов
/ 10 октября 2018

Вы инициализируете свой массив arrayOfNames всегда нулевой длиной.Вы должны инициализировать его, как только получите значение переменной nos (аналогично инициализации 2d массива БД)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...