Как проверить значения сверх определенных пределов - PullRequest
0 голосов
/ 03 апреля 2019

Во-первых, я хотел бы поблагодарить это сообщество, хотя я не был здесь долго, я ценю все это.

Я работаю над школьным проектом, и я думаю, что по большей части я все понял, кроме этого последнего кусочка. Конечно, не стесняйтесь предлагать любые советы по всему, что вы видите, но мой главный вопрос ниже.

Мне трудно распечатать это: Должен ли я использовать цикл, например, логическое значение, чтобы проверить, является ли значение true для опубликованных значений?

Количество показателей эффективности инвестиций: а. Количество As: значения $ 1250 или выше б. Количество B: значения $ 1100 или выше и менее 1500 $ с. Количество C: значения $ 900 или выше и менее $ 1100 д. Количество D: значения 750 долларов и выше и менее 900 долларов е. Количество Fs: значения менее $ 750

Наконец, еще раз спасибо всем за терпение и понимание. Мне действительно интересно узнать, как все это работает, поэтому, если вы могли бы объяснить, как это работает, я был бы очень признателен.

Программа запрашивает минимальное, максимальное и среднее значения из текстового файла. Просто небольшая информация, чтобы помочь. (Что я уже сделал)

Пока я пробовал циклы для проверки значений, я не уверен, что все сделал правильно, но у меня это не сработало.

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
public class Prog07_InvestmentManager {

    public static void main(String[] args) {

    Scanner in = new Scanner(System.in);    
    Scanner inFile=null;;
    File file=null;
    boolean flag=true;
    while(flag) {
        try {
            flag=false;
            System.out.println("Please enter the file name to import, including file extension."); //prompt user
            file = new File(in.nextLine()); //store user input in variable
            inFile = new Scanner(new FileReader(file)); //read file
        } 
        catch (FileNotFoundException e1) {
            flag=true;
        }
    }

    double min = Integer.MAX_VALUE;
    double max = 0;
    double mean = 0;
    inFile.nextLine();

    double line = 0;
    int sum = 0;
    int count = 0;

    while (inFile.hasNextLine()) {

        line=inFile.nextDouble();
        sum+=line;
        count++;

        if(line>max)
            max=line;

        if(line<min)
            min=line;
    }
    mean = (sum/count);
    System.out.printf("Max: %-4.2f\n", max);
    System.out.printf("Min: %-4.2f\n", min);
    System.out.printf("Mean: %-4.2f\n", mean);
    System.out.println();

    if (in.hasNextDouble()) {

    double[] values = new double [(int) in.nextDouble()];

    }

    try {
        Scanner inputFile = new Scanner(file);

        double[] arr = new double[(int) in.nextDouble()];

        for (int i = 0; in.hasNextDouble(); i++) {
            arr[i] = in.nextDouble();
        }

    } catch (FileNotFoundException e) {
        file = new File("investments.txt");
        System.out.print("File not found.\nPlease enter the correct path if needed.");
        file = new File(in.nextLine());                 
        }
    in.close();
    }
}

1 Ответ

1 голос
/ 03 апреля 2019

Если вы просто хотите напечатать частоту каждой категории (A, B, ...), я бы, вероятно, создал карту частот, используя jash's HashMap.Вы можете назначить ключи для каждой категории, а затем назначить значения для каждой клавиши для каждого вхождения значения.С Java 8 +

вы можете сделать что-то довольно модное. Вы можете сделать что-то вроде этого:

String key;
HashMap<String, Integer> freqMap = new HashMap<>();

while(inFile.hasNextLine()) {
    if(inFile.hasNextDouble()) {
        Double nextDouble = inFile.nextDouble();
        if(nextDouble >= 1250.0) {
            key = A;
            //either create a new key in the HashMap for A, B, etc. or increment the  
            //value associated with the existing key by one
            freqMap.merge(key, 1, Integer::sum);  
        }
        //we are going to use separate if statements as it appears that values can be in 
        //more than one category
        if(nextDouble < 1500.0 && nextDouble >= 1100.0) {
            key = B;
            freqMap.merge(key, 1, Integer::sum);  
        }
        and so on...
    }
}

Наконец, вы просто выполните цикл HashMap и напечатаете ключи и значения.Дайте мне знать, если вам нужно больше деталей.

Редактировать: вам не нужна структура вашего массива для этого метода.Однако, если вам нужно выполнить итерацию по массиву, чтобы построить карту, а не получать данные из вашего файла, измените цикл while на цикл for, выполняющий итерацию по вашему массиву.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...