Передача значений из одного нестатического метода в другой из main? - PullRequest
0 голосов
/ 20 января 2019

У меня проблемы с использованием нестатических методов. Я пытаюсь получить значение моей «побочной» переменной из метода и подключить их к другому методу, который будет вычислять площадь. Есть ли способ сделать это, не меняя методы на статические? Ни один из ранее отвеченных вопросов здесь не помогает, и ни один мой учебник.

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 ]

0 голосов
/ 20 января 2019

Нет необходимости передавать какие-либо параметры в 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

Альтернативный подход, который хранит длины сторон в массиве double , 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
0 голосов
/ 20 января 2019

Если вы хотите использовать методы в main () , тогда эти методы должны быть static , поскольку 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);
}

Теперь другие ваши методы в классе не должны быть статическими, поскольку вы не вызываете их из static main () .

0 голосов
/ 20 января 2019

Вам не нужно передавать параметры сторон для получения функции valume, потому что ваша переменная сторон будет доступна для получения функции valume.

...