Вызов файла класса и его методов

Вот мой текущий код В клиентском приложении SalesManager я хочу запросить у пользователя имя файла. Затем создайте объект SalesAnalyzer и вызовите все перечисленные выше методы, выводя результаты каждого метода.

Как мне вызвать SalesAnaylzer и все его методы?

Менеджер по продажам:

import java.io.File;
import java.text.DecimalFormat;
import java.util.Scanner;
import java.io.IOException;;

public class SalesManager
{
    public static void main( String []args) throws IOException
    {
        System.out.println(" What is the name of the file");
        Scanner scan= new Scanner(System.in);
        String fileName= scan.next();
    }
}

и вот файл класса:

import java.io.File;
import java.text.DecimalFormat;
import java.util.Scanner;
import java.io.IOException;
import java.util.*;
import javax.swing.*;
import java.awt.*;

public class SalesAnaylzer {

    DecimalFormat pricePattern = new DecimalFormat("$#0.00");
    int[][] sales = new int[3][4];

    public SalesAnaylzer(String fileName) throws IOException {

        File inputFile = new File(fileName);
        Scanner scan = new Scanner(inputFile);
        for (int row = 0; row < 4; row++) {
            for (int col = 0; col < 6; col++) {
                sales[row][col] = scan.nextInt();
            }
        }
    }

    public String toString() {
        String data = "";
        for (int row = 0; row < 4; row++) {
            data = data + "\nStore " + (row + 1) + ": ";
            for (int col = 0; col < 6; col++) {
                data = data + "QTR " + (col + 1) + ": " + pricePattern.format(sales[row][col]) + " ";
            }
        }
        return data;
    }

    public double totalSales() {
        double total = 0.0;
        for (int row = 0; row < 4; row++) {
            for (int col = 0; col < 6; col++) {
                total = total + sales[row][col];
            }
        }
        return total;
    }

    public double highStoreSales(int store) {
        double highest = 0.0;
        for (int row = 0; row < 4; row++) {
            if (sales[row][store] > highest)
                highest = sales[row][store];
        }
        return highest;
    }

    public double averageStoreSales(int quarter) {
        double total = 0.0;
        double avg = 0.0;
        for (int col = 0; col < 6; col++) {
            total = total + sales[quarter][col];
        }
        avg = (total / 4);
        return avg;
    }
}

2 ответа

Решение

Убедитесь, что они находятся в одном пакете, чтобы вы могли напрямую вызывать конструктор и методы SalesAnaylzer учебный класс. Затем просто создайте объект SalesAnalyzer, как любой другой:

SalesAnaylzer sA = new SalesAnaylzer(filename);
System.out.println(sA);
etc...

Во-первых, давайте представим, что вы сохранили оба класса в пакете (папке) с именем "myPackage". Первое, что вы должны добавить в каждый класс, это строка кода:

package myPackage;

После того, как вы это сделали, вы должны создать новый экземпляр SalesAnalyzer внутри SalesManager класс, так же, как вы создали новый Scanner,

Scanner scan = new Scanner(System.in); //Here you created a new Scanner

Создать новый SalesAnalyzer:

SalesAnalyzer newSA = new SalesAnalyzer();

Теперь, если вы хотите получить доступ к любому методу, вы должны написать имя своего SalesAnalyzer объект, точка после этого и затем имя метода, который вы хотите вызвать.

/*
* Here you created a new String named fileName and added it value that
* yours "next" method returned. "next" is a method inside Scanner object
* and you called for it by writing "scan.next()".
*/

String fileName = scan.next();

Вот как выглядит следующий метод внутри объекта Scanner:

public String next() {
    ensureOpen();
    clearCaches();

    while (true) {
        String token = getCompleteTokenInBuffer(null);
        if (token != null) {
            matchValid = true;
            skipped = false;
            return token;
        }
        if (needInput)
            readInput();
        else
            throwFor();
    }
}

Теперь, допустим, вы хотите позвонить totalSales метод внутри вашего SalesAnalyzer, Это метод, который возвращает значение двойного типа. Если вы хотите сохранить это значение в какой-либо переменной в вашем SalesManager класс вы должны создать переменную типа double и вызвать для totalSales метод после. Это должно выглядеть так:

double totalS = newSA.totalSales();

Таким образом, вы получили доступ к методу totalSales внутри вашего SalesAnalyzer от твоего SalesManager класс и сохранил значение, которое он возвратил в двойную переменную с именем totalS, Надеюсь, я вам кое-что прояснил и даже немного вам помог. Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать.

Другие вопросы по тегам