Использование методов в программе
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

После определения методов их можно использовать в программе. Для вызова метода надо указать его имя, а после него в скобках значения для его параметров:

public static void main(String[] args) {

 

String mes = getMessage(); // вызов первого метода

System.out.println(mes);

 

getSum(); // вызов второго метода

}

 

static String getMessage(){

return "Hell to World";

}

static void getSum(){

int x = 2;

int y = 3;

System.out.printf("%d + %d = %d \n", x, y, x+y);

}

 

Здесь определены два метода. Первый метод getMessage возвращает значение типа String. Поэтому мы можем присвоить это значение какой-нибудь переменной типа String: String mes = getMessage()

Второй метод - процедура Sum - просто складывает два числа и выводит результат на консоль.

 

Передача параметров в методы

Методы могут принимать произвольное число параметров. Например:

static int getSum(int x, int y){

 

return x+y;

}

 

А при вызове этого метода в программе нам необходимо передать на место параметров значения или переменные, которые соответствуют типу параметра:

 

public static void main(String[] args) {

 

int result = getSum(4,6);

System.out.println(result);

}

 

1. Написать программу, вычисляющую значение выражения z=m!/n!, где m,n вводятся с клавиатуры.

public class HelloWorld {

  static int factorial(int a) {

        int s=1;

        for (int i=1; i<=a;i++)

               s*=i;

        return s;

  }

  public static void main(String args[]) {

        Scanner in=new Scanner(System.in);

        System.out.print("Введите значения n и m: ");

        int n=in.nextInt();

        int m=in.nextInt();

        double z=(double) factorial(m)/factorial(n);

        System.out.println(z);

      

  }

      

}

 

2. Написать программу, вычисляющую среднее арифметическое элементов массива.

import java.util.*;

import static java.lang.Math.*;

 

public class HelloWorld {

    

static int[] input_array(int n) {

     int []a=new int[n];

     for (int i=0;i<n;i++)

           a[i]=(int)(random()*10);

     return a;

}

    

 

static void output_array(int [] a) {

     for (int i=0;i<a.length;i++)

     {

           System.out.print(a[i]+"\t");

     }

     System.out.println();

}

    

static double average(int [] a) {

     double s=0;

     for (int i=0; i<a.length;i++)

           s+=a[i];

     return s/a.length;

}

    

public static void main(String args[]) {

     Scanner in=new Scanner(System.in);

     System.out.print("Введите размерность массива n: ");

     int n=in.nextInt();

     int [] a=input_array(n);

     output_array(a);

     double avg=average(a);

     System.out.println(avg);

}

}

 

ДЗ.

1. Написать функцию, которая находит минимальное число из трёх целых чисел.

2. Написать функцию, которая проверяет число на четность и нечетность.

3. Написать функцию, вычисляющую расстояние между двумя точками на плоскости, если известны координаты этих точек.

public static double getDistance(int x1, int y1, int x2, int y2)

{

   return (Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));

}

 

Task. In the method initializeArray():

1.1. Create an array of 20 numbers

1.2. Read from the keyboard 20 numbers and fill the array with them

2. The method max(int[] array) should find the maximum number of the elements of the array

Public class Solution

{

public static void main(String[] args) throws Exception

{

   int[] array = initializeArray();

   int max = max(array);

   System.out.println(max);

}

public static int[] initializeArray() throws IOException {

   int[] numbers = new int[20];

   BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

   for (int i =0; i < numbers.length; i++)

   numbers[i] = Integer.parseInt(reader.readLine());

   return numbers;

}

public static int max(int[] array) {

   int max = array[0];

   for (int i = 0; i < array.length; i++)

   if (array[i] > max)

   max = array[i];

   return max;

}

}

 

При вызове функции в качестве формальных параметров ей передаются КОПИИ фактических значений, поэтому все манипуляции с этими параметрами не будут влиять на значения фактических параметров.

Пример:

Написать функцию, которая меняет местами значения двух переменных:

public static void swap(int a, int b)

{

       int c=a;

       a = b;

       b = c;

}

     

public static void main(String args[]) {

       int a = 4;

       int b = 5;

       swap(a,b);

       System.out.println("a = "+a+" b = "+b);

     

}

