После определения методов их можно использовать в программе. Для вызова метода надо указать его имя, а после него в скобках значения для его параметров:
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, просмотров: 537.