Как вернуть значение Scanner.in из метода в другой метод - PullRequest
0 голосов
/ 16 октября 2019

Я хочу сделать простую программу, которая будет рассчитывать месячный расход товара. Существует два входа: стоимость продукта - от 100 до 10000 и количество тарифов - от 6 до 48. Я хотел сделать это, как показано в коде ниже:

import java.util.Scanner;

public class Calculator {
Scanner sc = new Scanner (System.in);
double productCost;
int numberOfRates;
double loanInterestRate;
double monthlyRate;

Double print () {
Calculator c = new Calculator();
System.out.println ("Enter the value of your product from 100 to 10 000 : ");
productCost=sc.nextDouble();
if (productCost < 100){
    System.out.println ("You have to choose price between 100 to 10000. Try again: ");
    c.print();
} else if (productCost >10000){
    System.out.println ("You have to choose price between 100 to 10000. Try again: ");
    c.print();
} else if (productCost >= 100 || productCost <=10000){

    c.print1();
    return = productCost;
   // how to return productCost to be used in next method print1()?
}
else return null;   

}
void print1(){
Calculator c = new Calculator(); 
System.out.println ("Now enter how many rates do you want to pay from 6 to 48: ");
numberOfRates=sc.nextInt();
if (numberOfRates<6){
    System.out.println ("You can't choose this number of rates. Choose between 6-48: ");
    c.print1();
} else if (numberOfRates>48){
    System.out.println ("You can't choose this number of rates. Choose between 6-48: ");
    c.print1();
} else if (numberOfRates>=6 || numberOfRates<=12) {
    loanInterestRate=1.025;
    monthlyRate = (productCost*loanInterestRate)/numberOfRates;
    System.out.printf("Your monthly rate is: "+ "%.2f%n",monthlyRate);
} else if (numberOfRates>=13 || numberOfRates <=24 ) {
    loanInterestRate=1.05;
    monthlyRate = (productCost*loanInterestRate)/numberOfRates;
    System.out.printf("Your monthly rate is: "+ "%.2f%n",monthlyRate);
} else if (numberOfRates >=25|| numberOfRates<=48){
    loanInterestRate=1.1;
    monthlyRate = (productCost*loanInterestRate)/numberOfRates;
    System.out.printf("Your monthly rate is: "+ "%.2f%n",monthlyRate);
}
}
}

И основной метод вызывает только метод из другого класса.

public class MonthlyRate {
public static void main(String[] args) {
    Calculator calc = new Calculator();
    calc.print();
    // TODO code application logic here
}

}

И в чем проблема, я надеваюНе знаю, как вернуть «double productCost» из метода «print ()». productCost берёт данные из ввода, и это в два раза больше, но NetBeans показывает мне, что это неправильный тип. Кто-нибудь может помочь мне понять, в чем проблема?

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Ваша программа нуждается в изменениях в нескольких местах. Я сделал эти изменения и написал ниже обновленную программу:

import java.util.Scanner;

class Calculator {
    Scanner sc = new Scanner(System.in);
    double productCost;
    int numberOfRates;
    double loanInterestRate;
    double monthlyRate;

    void print() {
        Calculator c = new Calculator();
        System.out.println("Enter the value of your product from 100 to 10 000 : ");
        productCost = sc.nextDouble();
        if (productCost < 100) {
            System.out.println("You have to choose price between 100 to 10000. Try again: ");
            c.print();
        } else if (productCost > 10000) {
            System.out.println("You have to choose price between 100 to 10000. Try again: ");
            c.print();
        } else if (productCost >= 100 || productCost <= 10000) {
            print1(productCost);            
        }
    }

    void print1(double productCost) {
        Calculator c = new Calculator();
        System.out.println("Now enter how many rates do you want to pay from 6 to 48: ");
        numberOfRates = sc.nextInt();
        if (numberOfRates < 6) {
            System.out.println("You can't choose this number of rates. Choose between 6-48: ");
            c.print1(productCost);
        } else if (numberOfRates > 48) {
            System.out.println("You can't choose this number of rates. Choose between 6-48: ");
            c.print1(productCost);
        } else if (numberOfRates >= 6 || numberOfRates <= 12) {
            loanInterestRate = 1.025;
            monthlyRate = (productCost * loanInterestRate) / numberOfRates;
            System.out.printf("Your monthly rate is: " + "%.2f%n", monthlyRate);
        } else if (numberOfRates >= 13 || numberOfRates <= 24) {
            loanInterestRate = 1.05;
            monthlyRate = (productCost * loanInterestRate) / numberOfRates;
            System.out.printf("Your monthly rate is: " + "%.2f%n", monthlyRate);
        } else if (numberOfRates >= 25 || numberOfRates <= 48) {
            loanInterestRate = 1.1;
            monthlyRate = (productCost * loanInterestRate) / numberOfRates;
            System.out.printf("Your monthly rate is: " + "%.2f%n", monthlyRate);
        }
    }
}

public class MonthlyRate {
    public static void main(String[] args) {
        Calculator calc = new Calculator();
        calc.print();
        // TODO code application logic here
    }

}

Легко понять изменения после сравнения вашей программы с этой обновленной программой. Тем не менее, не стесняйтесь, дайте мне знать, если вам нужна дополнительная помощь по этому вопросу.

0 голосов
/ 16 октября 2019

Просто сделайте

    return productCost;

return - это ключевое слово, а не переменная. Он «возвращает» заданное значение и выходит из функции, так что сущность, вызывающая функцию, может сделать это:

public static void main(String[] args) {
    ...
    double cost = calc.print();  // note calc.print() PRODUCES a value, which we assign to `cost`
    ...
}

Затем вы можете делать все, что захотите, с помощью cost (или по своему выборупеременная), включая передачу ее в другую функцию.

...