2016-04-11 6 views
-3

Я пытаюсь выяснить, почему я получаю ошибку при компиляции моего кода. Он должен найти максимум и минимум переменных, введенных в циклы for. Я знаю, что код лишний, но для класса.Найти максимум Ошибка: не найдено подходящего метода для max (int, int, int, int, int)

import java.util.*; 
    public class ForInputNumbers 
    { 
     public static void main (String[] args) 
     { 
     Scanner input = new Scanner(System.in);  
     int value1=0,value2=0,value3=0,value4=0,value5=0; 

     System.out.println("Please type a number"); 

     for (; value1==0;System.out.println("Please type the next number")) 
     { 
     value1 = input.nextInt(); 
     } 

     for (; value2==0;System.out.println("Please type the next number")) 
     { 
     value2 = input.nextInt(); 
     } 

     for (; value3==0;System.out.println("Please type the next number")) 
     { 
     value3 = input.nextInt(); 
     } 

     for (; value4==0;System.out.println("Please type the next number")) 
     { 
     value4 = input.nextInt(); 
     } 

     for (; value5==0;System.out.println("Please type the next number")) 
     { 
     value5 = input.nextInt(); 
     } 

    System.out.println("Your numbers: "+value1+" "+value2+" "+value3+" "+value4+" "+value5); 

    System.out.println("The sum of your numbers: "+(value1+value2+value3+value4+value5)); 

    System.out.println("The average of your numbers: "+(value1+value2+value3+value4+value5)/5); 

    System.out.println("The largest of your numbers: "+(Math.max(value1,value2,value3,value4,value5))); 

    System.out.println("The smallest of your numbers: "+(Math.min(value1,value2,value3,value4,value5))); 

     }//end main method 
    }//end class 

Мои ошибки:

ForInputNumbers.java:60: error: no suitable method found for max(int,int,int,int,int) 
    System.out.println("The largest of your numbers: "+(Math.max(value1,value2,value3,value4,value5))); 
                 ^
    method Math.max(int,int) is not applicable 
     (actual and formal argument lists differ in length) 
    method Math.max(long,long) is not applicable 
     (actual and formal argument lists differ in length) 
    method Math.max(float,float) is not applicable 
     (actual and formal argument lists differ in length) 
    method Math.max(double,double) is not applicable 
     (actual and formal argument lists differ in length) 
ForInputNumbers.java:62: error: no suitable method found for min(int,int,int,int,int) 
    System.out.println("The smallest of your numbers: "+(Math.min(value1,value2,value3,value4,value5))); 
                  ^
    method Math.min(int,int) is not applicable 
     (actual and formal argument lists differ in length) 
    method Math.min(long,long) is not applicable 
     (actual and formal argument lists differ in length) 
    method Math.min(float,float) is not applicable 
     (actual and formal argument lists differ in length) 
    method Math.min(double,double) is not applicable 
     (actual and formal argument lists differ in length) 
2 errors 

Любая помощь приветствуется, спасибо.

+3

Прочитайте сообщение об ошибке перед отправкой пожалуйста – Natecat

+0

Что такая точкой для петель? – Natecat

+0

@natecat Я упомянул, что это было для задания, что оно было избыточным и т. Д. –

ответ

2

Math.max() только принимает 2 аргумента, так что вы должны вкладывать их, чтобы найти макс большего числа. В этом случае это будет выглядеть так: Math.max(value1, Math.max(value2, Math.max(value3, Math.max(value4, value5)))) Вам также нужно будет сделать что-то похожее на это с помощью функции Math.min(). В идеале вы бы использовали массив или список, но в этом случае это не обязательно.

+0

Вы пропустили скобку и полуколону с вашего кода. –

+1

@NeilTwist - На самом деле точка с запятой была бы неправильной. Это выражение не утверждение. (Синтаксически это может быть утверждение, но в контексте он имеет смысл вычислить максимум 4 числа, а затем выбросить результат. Даже вне контекста ... IMO.) –

+0

@StephenC Честно говоря, остальная часть код вряд ли является лучшей практикой. –

0

EDIT: Ответ Энди Тернера, вероятно, лучший.


Оригинал Ответ:

Math.min и Math.max как ожидают два типа номер, так что вам нужно будет либо вызвать их один за другим, сохраняя минимальное или максимальное каждый раз, или предпочтительно вас создаст рекурсивную функцию полезности, которая примет массив и вернет минимальное или максимальное значение.

Или для одного лайнера только в качестве примера:

Math.max(value1, Math.max(value2, Math.max(value3, Math.max(value4, value5)))); 
+0

Как правило, руководства по стилю java предлагают вам помещать пробелы после каждой запятой. – Natecat

+0

@Natecat давайте будем честными, они также скажут, что вы определенно не должны делать такого рода вещи, которые ограничены этим точным прецедентом. В идеале у вас будет массив и уменьшите его. –

+0

У него нет массива, хотя идиома, чтобы найти максимум более двух чисел, которые не находятся в массиве, - это вложение функций. И я просто предлагаю вам отредактировать сообщение и включить пробелы – Natecat

3

Math.max и Math.min принимают только пары аргументов. Вы не можете передать более двух параметров.

опрятный способ сделать это было бы обернуть значения в List<Integer>, а затем использовать Collections.max и Collections.min:

List<Integer> values = Arrays.asList(value1, value2, value3, value4, value5); 
System.out.println("The largest of your numbers: "+Collections.max(values)); 
System.out.println("The smallest of your numbers: "+Collections.min(values)); 
+0

Спасибо, мне очень нравится это. –

Смежные вопросы