Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查超出或低于某些预定限值的值_Java_Arrays_List_Loops_Printf - Fatal编程技术网

Java 如何检查超出或低于某些预定限值的值

Java 如何检查超出或低于某些预定限值的值,java,arrays,list,loops,printf,Java,Arrays,List,Loops,Printf,首先,我要感谢这个社区,虽然我来这里的时间不长,但我很感激这里的每一点 我正在做一个学校的项目,我想大部分时间我都搞清楚了,除了最后一点。当然,对于你看到的任何东西,请随时提供任何建议,但我的主要问题如下 我很难打印出来: 我是否应该使用一个循环(如布尔值)来测试发布的值是否为真 投资绩效指标计数: A.As数量:价值$1250或更高 BBs数量:值为$1100或更高,小于$1500 CCs数量:值为$900或更高,小于$1100 DDs数量:值750美元或更高,小于900美元 EFs数:小于7

首先,我要感谢这个社区,虽然我来这里的时间不长,但我很感激这里的每一点

我正在做一个学校的项目,我想大部分时间我都搞清楚了,除了最后一点。当然,对于你看到的任何东西,请随时提供任何建议,但我的主要问题如下

我很难打印出来: 我是否应该使用一个循环(如布尔值)来测试发布的值是否为真

投资绩效指标计数: A.As数量:价值$1250或更高 BBs数量:值为$1100或更高,小于$1500 CCs数量:值为$900或更高,小于$1100 DDs数量:值750美元或更高,小于900美元 EFs数:小于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();
    }
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.util.Scanner;
公共类项目07_投资经理{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
扫描仪填充=null;;
File=null;
布尔标志=真;
while(旗帜){
试一试{
flag=false;
System.out.println(“请输入要导入的文件名,包括文件扩展名”);//提示用户
file=新文件(in.nextLine());//将用户输入存储在变量中
infle=new Scanner(new FileReader(file));//读取文件
} 
捕获(FileNotFoundException e1){
flag=true;
}
}
双最小值=整数最大值;
双最大值=0;
双平均值=0;
infle.nextLine();
双线=0;
整数和=0;
整数计数=0;
while(infle.hasNextLine()){
line=infle.nextDouble();
总和+=行;
计数++;
如果(直线>最大值)
最大值=直线;

如果(line如果您只是想打印每个类别(A,B,…)的频率,我可能会使用java的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 freqMap=新HashMap();
while(infle.hasNextLine()){
if(infle.hasNextDouble()){
Double nextDouble=infle.nextDouble();
如果(下一个倍数>=1250.0){
键=A;
//在HashMap中为a、B等创建一个新键,或者增加
//与现有键关联的值为1
merge(key,1,Integer::sum);
}
//我们将使用单独的if语句,因为看起来值可以在
//不止一个类别
如果(nextDouble<1500.0&&nextDouble>=1100.0){
键=B;
merge(key,1,Integer::sum);
}
等等
}
}
最后,您只需在HashMap中循环并打印键和值。如果需要更多详细信息,请告诉我


编辑:此方法不需要数组结构。但是,如果要通过数组迭代来生成映射而不是从文件接收数据,请将while循环更改为通过数组迭代的for循环。

可以附加示例文件或示例输入数据吗?什么意思?类似于:if(max>=1250){do stuff?}要求不明确。顺便说一句,获取统计信息有一个更好的选项。List inputList=new ArrayList();而(infle.hasNextLine()){line=infle.nextDouble();inputList.add(line);}doublesummary statistics=inputList.stream().mapToDouble(Double::doubleValue).summaryStatistics();System.out.println(“average:+stats.getAverage());我很感激,不幸的是我们还没有讨论数组列表,所以我不能使用它。很抱歉,它不太清楚,我基本上是想打印出有多少个A(值超过1250),以及有多少个B(值1100+,但小于1500)等等。哇!我们还没有讨论HashMap,这真的很酷。因此,这在程序中逐行为每个if语句执行步骤,直到结束?然后,如果值为1250或更高,它将存储在一个?只是试图理解它,很抱歉打扰你。我在结尾添加了一些清晰的内容,但是使用while循环或for循环,我们希望通过我们的infle或for循环进行迭代选择我们的数组并使用hashmap结构构建一个频率映射。然后我们可以只打印频率映射的内容。hashmap是为类似的问题而构建的。使用if而不是if-else-if可以确保数组项是否可以包含在多个类别中,并在映射中对每个类别进行计数。它属于s不存储映射中的实际值,只存储值满足给定类别标准的次数。这样,您可以打印a=5、B=3等。这很好,我唯一不懂的是:Hashmap FreqMap这里有一个关于如何在映射中打印键和值的很好的解释: