Java 如何检查超出或低于某些预定限值的值
首先,我要感谢这个社区,虽然我来这里的时间不长,但我很感激这里的每一点 我正在做一个学校的项目,我想大部分时间我都搞清楚了,除了最后一点。当然,对于你看到的任何东西,请随时提供任何建议,但我的主要问题如下 我很难打印出来: 我是否应该使用一个循环(如布尔值)来测试发布的值是否为真 投资绩效指标计数: A.As数量:价值$1250或更高 BBs数量:值为$1100或更高,小于$1500 CCs数量:值为$900或更高,小于$1100 DDs数量:值750美元或更高,小于900美元 EFs数:小于750美元的值 最后,再次感谢大家的耐心和理解。我真的很想了解它是如何工作的,所以如果你能解释一下它是如何工作的,我将非常感激 程序调用文本文件中值的最小值、最大值和平均值。只需要一点信息就可以了。(我已经做了) 到目前为止,我已经尝试了循环来测试这些值,我不确定我是否做对了,但它对我不起作用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
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这里有一个关于如何在映射中打印键和值的很好的解释: