2015-05-17 39 views
0

它是一個荒謬的任務,尤其是打造的每個垂直列 &顯示它在屏幕上。儘管如此,計算水平行的總數似乎並不是一個挑戰。如何獲得總每一列

我遇到的問題有三重。

  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); 
} 

} 
+0

@redge - **非常感謝...... ** **百分比問題消失了! ** ** 關於索引順序問題,在發佈這個問題之前,我嘗試了上面的代碼,但它無法工作......拋出一個** NullPointerException ** – mindfreak

+0

@redge - **再次感謝...... ** **索引順序問題也解決了!!! ** ** – mindfreak

+0

@redge - **最後設法計算垂直總計。 ...有了這些,所有與此計劃有關的問題都告一段落。** **'謝謝你的幫忙.. **' – mindfreak

回答

1

與比率計算的問題是,代碼double calc_per = ((total_marks*100)/400);行將做整數算術和截斷每個中間結果爲整數。要麼通過轉換total_marks解決這個問題,你需要包括一個浮點數某處計算翻番,像這樣:

 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()); 
+0

'真棒!!'**再次感謝...... ** – mindfreak