Джава:Нахождение максимального значения в массиве
Вопрос
По какой-то причине этот код печатает три значения для самого высокого значения в массиве, когда я пытаюсь напечатать только одно (то есть 11,3).Может кто-нибудь объяснить мне, почему он это делает?
Спасибо.
import java.util.Scanner;
public class Slide24
{
public static void main (String [] args)
{
Scanner in = new Scanner(System.in);
double[] decMax = {-2.8, -8.8, 2.3, 7.9, 4.1, -1.4, 11.3, 10.4,
8.9, 8.1, 5.8, 5.9, 7.8, 4.9, 5.7, -0.9, -0.4, 7.3, 8.3, 6.5, 9.2,
3.5, 3, 1.1, 6.5, 5.1, -1.2, -5.1, 2, 5.2, 2.1};
double total = 0, avgMax = 0;
for (int counter = 0; counter < decMax.length; counter++)
{
total += decMax[counter];
}
avgMax = total / decMax.length;
System.out.printf("%s %2.2f\n", "The average maximum temperature for December was: ", avgMax);
//finds the highest value
double max = decMax[0];
for (int counter = 1; counter < decMax.length; counter++)
{
if (decMax[counter] > max)
{
max = decMax[counter];
System.out.println("The highest maximum for the December is: " + max);
}
}
}
}
Решение
Он распечатывает число каждый раз, когда находит число, превышающее текущий максимум (что в вашем случае происходит три раза). Переместите отпечаток за пределы цикла for, и все будет хорошо.
for (int counter = 1; counter < decMax.length; counter++)
{
if (decMax[counter] > max)
{
max = decMax[counter];
}
}
System.out.println("The highest maximum for the December is: " + max);
Другие советы
Чтобы найти наибольшее (максимальное) или наименьшее (минимальное) значение из массива, это может дать вам правильное направление.Вот пример кода для получения максимального значения из примитивного массива.
Метод 1:
public int maxValue(int array[]){
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < array.length; i++) {
list.add(array[i]);
}
return Collections.max(list);
}
Чтобы получить наименьшее значение, вы можете использовать
Collections.min(list)
Метод 2:
public int maxValue(int array[]){
int max = Arrays.stream(array).max().getAsInt();
return max;
}
Теперь следующая строка должна работать.
System.out.println("The highest maximum for the December is: " + maxValue(decMax));
Вам нужно распечатать макс. после вы отсканировали их все:
for (int counter = 1; counter < decMax.length; counter++)
{
if (decMax[counter] > max)
{
max = decMax[counter];
// not here: System.out.println("The highest maximum for the December is: " + max);
}
}
System.out.println("The highest maximum for the December is: " + max);
То же, что предлагали другие, просто упомянув более чистый способ сделать это:
int max = decMax[0];
for(int i=1;i<decMax.length;i++)
max = Math.max(decMax[i],max);
System.out.println("The Maximum value is : " + max);
Если вы ищете самый быстрый и простой способ выполнения различных действий с массивами, использование класса Collections будет чрезвычайно полезным (документация доступна по адресу https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html), действия варьируются от поиска максимума, минимума, сортировки, обратного порядка и т. д.
Простой способ найти максимальное значение из массива с помощью коллекций:
Double[] decMax = {-2.8, -8.8, 2.3, 7.9, 4.1, -1.4, 11.3, 10.4, 8.9, 8.1, 5.8, 5.9, 7.8, 4.9, 5.7, -0.9, -0.4, 7.3, 8.3, 6.5, 9.2, 3.5, 3.0, 1.1, 6.5, 5.1, -1.2, -5.1, 2.0, 5.2, 2.1};
List<Double> a = new ArrayList<Double>(Arrays.asList(decMax));
System.out.println("The highest maximum for the December is: " + Collections.max(a));
Если вы заинтересованы в поиске минимального значения, аналогично поиску максимального:
System.out.println(Collections.min(a));
Самая простая строка для сортировки списка:
Collections.sort(a);
Или, альтернативно, использование класса Arrays для сортировки массива:
Arrays.sort(decMax);
Однако класс Arrays не имеет метода, который напрямую ссылается на максимальное значение, его сортировка и ссылка на последний индекс являются максимальным значением, однако имейте в виду, что сортировка с помощью двух вышеуказанных методов имеет сложность O (n log n) .
Более короткое решение для получения максимального значения массива:
double max = Arrays.stream(decMax).max(Double::compareTo).get();
У тебя есть свой Распечатать() заявление в for()
цикл, он должен быть после, чтобы он печатался только один раз.как сейчас, каждый раз, когда меняется максимум, он печатает max
.
Вы просто сравниваете нулевой элемент с остальными элементами, чтобы он напечатал последнее наибольшее значение, которое он будет содержать, в вашем случае возникает та же проблема.Чтобы сравнить каждый элемент, нам нужно поменять местами значения, например:
double max = decMax[0];
for (int counter = 1; counter < decMax.length; counter++){
if(max<decMax[i]){
max=decMax[i]; //swapping
decMax[i]=decMax[0];
}
}
System.out.println("The max value is "+ max);
Надеюсь, что это поможет вам
Вы можете использовать функцию, которая принимает массив и находит в нем максимальное значение.я сделал его универсальным, чтобы он мог принимать и другие типы данных
public static <T extends Comparable<T>> T findMax(T[] array){
T max = array[0];
for(T data: array){
if(data.compareTo(max)>0)
max =data;
}
return max;
}
Вы можете написать так.
import java.util.Scanner;
class BigNoArray{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("Enter how many array element");
int n=sc.nextInt();
int[] ar= new int[n];
System.out.println("enter "+n+" values");
for(int i=0;i<ar.length;i++){
ar[i]=sc.nextInt();
}
int fbig=ar[0];
int sbig=ar[1];
int tbig=ar[3];
for(int i=1;i<ar.length;i++){
if(fbig<ar[i]){
sbig=fbig;
fbig=ar[i];
}
else if(sbig<ar[i]&&ar[i]!=fbig){
sbig=ar[i];
}
else if(tbig<ar[i]&&ar[i]!=fbig){
tbig=ar[i];
}
}
System.out.println("first big number is "+fbig);
System.out.println("second big number is "+sbig);
System.out.println("third big number is "+tbig);
}
}
void FindMax()
{
int lessonNum;
System.out.print("Enter your lesson numbers : ");
lessonNum = input.nextInt();
int[] numbers = new int[lessonNum];
for (int i = 0; i < numbers.length; i++)
{
System.out.print("Please enter " + (i + 1) + " number : ");
numbers[i] = input.nextInt();
}
double max = numbers[0];
for (int i = 1; i < numbers.length; i++)
{
if (numbers[i] > max)
{
max = numbers[i];
}
}
System.out.println("Maximum number is : " + max);
}
Самый простой способ, который я нашел, поддерживает все версии Android.
Arrays.sort(series1Numbers);
int maxSeries = Integer.parseInt(String.valueOf(series1Numbers[series1Numbers.length-1]));
Простой способ без использования коллекций
public void findHighestNoInArray() {
int[] a = {1,2,6,8,9};
int large = a[0];
for(int num : a) {
if(large < num) {
large = num;
}
}
System.out.println("Large number is "+large+"");
}
Если вы не хотите использовать какие-либо предопределенные библиотеки Java, ниже приведена
самый простой способ
public class Test {
public static void main(String[] args) {
double[] decMax = {-2.8, -8.8, 2.3, 7.9, 4.1, -1.4, 11.3, 10.4,
8.9, 8.1, 5.8, 5.9, 7.8, 4.9, 5.7, -0.9, -0.4, 7.3, 8.3, 6.5, 9.2,
3.5, 3, 1.1, 6.5, 5.1, -1.2, -5.1, 2, 5.2, 2.1};
double maxx = decMax[0];
for (int i = 0; i < decMax.length; i++) {
if (maxx < decMax[i]) {
maxx = decMax[i];
}
}
System.out.println(maxx);
}
}
import java.util.*;
class main9 //Find the smallest and 2lagest and ascending and descending order of elements in array//
{
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
System.out.println("Enter the array range");
int no=sc.nextInt();
System.out.println("Enter the array element");
int a[]=new int[no];
int i;
for(i=0;i<no;i++)
{
a[i]=sc.nextInt();
}
Arrays.sort(a);
int s=a[0];
int l=a[a.length-1];
int m=a[a.length-2];
System.out.println("Smallest no is="+s);
System.out.println("lagest 2 numbers are=");
System.out.println(l);
System.out.println(m);
System.out.println("Array in ascending:");
for(i=0;i<no;i++)
{
System.out.println(a[i]);
}
System.out.println("Array in descending:");
for(i=a.length-1;i>=0;i--)
{
System.out.println(a[i]);
}
}
}