如何将双打插入主要方法?

How to insert doubles into the main method?

我正在尝试编写一个程序来计算我的数学和英语 GPA。我无法让 main 识别我的两个浮点数 mathGpaenglishGpa。它告诉我将它们设为静态,但设为静态意味着它们变成字符串,我需要它们保持双精度。

import java.util.Scanner;
public class GPA {

    public static void main(String[] args)
    {
        double finalGpa=0;

        mathGpa();
        englishGpa();

        finalGpa= (mathGpa + englishGpa)/2;


    }

    public double mathGpa() {//Begin mathGpa
        int Math;
        double mathGpa = 0;
        System.out.println("Math = ");
        Scanner math = new Scanner(System.in);
        Math= math.nextInt();
        math.close();

        if (Math >100){
            System.out.println("You have mistyped something");
        }
        if (Math >= 94){
            System.out.println("You have an A");
            mathGpa = 4.0;
            System.out.println(mathGpa);
        }
        if (Math < 94 && Math >=90){
            System.out.println("You have an A-");
            mathGpa = 3.7;
            System.out.println(mathGpa);
        }
        if (Math < 90 && Math >=87){
            System.out.println("You have a B+");
            mathGpa = 3.3;
            System.out.println(mathGpa);
        }
        if (Math < 87 && Math >=80){
            System.out.println("You have a B");
            mathGpa = 3.0;
            System.out.println(mathGpa);
        }
        if (Math < 80 && Math >=77){
            System.out.println("You have a B-");
            mathGpa = 2.7;
            System.out.println(mathGpa);
        }
        if (Math < 77 && Math >=73){
            System.out.println("You have a C+");
            mathGpa = 2.3;
            System.out.println(mathGpa);
        }
        if (Math < 73 && Math >=70){
            System.out.println("You have a C");
            mathGpa = 2.0;
            System.out.println(mathGpa);
        }
        if (Math < 70 && Math >=67){
            System.out.println("You have a C-");
            mathGpa = 1.7;
            System.out.println(mathGpa);
        }
        if (Math < 67 && Math >=67){
            System.out.println("You have a D+");
            mathGpa = 1.3;
            System.out.println(mathGpa);
        }
        if (Math < 67 && Math >=63){
            System.out.println("You have a D");
            mathGpa = 1.0;
            System.out.println(mathGpa);
        }
        if (Math < 63 && Math >=60){
            System.out.println("You have a D-");
            mathGpa = 0.7;
            System.out.println(mathGpa);
        }
        if (Math < 60){
            System.out.println("You have a F");
            mathGpa = 1.7;
            System.out.println(mathGpa);
        }

        return mathGpa;
    }//End mathGpa

    public double englishGpa() {//Begin englishGpa
        int English;
        double englishGpa = 0;
        System.out.println("English = ");
        Scanner english = new Scanner(System.in);
        English= english.nextInt();
        english.close();

        if (English >100){
            System.out.println("You have mistyped something");
        }
        if (English >= 94){
            englishGpa = 4.0;
        }
        if (English < 94 && English >=90){
            englishGpa = 3.7;
        }
        if (English < 90 && English >=87){
            englishGpa = 3.3;
        }
        if (English < 87 && English >=80){
            englishGpa = 3.0;
        }
        if (English < 80 && English >=77){
            englishGpa = 2.7;
        }
        if (English < 77 && English >=73){
            englishGpa = 2.3;
        }
        if (English < 73 && English >=70){
            englishGpa = 2.0;
        }
        if (English < 70 && English >=67){
            englishGpa = 1.7;
        }
        if (English < 67 && English >=67){
            englishGpa = 1.3;
        }
        if (English < 67 && English >=63){
            englishGpa = 1.0;
        }
        if (English < 63 && English >=60){
            englishGpa = 0.7;
        }
        if (English < 60){
            englishGpa = 1.7;
        }

        return englishGpa;
    }//End englishGpa

}//End Class

使方法静态化并不意味着它们变成字符串,它只是意味着可以调用该方法。当您在 mathGpa 和 englishGpa 中声明 'double' 时,您将 return 类型设置为 double,除非您将 'double' 切换为 'String',否则不会更改。另外,正如评论 (@Greg Hewgill) 中所说,您应该更改局部变量名称。

有关 'static' click here 的更多信息。

有关方法的更多信息click here

静态变量

class 的所有对象(或实例)的静态变量值相同。换句话说,您可以认为相同 class 的所有实例(对象)共享静态变量的单个副本。
示例 #1:

class StaticVariable
{
   static int counter=0;
   public void increment()
   {
       counter++;
   }
   public static void main(String args[])
   {
       StaticVariable objectA = new StaticVariable();
       StaticVariable objectB = new StaticVariable();
       objectA .increment();
       objectB .increment();
       System.out.println("objectA- counter is: "+ objectA.count);
       System.out.println("objectB- counter is: "+ objectA.count);
   }
}

输出:

objectA- counter is: 2
objectB- counter is: 2

class的两个对象共享同一份静态变量counter;这就是为什么它们包含相同的计数器值。

而且我认为声明静态变量不会像您提到的那样改变您的变量类型 - 从双精度到字符串。

示例#2: 静态变量用于引用所有对象的公共 属性(每个对象都不是唯一的)。例如,大学名称,学生姓名等... 在class加载的瞬间,class区域只占用内存一次。 使用静态变量的好处是使程序内存高效,是一种节省内存的方式。

 class Person{  
       int id; 
       String studentName;  
       // a static variable 
       static String collegeName ="MBA";  

       Person(int i,String n)
       {  
        id = i;  
        studentName = n;  
       }  

        void output ()
        {
         System.out.println(id +" "+ studentName +" "+ collegeName);
        }  

     public static void main(String args[])
       {  
        Person student1 = new Person(100,"Joe");  
        Person student2 = new Person(200,"Jef");  

        student1.output();
        student2.output(); 
       }  
    }  

Display:
     100 Joe MBA
     200 Jef MBA

请注意,为 class 的所有实例化对象分配了相同的静态值 MBA。