java - 为什么java方法返回相同的结果?

标签 java

我的程序有问题<<这个程序获取3个学生的姓名和ID以及5门类(class)的分数信息,然后返回平均分数信息我的程序运行良好,但它为所有学生返回相同的平均数,请可以你帮助我

这是类(class)

StudentsMarks.java
        package programmersx;
    import java.io.BufferedWriter;
    import java.io.*;
    import java.io.FileOutputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    import java.util.Arrays;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    public class StudentsMarks {

        private String studentName;
        private int studentId;
        private double marks[];
        public static int NoInstntitd;

        public StudentsMarks() {
            NoInstntitd += 1; 
        }


        double avgCalculator(double[] marks) { //avg method
            double sum =0;
            double avg=0;

            for (int i = 0; i < marks.length; i++) {
                sum = sum + marks[i];
                avg=sum/5;
            }
            return avg;

        }
        @Override
        public String toString() {
            return studentName +" " + studentId +" " + Arrays.toString(marks) +" " ; 


        }

        void toFile(String fileName) throws IOException {

            FileOutputStream file= new FileOutputStream(fileName);
            PrintWriter writer= new PrintWriter(file);
            writer.print("reem ");

        String   information = "student information :" + getStudentName() + "" + getStudentId() + "  average " + avgCalculator(marks);

         LocalDate localDate = LocalDate.now();
        BufferedWriter writer1 = new BufferedWriter(new FileWriter("average.txt"));
        BufferedWriter writer2 = new BufferedWriter(new FileWriter("localDate.txt"));

            try {
                  writer.write(information);
                  writer1.write("  average " + avgCalculator(marks));
                  writer2.write(DateTimeFormatter.ofPattern("yyy/MM/dd").format(localDate));
                  writer2.close();
            } catch (IOException ex) {
                Logger.getLogger(Programmersx.class.getName()).log(Level.SEVERE, null, ex);
            }

            System.out.println("student information :" + getStudentName() + "" + getStudentId() + "  average " + avgCalculator(marks));
            System.out.println(" student average. : " + avgCalculator(marks));
            System.out.println(DateTimeFormatter.ofPattern("yyy/MM/dd").format(localDate));

        }


        { 
            NoInstntitd += 1; 
        } 
        void display( ) {
            System.out.println("display the count of the instantiated objects from StudentMarks" + getNoInstntitd());
        }
     public String getStudentName() {
            return studentName;
        }
        public void setStudentName(String studentName) {
            this.studentName = studentName;
        }

        public int getStudentId() {
            return studentId;
        }
        public void setStudentId(int studentId) {
            this.studentId = studentId;
        }

        public double[] getMarks() {
            return marks;
        }
        public void setMarks(double[] marks) {
            this.marks = marks;
        }

        public  int getNoInstntitd() {
            return NoInstntitd;
        }
        public  void setNoInstntitd(int NoInstntitd) {
            this.NoInstntitd =  this.NoInstntitd + 1;
        }

    }

这是主要内容

Programmersx.java
package programmersx;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;


public class Programmersx {


    public static void main(String[] args) throws IOException {
        StudentsMarks myObject = new StudentsMarks();
        StudentsMarks myObject1 = new StudentsMarks();   
         StudentsMarks myObject2 = new StudentsMarks();
        System.out.print("Please enter your student Name : ");
        Scanner myObj = new Scanner(System.in);  // Create a Scanner object
        myObject.setStudentName(myObj.next()) ;
        System.out.print("Please enter your student Id : ");
        myObject.setStudentId(myObj.nextInt()) ;
        System.out.println("Please enter your  marks of 5 courses : ");
        double marks[] = new double [5];
        for (int i = 0; i < 5; i++) {
            marks[i]= myObj.nextInt();
        }
         myObject.setMarks(marks) ;

             System.out.print("Please enter your student Name : ");
        Scanner myObj1 = new Scanner(System.in);  // Create a Scanner object
        myObject1.setStudentName(myObj1.next()) ;
        System.out.print("Please enter your student Id : ");
        myObject1.setStudentId(myObj1.nextInt()) ;
        System.out.println("Please enter your  marks of 5 courses : ");
        double marks1[] = new double [5];
        for (int i = 0; i < 5; i++) {
            marks1[i]= myObj1.nextInt();
        }
         myObject1.setMarks(marks) ;
           myObject1.toString();
             System.out.print("Please enter your student Name : ");
        Scanner myObj2 = new Scanner(System.in);  // Create a Scanner object
        myObject2.setStudentName(myObj2.next()) ;
        System.out.print("Please enter your student Id : ");
        myObject2.setStudentId(myObj2.nextInt()) ;
        System.out.println("Please enter your  marks of 5 courses : ");
        double marks2[] = new double [5];
        for (int i = 0; i < 5; i++) {
            marks2[i]= myObj2.nextInt();
        }
         myObject2.setMarks(marks) ;
          myObject2.toString();
        myObject.toString();
        myObject.toFile("Reem.txt");
                myObject1.toFile("MAria.txt");
                 myObject2.toFile("Abrar.txt");


        System.out.println("display the count of the instantiated objects from StudentMarks: " + StudentsMarks.NoInstntitd );


    }

}

输出为

运行:

Please enter your student Name : jack
Please enter your student Id : 1123
Please enter your  marks of 5 courses : 
6
4
5
7
6
Please enter your student Name : mick
Please enter your student Id : 87534
Please enter your  marks of 5 courses : 
6
4
3
22
5
Please enter your student Name : meno
Please enter your student Id : 43433
Please enter your  marks of 5 courses : 
6
55
33
22
7
student information :jack1123  average 5.6
 student average. : 5.6
2019/12/06
student information :mick87534  average 5.6
 student average. : 5.6
2019/12/06
student information :meno43433  average 5.6
 student average. : 5.6
2019/12/06
display the count of the instantiated objects from StudentMarks: 6

最佳答案

所有 StudentMarks 对象都通过类似的调用设置其标记:

 myObject2.setMarks(marks)

它们都使用相同的标记数组,因此它们都具有相同的标记。

即使您更改了标记数组的内容

 myObject.setMarks(marks)

 myObject1.setMarks(marks)

仍然只有一个标记数组,由所有 StudentMarks 对象共享:StudentMarks setter 复制该数组。

关于java - 为什么java方法返回相同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59205638/

相关文章:

java - XML 模式与 Java 代码的运行时绑定(bind)

java - 如何以编程方式登录到 URL、保持 session 并浏览到不同的页面

java - 如何为运行时编译设置上下文类加载器的类路径?

java - 使用 StringTokenizer 复制 String.split

Java:使用计时器移动 jLabel 两次

java - 如何使用 Apache PdfBox 获取 PDF 文件中的书签页码?

java - 如何在 C++ 中从 private 初始化构造函数内部的 vector ,类似于 Java 中的 ArrayList

java - 在使用 IVY 的项目中包含来自文件系统的项目 JAR 无法提取源代码和 javadoc

java - 为什么我的 Android 应用程序在启动新 Activity 时崩溃?

java - 基本类型的一对一映射,到 Hibernate 中的单个类