Результата не даст (как было а=4 и b=5 так и останется)

 Надо создавать классы – обёртки, потому что классы передаются в методы по ссылке, а не по значению.

static class Int

{

       int a;

}

public static void swap(Int a, Int b)

{

       int c=a.a;

       a.a = b.a;

       b.a = c;

}

     

public static void main(String args[]) {

       Int a = new Int();

       Int b = new Int();

       a.a=4;

       b.a=5;

       swap(a,b);

       System.out.println("a = "+a.a+" b = "+b.a);

}

 

Консольный калькулятор

Необходимо написать простой консольный калькулятор на Java.

§ Метод int getInt() - должен считывать с консоли целое число и возвращать его

§ Метод char getOperation() - должен считывать с консоли какое-то значение и возвращать символ с операцией (+, -, * или /)

§ Метод int calc(int num1, int num2, char operation) - должен выполнять над числами num1 и num2 арифметическую операцию, заданную operation.

§ Метод main() - должен считывать 2 числа (с помощью getInt()), считать операцию (с помощью getOperation(), передать все методу calc() и вывести на экран результат.

 

Простейший вариант

static int getInt()

{

     Scanner in = new Scanner(System.in);

     System.out.print("Введите число: ");

     int num = in.nextInt();

     return num;

}

    

static char[] getOperation() {

     Scanner in = new Scanner(System.in);

     System.out.print("Введите знак операции: ");

     char[] ch = in.next().toCharArray();

     return ch;

}

    

static int calc(int num1, int num2, char operation)

{

     int result = 0;

     switch (operation)

     {

     case '+' : result = num1 + num2; break;

     case '-' : result = num1 - num2; break;

     case '*' : result = num1 * num2; break;

     case '/' : result = num1 / num2; break;

     }

     return result;

}

    

     public static void main(String args[]) {

           int num1 = getInt();

           char[] ch = getOperation();

           int num2 = getInt();

     int rez = calc(num1, num2, ch[0]);

           System.out.println("Ответ: " + rez);

}

 

С проверками (ДЗ)

static int getInt()

{

     int num = 0;

     for(;;)

     {

     Scanner in = new Scanner(System.in);

     System.out.print("Введите число: ");

     if (in.hasNextInt()) {

     num = in.nextInt();

           break;

     }

     else System.out.println("Ошибка ввода!");

     }

return num;

}

    

static char getOperation() {

     String s = null;

     char[] ch = null;

     for(;;)

     {

     Scanner in = new Scanner(System.in);

     System.out.print("Введите знак операции: ");

     s = in.next();

     if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")) {

           ch = s.toCharArray();

           break;

     }

     else System.out.println("Ошибка ввода!");

     }

     return ch[0];

}

    

static int calc(int num1, int num2, char operation)

{

     int result = 0;

     switch (operation)

     {

     case '+' : result = num1 + num2; break;

     case '-' : result = num1 - num2; break;

     case '*' : result = num1 * num2; break;

     case '/' : result = num1 / num2; break;

     }

     return result;

}

    

     public static void main(String args[]) {

           int num1 = getInt();

           char ch = getOperation();

           int num2 = getInt();

           int rez = calc(num1, num2, ch);

           System.out.println("Ответ: " + rez);

}

 

 

Перегрузка методов

В программе мы можем использовать методы с одним и тем же именем, но с разными типами и/или количеством параметров. Такой механизм называется перегрузкой методов.

Перегрузка методов - это возможность создавать несколько методов с одинаковым названием, но разными параметрами. Не все языки программирования позволяют это делать. Перегрузка методов - это часть такой составляющей ООП, как полиморфизм.

public class HelloWorld {

public static void main(String[] args) {

       

   int n1 = getSum(20,10);

   System.out.println(n1);

        

   double n2 = getSum(20.3, 30.4, 9.8);

   System.out.println(n2);

}

static int getSum(int x, int y){

        

return x+y;

}

static double getSum(double x, double y, double z){

        

return x+y+z;

}

static double getSum(double x, double y){

        

return x+y;

}

}

 

Здесь у нас есть три варианта метода getSum(), но при его вызове в зависимости от типа и количества передаваемых параметров система выберет именно ту версию, которая наиболее подходит.

Дата: 2018-11-18, просмотров: 461.