【问题标题】:Passing Variables between methods?在方法之间传递变量?
【发布时间】:2013-10-30 06:08:31
【问题描述】:

所以我正在尝试为大学编写一个简单的 java 程序,而我完全是这个 java 的新手。我在编译时不断收到错误,方法 printreciept 中出现“错误 - 找不到符号”。我知道这就像无法访问 main 中的变量。有人可以帮忙吗?我知道如果我修复它,我可能会遇到很多错误,但我宁愿从这里开始!附言对不起所有的代码:/

import java.util.Scanner;

public class Order {

public static void main (String[] args) {

    String clubcard;
    double clubcard_discount;
    double special_discount;
    double balance; 
    double final_balance; 
    int apples;
    int oranges;
    int apples_cost;
    int oranges_cost;

    final Scanner scanner = new Scanner( System.in);
    System.out.println("How Many Bags of Apples?");
    apples = scanner.nextInt( );
    System.out.println("How many bags of Oranges?");
    oranges = scanner.nextInt( );
    System.out.println("Do you have a clubcard? Yes/No");
    clubcard = scanner.nextLine();

    if(clubcard == "Yes") {
        clubcard_discount = clubcard_discount - 1.0;
        final_balance = final_balance - (balance / 100 * 10);
    }

    else if(clubcard == "No") {
        special_discount = 0.0;
    }   

    if(apples == 3) {
        special_discount = -1.0;
        balance = balance - 1.0;
    }

}

//Calculating the cost of apples and oranges
public void calculate_apples (final double apples_cost ) {
    apples_cost = apples * 1.0;
}

public void calculate_oranges (final double oranges_cost ) {
    oranges_cost = oranges * 1.25;
}

//Printing the receipt
public static void printReceipt() {
    System.out.println("Bags of apples: " + apples);
    System.out.println("Bags of oranges: " + oranges);
    System.out.println("Clubcard: " + clubcard);
    System.out.println( );
    System.out.println("Price for apples: " + apples_cost);
    System.out.println("Special discount: " + special_discount);
    System.out.println("Price of oranges: " + oranges_cost);
    System.out.println("Total: " + balance);
    System.out.println("Clubcard discount: " + clubcard_discount);
    System.out.println( );
    System.out.println("Final price: " + final_balance);
    System.out.println( );
    System.out.println("Thanks for doing business with CS2500.");

  }

 }

【问题讨论】:

  • 请添加堆栈错误
  • 您需要在类内但在main 函数之外将所有这些变量声明为Class 变量,或者修改printReceipt 以接受所有这些变量作为参数。跨度>
  • 请编辑您的问题以包含 complete 错误消息并指出导致编译器错误的行。

标签: java variables methods scope


【解决方案1】:

您传递的变量仅在 main 中可见。 函数 printReceipt() 无法看到变量,因为它们超出了它的可见范围。

您可以在这里尝试几个选项,并且该程序将运行:

  • 将变量声明为公共类 Order 的数据成员,而不是将它们保留为 main() 函数的成员(最佳选择)。

    public class Order{
        static String clubcard;
        static double clubcard_discount;
        static double special_discount;
        static double balance; 
        static double final_balance; 
        static int apples;
        static int oranges;
        static int apples_cost;
        static int oranges_cost;
    
    //main() and other functions...
    
    }
    

  • 将数据成员作为参数传递给 PrintReceipt() 函数(尽管这可能会使您的函数有点混乱)。

    public static void printReceipt(int apples, int oranges, .... .... ){

       //...defining your function 
    

    }

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    在任何方法中声明的变量仅适用于该方法(本地范围)。 在类级别声明这些方法或将它们作为参数从 main 传递(根据用例,如果从 main 调用方法)。

    【讨论】:

      【解决方案3】:

      您可以添加使它们成为静态的变量。

          public class Order {
      
          static String clubcard;
          static double clubcard_discount;
         static  double special_discount;
        static   double balance; 
        static   double final_balance; 
        static   int apples;
         static  int oranges;
         static  int apples_cost;
         static  int oranges_cost;
      
       public static void main (String[] args) { ...
      

      试试这个并告诉我们。

      【讨论】:

      • 哇,真快。谢谢你,我会试试看,让你知道我的进展情况。
      【解决方案4】:

      您没有传递变量,这就是问题所在。您在 main 中声明了它们。但是,如果您在 main 方法之前将它们声明为静态变量,那将起作用。

      【讨论】:

        【解决方案5】:

        您已在main 方法内将所有变量声明为局部变量,因此它们不在main 之外的范围内。要让其他方法可以访问它们,您可以执行以下操作之一:

        • 将它们作为参数传递给方法
        • 将它们声明为static 在任何方法之外但在类内部的类变量。

        【讨论】:

        • 秒杀。这就是答案。
        • 我要补充一点,您必须使用 equals 来比较字符串内容(if("No".equals(clubcard)) 而不是 if(clubcard == "No")
        猜你喜欢
        • 2018-08-08
        • 1970-01-01
        • 2014-07-13
        • 2012-03-20
        • 2021-01-23
        • 2020-10-25
        相关资源
        最近更新 更多