【问题标题】:How to send variables from one class to another.如何将变量从一个类发送到另一个类。
【发布时间】:2013-04-08 04:45:40
【问题描述】:

希望有人帮助我还为时不晚。我正在尝试创建一个程序,它有一个类(TestCode),要求用户输入 4 个整数。然后,我将该类中的变量发送到另一个类(MySmartDataType)。然后,我使用这些整数来执行某些计算。问题是,我不确定如何让第二个程序正确地接受这些整数。这是第一堂课。

import java.util.*;

class TestCode{

 public static void main(String args[]){
    int n1 = 0;
    int n2 = 0;
    int n3 = 0;
    int n4 = 0;

      String repeat = "Y";

    int evenTotal = 0;
    int oddTotal = 0;

    MySmartDataType msdt;       
    Scanner sc;
    sc = new Scanner(System.in);

      while (repeat == "Y"){

            System.out.println("Enter number 1 ");       
            n1 = sc.nextInt();

            System.out.println("Enter number 2 ");       
            n2 = sc.nextInt();

            System.out.println("Enter number 3 ");       
            n3 = sc.nextInt();

            System.out.println("Enter number 4 ");       
            n4 = sc.nextInt();


                 System.out.println("Would you like to continue? N for no and Y for Yes.");
                 repeat = sc.nextLine();

                 msdt = new MySmartDataType(n1,n2,n3,n4);

                 }

            evenTotal = msdt.getEvenTotal();
            System.out.println("Even total is: " + evenTotal);

            oddTotal=  msdt.getOddTotal();
            System.out.println("Odd total is: " + oddTotal);               
            System.out.println("Grand Total is: " + msdt.getTotal() );                                              
}
}

这是第二个:

import java.util.*;

class MySmartDataType {

private int myArray[] = new int [4];

myArray[4] = {n1, n2, n3, n4};

int getEvenTotal(){
int sumEven = 0;
for (int i = 0; i <= myArray.length; i++){
    if (myArray[i] % 2 == 0){
    sumEven += myArray[i];
    }
} 
System.out.println("The even total is: " + sumEven);

return sumEven;
}

int getOddTotal(){
int sumOdd = 0;
for (int i = 0; i <= myArray.length; i++){
    if (myArray[i] % 3 == 0){
    sumOdd += myArray[i];
    }
} 
System.out.println("The odd total is: " + sumOdd);

return sumOdd;

}

int getTotal(){
int sumTotal;

for (int i = 0; i <= 3; i++){
    sumTotal += myArray[i];
    }
    System.out.println("The total is: " +sumTotal);

return sumTotal;
}

}

