【问题标题】:How to get the total of each column如何获得每列的总数
【发布时间】:2015-05-19 20:19:24
【问题描述】:

这是一项荒谬的任务,尤其是构建每个垂直列总数并将其显示在屏幕上。不过,计算水平行的总数似乎从来都不是挑战。

我遇到的问题是三方面的。

  1. 我如何calculate每个垂直列的总数?

  2. 索引 (id) 正在按降序打印。如何让它按升序打印?

  3. 此外,在百分比列中,小数点后的值将被丢弃。我如何让它显示?例如..如果 answer 应该是 78.25% 它表现为 78.0%

PS: (我的目标是小数点后2位。)

POJO 类 -- StudentsProg.java

package com.students.marks;
import java.util.Arrays;

public class StudentsProg {

    private int id = 0;
    private String name;
    private int english;
    private int german;
    private int french;
    private int arabic;
    private double percentage;
    private int total_marks;
    private int rowHighest;




    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getEnglish() {
        return english;
    }
    public void setEnglish(int english) {
        this.english = english;
    }
    public int getGerman() {
        return german;
    }
    public void setGerman(int german) {
        this.german = german;
    }
    public int getFrench() {
        return french;
    }
    public void setFrench(int french) {
        this.french = french;
    }
    public int getArabic() {
        return arabic;
    }
    public void setArabic(int arabic) {
        this.arabic = arabic;
    }
    public double getPercentage() {
        return percentage;
    }
    public void setPercentage(double percentage) {
        this.percentage = percentage;
    }
    public int getTotal_marks() {
        return total_marks;
    }
    public void setTotal_marks(int total_marks) {   
        this.total_marks = total_marks;
    }

    public int getRowHighest() {
        return rowHighest; 
      }

    public void setRowHighest(int rowHighest) {
        this.rowHighest = rowHighest;
    }


    public String toString() {
        id = id+1; 
        return (id + "\t" +name+ "\t\t" +english+ "\t" + " " +german+ "\t" + " "+ french+ "\t" + " " +arabic+ "\t" +" " +total_marks+ "\t\t" + " " +percentage+ "\t\t" +rowHighest);

    }

}

StudentsProgMain.java

import java.util.Scanner;

public class StudentsProgMain {


    @SuppressWarnings("resource")
    public static void main(String[] args) {

        int count = 0;
        StudentsProg[] stud = new StudentsProg[15]; 

        int choice=0;
        int max = 0;


        Scanner scanner = new Scanner(System.in);

        do{

            System.out.println("1: Add new Student");
            System.out.println("2: List Student");
            System.out.println("3: List Student By Name.");
            System.out.println("4: Delete Student");
            System.out.println("5: Exit");
            System.out.println("Please enter your choice \n\n");
            choice=scanner.nextInt();

        switch(choice){ 

        case 1: 
                stud[count] = new StudentsProg();
                System.out.println("Enter student name");
                stud[count].setName(scanner.next());

                System.out.println("Enter marks in English");
                stud[count].setEnglish(scanner.nextInt());

                System.out.println("Enter marks in German");
                stud[count].setGerman(scanner.nextInt());

                System.out.println("Enter marks in French");
                stud[count].setFrench(scanner.nextInt());

                System.out.println("Enter marks in Arabic");
                stud[count].setArabic(scanner.nextInt());




                count++;

                break;

        case 2: 

            System.out.println("ID\t" + "Name \t\t\t" + "English\t" + " " + "German\t"+ " " + "French\t" + " " + "Arabic\t"
                    +" "+ "Total Marks\t" + " " + "Percentage\t" + "Highest Marks(Row)\n" +
                    "------------------------------------------------------------------------"
                    + "------------------------------------------- \n ");


            for(int i=0; i<count; i++){
                if(stud[i]!=null){

                  int total_marks = stud[i].getEnglish()+stud[i].getGerman()+ stud[i].getFrench()+stud[i].getArabic();
                  stud[i].setTotal_marks(total_marks);

                  double calc_per = ((total_marks*100)/400);

                  stud[i].setPercentage(calc_per);

                  int arrayListMarks [] = {stud[i].getEnglish(), stud[i].getFrench(), stud[i].getGerman(), stud[i].getArabic()};

                  max  = arrayListMarks[0];

                        for (int j = 1; j < arrayListMarks.length; j++) {
                            if(arrayListMarks[j] >  max)
                                max = arrayListMarks[j]; }

                  stud[i].setRowHighest(max);

                  System.out.println(stud[i].toString());
                  System.out.println("\n");}

            } 

            System.out.println("--------------------------------------------------------------"
                    + "----------------------------------------------------- \n");

             System.out.println("\tTotal :"  +"\n");

             break;   


        case 3 : 

            System.out.println("Please enter your name");
            String name = scanner.next();

            System.out.println("\n" + "ID\t" + "Name \t\t\t" + "English\t" + " " + "German\t"+ " " + "French\t" + " " + "Arabic\t"
                    +" "+ "Total Marks\t" + " " + "Percentage\t" + "Highest Marks(Row)\n" +
                    "------------------------------------------------------------------------"
                    + "------------------------------------------- \n ");

            for(int i =0 ; i<count; i++){
                if(stud[i]!=null && stud[i].getName().equals(name))
                    System.out.println(stud[i].toString()); }

            System.out.println("--------------------------------------------------------------"
                    + "----------------------------------------------------- \n");

            break;


        case 4 :
            System.out.println("Please enter your name");
            String naam = scanner.next();

            for (int i = 0; i<count; i++) {
                if(stud[i]!=null && stud[i].getName()==naam)
                    stud[i]=null;
            }
            break;

        case 5: 
            System.exit(0);
            System.out.println("You have exited successfully");

        default :
            System.out.println("Invalid choice");

    }


    }while(true);
 }

}   

【问题讨论】:

  • @redge - 非常感谢... The percent problem is gone !!! 关于索引顺序问题,我在发布之前尝试了上面的代码问题,但它不工作...抛出一个 NullPointerException
  • @redge - 再次感谢... Index order problem too solved !!!
  • @redge - 终于成功计算了垂直总数......有了这些,与这个程序有关的所有问题都结束了...... @ 987654329@
  • @redge - It would be wonderful if you could collate your commented data and re-post it as an answer, so that it helps in closing this thread....

标签: java


【解决方案1】:

百分比计算的问题在于代码行double calc_per = ((total_marks*100)/400); 将进行整数运算并将每个中间结果截断为整数。要解决此问题,您需要在计算中的某处包含一个浮点数,方法是将 total_marks 转换为 double ,如下所示:

     double calc_per = ((Integer.valueOf(total_marks).doubleValue()*100)/400);    

或者像这样使用浮点常量:

     double calc_per = ((total_marks*100.0)/400);

垂直总计应该只是将行值添加到打印循环内的变量中。

我不太确定您的索引顺序问题,但 toString() 中读取 id = id+1; 的代码看起来不对。这将在您每次调用 toString() 时递增 Id。取而代之的是,您的创建代码应该在创建对象后立即设置 id 的值,例如:

            stud[count] = new StudentsProg();
            // add the following line of code.
            stud[count].setId(count);
            System.out.println("Enter student name");
            stud[count].setName(scanner.next()); 

【讨论】:

  • Awesome !! 再次感谢...
猜你喜欢
  • 2019-12-28
  • 2013-11-18
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多