为了账号安全,请及时绑定邮箱和手机立即绑定

将值从一个非静态方法传递到另一个从main?

将值从一个非静态方法传递到另一个从main?

森栏 2022-05-12 16:28:51
我在使用非静态方法时遇到问题。我试图从一个方法中获取我的“side”变量的值,并将它们插入另一个计算面积的方法中。有没有办法在不将方法更改为静态的情况下做到这一点?这里之前回答的问题都没有帮助,我的教科书也没有。import java.util.*;public class CubeVolume{    int side1;    int side2;    int side3;public void getSides(){    Scanner input = new Scanner(System.in);    System.out.println("Enter the length of side1");    side1 = input.nextInt();    System.out.println("Enter the length of side2");    side2 = input.nextInt();    System.out.println("Enter the length of side3");    side3 = input.nextInt();}public int getVolume(int side1, int side2, int side3){    int volume = side1 * side2 * side3;    return volume;}public static void main(String[] args){    CubeVolume cube = new CubeVolume();    cube.getSides();    cube.getVolume(side1, side2, side3); }}我认为问题出在我的方法调用 cube.getVolume(side1, side2, side3); 因为编译器告诉我不能从静态上下文中引用非静态变量。
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

如果你想在main()中使用方法,那么这些方法必须是静态的,因为main()是静态的。所以你的方法应该声明为:


public static void getSides() { .... }

public static int getVolume(int side1, int side2, int side3) { .... }

但是,如果您告诉类的实例从 main() 方法中的非静态方法开始,则可以避免所有这些:


public static void main(String[] args) {

    new CubeVolume().startApp(args);

}


private void startApp(String[] args) {

    CubeVolume cube = new CubeVolume();

    cube.getSides();

    cube.getVolume(side1, side2, side3);

}

现在类中的其他方法不需要是静态的,因为您不是从静态 main()调用它们。


查看完整回答
反对 回复 2022-05-12
?
青春有我

TA贡献1784条经验 获得超8个赞

无需传入任何参数getVolume(),只需使用类变量即可:


import java.util.Scanner;


class CubeVolume {

    private int side1;

    private int side2;

    private int side3;


    private void getSides() {

        Scanner input = new Scanner(System.in);

        System.out.print("Enter the length of side1: ");

        side1 = input.nextInt();

        System.out.print("Enter the length of side2: ");

        side2 = input.nextInt();

        System.out.print("Enter the length of side3: ");

        side3 = input.nextInt();

        input.close();

    }


    private int getVolume() {

        return side1 * side2 * side3;

    }


    private void printAppTitle() {

        System.out.println("Cube Volume Calculator");

        System.out.println("======================");

    }


    public static void main(String[] args) {

        CubeVolume cube = new CubeVolume();

        cube.printAppTitle();

        cube.getSides();

        String cubeVolumeString = String.valueOf(cube.getVolume());

        System.out.println("The cubes volume is: " + cubeVolumeString);

    }

}

示例用法:


Cube Volume Calculator

======================

Enter the length of side1: 3

Enter the length of side2: 4

Enter the length of side3: 5

The cube's volume is: 60

将边长存储在双精度数组中的替代方法sides,并处理 中可能的无效输入getSides():


import java.util.Scanner;


class CubeVolume {

  private double[] sides;


  CubeVolume() {

    sides = new double[3];

  }


  private void getSides() {

    Scanner scanner = new Scanner(System.in);

    int currentSide = 0;

    while (currentSide < sides.length) {

      System.out.printf("Enter the length of side %d: ", currentSide + 1);

      double nextSide = 0.0;

      input:

      while (scanner.hasNext()) {

        if (scanner.hasNextDouble()){

          nextSide = scanner.nextDouble();

          if (nextSide > 0) {

            sides[currentSide] = nextSide;

            break input;

          } else {

            System.out.println("ERROR: Input number was too small.");

            System.out.printf("Enter the length of side %d: ", currentSide + 1);

          }

        } else {

          System.out.println("ERROR: Invalid input, please input a number.");

          System.out.printf("Enter the length of side %d: ", currentSide + 1);

          scanner.next();

        }

      }

      currentSide++;

    }

    scanner.close();

  }


  private double getVolume() {

    return sides[0] * sides[1] * sides[2];

  }


  private void printAppTitle() {

    System.out.println("Cube Volume Calculator");

    System.out.println("======================");

  }


  public static void main(String[] args) {

    CubeVolume cube = new CubeVolume();

    cube.printAppTitle();

    cube.getSides();

    String cubeVolumeString = String.format("%.2f", cube.getVolume());

    System.out.println("The cube's volume is: " + cubeVolumeString);

  }

}

示例用法 2:


Cube Volume Calculator

======================

Enter the length of side 1: a

ERROR: Invalid input, please input a number.

Enter the length of side 1: -1.1

ERROR: Input number was too small.

Enter the length of side 1: 3.4

Enter the length of side 2: 4.7

Enter the length of side 3: 5.8

The cube's volume is: 92.68


查看完整回答
反对 回复 2022-05-12
?
交互式爱情

TA贡献1712条经验 获得超3个赞

您不需要传递边参数来获取值函数,因为您的边变量将可用于获取值函数。



查看完整回答
反对 回复 2022-05-12
  • 3 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信