【问题讨论】:

    标签: java class variables constructor


    【解决方案1】:

    执行 setter 和 getter 方法以将变量获取到其他类。

    这是一个关于如何做到这一点的教程:

    YOUTUBE link

    【讨论】:

      【解决方案2】:

      全局声明变量,然后为声明的变量创建getter、setter。因此,您可以通过 getter 方法在您想要的任何其他类中获取变量的值。

      【讨论】:

        【解决方案3】:

        使用public static 修饰符。

        例如:public static int example,现在您可以在其他类中使用example

        【讨论】:

          【解决方案4】:

          在您的 MySmartDataType 类中添加以下内容。在您的MySmartDataType 中创建 4 个实例变量,这些变量可以保存从其他类发送的数据。(例如:int var1...)

          MySmartDataType(int num1,int num2,int num3,int num4)
          {
          var1 = num1;
          var2 = num2;
          var3 = num3;
          var4 = num4;
          }
          

          在方法中使用 var1...var4 来执行操作。您可以将 var1...var4 替换为数组,但是您需要每次循环以读取值并执行 opr(这不是一个糟糕的选择,取决于您)。

          【讨论】:

            【解决方案5】:

            您错过了 MySmartDataType 类中的构造函数。当您在第一个类中创建此类的对象时,将调用此构造函数;即

            msdt = new MySmartDataType(n1,n2,n3,n4);
            

            以下没有意义,删除它

            myArray[4] = {n1, n2, n3, n4};
            

            MySmartDataType 类中的构造函数会将值设置为数组;

                public MySmartDataType (int n1, int n2, int n3, int n4) {
            //this constructor will be called when the object of this class will be created with 4 integer parameters
                  myArray[0] = n1;
                  myArray[1] = n2;
                  myArray[2] = n3;
                  myArray[3] = n4;
                }
            

            【讨论】:

            • 我消除了一些错误,但现在我得到了这些。 MySmartDataType.java:6:错误:方法声明无效;需要返回类型 public MySmartDataType (int n1, int n2, int n3, int n4) { ^ MySmartDataType.java:15: error: ';'预期 int getEvenTotal(){ ^ MySmartDataType.java:27: 错误:';'预期 int getOddTotal(){ ^ MySmartDataType.java:40: error: ';'预期 int getTotal(){ ^ 4 个错误
            • 你能用你现在尝试的更新代码编辑你的问题吗?
            【解决方案6】:

            我猜你现在正在学习 OOP,对吧? 您可以使用一个或多个参数创建一些方法来填充您的第二类属性。

            例如:

            function setData(int data, int pos){ myArray[pos] = data;}
            

            你可以从你的第一堂课中调用那个方法

            msdt.setData(something, 0);
            

            【讨论】:

              【解决方案7】:

              试试这个:

                     import java.util.*;
              
                    class MySmartDataType {
              
                        private int myArray[] = new int [4];
              
              
                        public MySmartDataType(int n1, int n2, int n3, int n4) {
                          myArray[0] = n1;
                          myArray[1] = n2;
                          myArray[2] = n3;
                          myArray[3] = n4;
                        }
              
                       int getEvenTotal(){
                       int sumEven = 0;
                       for (int i = 0; i <= myArray.length; i++){
                        if (myArray[i] % 2 == 0){
                           sumEven += myArray[i];
                         }
                       } 
                       System.out.println("The even total is: " + sumEven);
              
                       return sumEven;
                      }
              
                     int getOddTotal(){
                     int sumOdd = 0;
                     for (int i = 0; i <= myArray.length; i++){
                        if (myArray[i] % 3 == 0){
                          sumOdd += myArray[i];
                         }
                      } 
                     System.out.println("The odd total is: " + sumOdd);
              
                     return sumOdd;
              
                      }
              
                      int getTotal(){
                      int sumTotal = 0;
              
                     for (int i = 0; i <= 3; i++){
                        sumTotal += myArray[i];
                     }
                      System.out.println("The total is: " +sumTotal);
              
                     return sumTotal;
                     }
              

              }

              【讨论】:

              • 好的,该类现在正在运行。但是TestCode类有一个奇怪的错误:变量msdt可能没有被初始化。
              • 在TestCode类中将null赋值给msdt变量MySmartDataType msdt = null;
              【解决方案8】:

              将以下构造函数添加到 MySmartDataType 类。

              public MySmartDataType(int n1, int n2, int n3, int n4)
              {
                  myArray = new int[]{n1, n2, n3, n4};    
              }
              

              【讨论】:

                【解决方案9】:

                http://docs.oracle.com/javaee/6/tutorial/doc/gjbbp.html

                package greetings;
                
                import javax.inject.Inject;
                import javax.enterprise.context.RequestScoped;
                import javax.inject.Named;
                
                @Named
                @RequestScoped
                public class Printer {
                
                    @Inject @Informal Greeting greeting;
                
                    private String name;
                    private String salutation;
                
                    public void createSalutation() {
                        this.salutation = greeting.greet(name);
                    }
                
                    public String getSalutation() {
                        return salutation;
                    }
                
                    public void setName(String name) {
                       this.name = name;
                    }
                
                    public String getName() {
                       return name;
                    }
                }
                

                Setter 为您的输入参数设置一个变量。获取器返回一个正在“获取”的实例变量。例如,

                Printer myobject = new Printer();
                //sets instance variable 'name' to "Hello World"
                myobject.setName("Hello World");
                //gets instance variable 'name' with getter and sets it to mystring
                String mystring = myobject.getName();
                //will print "Hello World"
                System.out.println(mystring);
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-05-07
                  • 2014-01-03
                  • 2019-09-05
                  • 1970-01-01
                  • 2013-02-08
                  相关资源
                  最近更新 更多