Вызов файла класса и его методов
Вот мой текущий код В клиентском приложении 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
, Надеюсь, я вам кое-что прояснил и даже немного вам помог. Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать.