Java 返回错误数字的数组的最大值和最小值
Java max and min of array returning wrong numbers
我在计算数组的最大值和最小值时遇到问题。我正在寻找最大和最小索引而不是它们包含的值。我的打印输出最大为 7,最小为 1,但这是不正确的。最大值应为 1,最小值应为 6。我尝试在自己的 for 循环中制作 if 语句,但得到了相同的结果,我查看了其他代码,但似乎仍然无法确定我的错误所在。如有任何帮助,我们将不胜感激!
public static void displaySales (double[] data)
{
double total = 0;
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for (int i = 0; i < data.length; i ++)
{
System.out.println("Week "+(i+1)+" total sales:"+data[i]);
System.out.printf("Average daily sales week "+(i+1)+": %.2f\n\n", data[i]/7);
total += data[i];
if (max < data[i])
max = i;
if (min > data[i])
min = i;
}
double avgWeeklySales = total/data.length;
System.out.printf ("Total sales: %.2f\n", total);
System.out.printf ("Average weekly sales: %.2f\n", avgWeeklySales);
System.out.println ("Week with highest sales: "+ (max+1));
System.out.println ("Week with lowest sales: "+ (min+1));
}
}
我想你是想输入 data[i]
的值而不是 i
。
if (max < data[i])
max = data[i];
if (min > data[i])
min = data[i];
您正在寻找 data
数组中具有最小值和最大值的索引。这意味着您应该跟踪 min/max 索引和 min/max 值。
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
int minIndex = 0;
int maxIndex = 0;
for (int i = 0; i < data.length; i ++) {
System.out.println("Week "+(i+1)+" total sales:"+data[i]);
System.out.printf("Average daily sales week "+(i+1)+": %.2f\n\n", data[i]/7);
total += data[i];
if (max < data[i]) {
maxIndex = i;
max = data[i];
}
if (min > data[i]) {
minIndex = i;
min = data[i];
}
}
最后你应该打印 minIndex+1
和 maxIndex+1
.
首先,您需要用实际值(而不是索引)更新最大值和最小值,然后将索引存储在不同的变量中。还有,比较要反过来
if (max > data[i]) {
max = data[i];
maxIndex = i;
}
if (min < data[i]) {
min = data[i];
minIndex = i;
}
最后打印索引值。 (也不要忘记声明它们)
试试这个。
import java.util.Scanner;
public class MinMaxTest {
static void minMax(int[] arr){
int sum=0,min=0,max=0,ch=0;
int[] temp = new int[arr.length];
for(int i=0;i<arr.length;i++){
sum=sum+arr[i];
}
//temp=sum-arr[0];
for(int i=0;i<arr.length;i++){
temp[i]=sum-arr[i];
}
//sort the array, 0 is minimum element index and array length - 1 index is maximum element index
for(int i=0;i<temp.length;i++){
for(int j=0;j<temp.length-1-i;j++){
if(temp[j]>temp[j+1]){
ch=temp[j];
temp[j] = temp[j+1];
temp[j+1] = ch;
}
}
}
/*for(int i: temp){
System.out.println(i);
}*/
System.out.println(temp[0]+" "+temp[arr.length-1]);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
System.out.println("fd:" + 3/6);
Scanner scn = new Scanner(System.in);
System.out.println("enter the size of array");
int n = scn.nextInt();
int[] arr = new int[n];
for(int i=0;i<n;i++){
arr[i] = scn.nextInt();
}
minMax(arr);
scn.close();
}
}
我在计算数组的最大值和最小值时遇到问题。我正在寻找最大和最小索引而不是它们包含的值。我的打印输出最大为 7,最小为 1,但这是不正确的。最大值应为 1,最小值应为 6。我尝试在自己的 for 循环中制作 if 语句,但得到了相同的结果,我查看了其他代码,但似乎仍然无法确定我的错误所在。如有任何帮助,我们将不胜感激!
public static void displaySales (double[] data)
{
double total = 0;
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for (int i = 0; i < data.length; i ++)
{
System.out.println("Week "+(i+1)+" total sales:"+data[i]);
System.out.printf("Average daily sales week "+(i+1)+": %.2f\n\n", data[i]/7);
total += data[i];
if (max < data[i])
max = i;
if (min > data[i])
min = i;
}
double avgWeeklySales = total/data.length;
System.out.printf ("Total sales: %.2f\n", total);
System.out.printf ("Average weekly sales: %.2f\n", avgWeeklySales);
System.out.println ("Week with highest sales: "+ (max+1));
System.out.println ("Week with lowest sales: "+ (min+1));
}
}
我想你是想输入 data[i]
的值而不是 i
。
if (max < data[i])
max = data[i];
if (min > data[i])
min = data[i];
您正在寻找 data
数组中具有最小值和最大值的索引。这意味着您应该跟踪 min/max 索引和 min/max 值。
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
int minIndex = 0;
int maxIndex = 0;
for (int i = 0; i < data.length; i ++) {
System.out.println("Week "+(i+1)+" total sales:"+data[i]);
System.out.printf("Average daily sales week "+(i+1)+": %.2f\n\n", data[i]/7);
total += data[i];
if (max < data[i]) {
maxIndex = i;
max = data[i];
}
if (min > data[i]) {
minIndex = i;
min = data[i];
}
}
最后你应该打印 minIndex+1
和 maxIndex+1
.
首先,您需要用实际值(而不是索引)更新最大值和最小值,然后将索引存储在不同的变量中。还有,比较要反过来
if (max > data[i]) {
max = data[i];
maxIndex = i;
}
if (min < data[i]) {
min = data[i];
minIndex = i;
}
最后打印索引值。 (也不要忘记声明它们)
试试这个。
import java.util.Scanner;
public class MinMaxTest {
static void minMax(int[] arr){
int sum=0,min=0,max=0,ch=0;
int[] temp = new int[arr.length];
for(int i=0;i<arr.length;i++){
sum=sum+arr[i];
}
//temp=sum-arr[0];
for(int i=0;i<arr.length;i++){
temp[i]=sum-arr[i];
}
//sort the array, 0 is minimum element index and array length - 1 index is maximum element index
for(int i=0;i<temp.length;i++){
for(int j=0;j<temp.length-1-i;j++){
if(temp[j]>temp[j+1]){
ch=temp[j];
temp[j] = temp[j+1];
temp[j+1] = ch;
}
}
}
/*for(int i: temp){
System.out.println(i);
}*/
System.out.println(temp[0]+" "+temp[arr.length-1]);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
System.out.println("fd:" + 3/6);
Scanner scn = new Scanner(System.in);
System.out.println("enter the size of array");
int n = scn.nextInt();
int[] arr = new int[n];
for(int i=0;i<n;i++){
arr[i] = scn.nextInt();
}
minMax(arr);
scn.close();
}
}