자바의 메소드
I 행동 양식 실행되는 재사용 가능한 코드 블록입니다. 특정 작업. 코드를 정리하고 중복을 피할 수 있습니다. 프로그램을 더 읽기 쉽고 유지 관리하기 쉽게 만듭니다.
무엇을 배울 것인가
- 메소드 정의 및 호출
- 매개변수 및 반환 값
- 메소드 오버로딩
- 값과 참조로 전달
- 1차원 및 다차원 배열
- 일반적인 배열 작업
메소드 분석
// Sintassi generale
modificatori tipoRitorno nomeMetodo(parametri) {
// corpo del metodo
return valore; // se non void
}
// Esempio concreto
public static double calcolaMedia(int[] voti) {
int somma = 0;
for (int voto : voti) {
somma += voto;
}
return (double) somma / voti.length;
}
방법의 구성 요소
| 요소 | 설명 | Esempio |
|---|---|---|
| 수정자 | 가시성 및 동작 | 공개, 비공개, 정적 |
| 반환 유형 | 반환 값의 유형 | 정수, 문자열, 무효 |
| 이름 | 메소드 식별자 | 계산평균, printVotes |
| 매개변수 | 메소드 입력 | (int[] 투표, int 임계값) |
무효와 반환 방법
// Metodo void: non restituisce nulla
public static void stampaIntestazione() {
System.out.println("╔═══════════════════════════╗");
System.out.println("║ REGISTRO SCOLASTICO ║");
System.out.println("╚═══════════════════════════╝");
}
// Metodo con ritorno: restituisce un valore
public static boolean isPromosso(double media) {
return media >= 6.0;
}
// Metodo con ritorno String
public static String getGiudizio(int voto) {
if (voto >= 9) return "Eccellente";
if (voto >= 7) return "Buono";
if (voto >= 6) return "Sufficiente";
return "Insufficiente";
}
방법 매개변수
// Parametri singoli
public static int somma(int a, int b) {
return a + b;
}
// Parametri multipli dello stesso tipo
public static double calcolaMediaPonderata(int voto1, int peso1, int voto2, int peso2) {
return (double)(voto1 * peso1 + voto2 * peso2) / (peso1 + peso2);
}
// Parametri varargs (numero variabile)
public static int sommaVoti(int... voti) {
int somma = 0;
for (int voto : voti) {
somma += voto;
}
return somma;
}
// Utilizzo varargs
int totale1 = sommaVoti(7, 8, 6); // 21
int totale2 = sommaVoti(9, 8, 7, 6, 8, 9); // 47
메소드 오버로딩
L'과부하 동일한 이름으로 여러 메서드를 정의할 수 있습니다. 하지만 매개변수(수, 유형 또는 순서)는 다릅니다.
public class CalcolatoreVoti {
// Calcola media di 2 voti
public static double media(int v1, int v2) {
return (v1 + v2) / 2.0;
}
// Calcola media di 3 voti
public static double media(int v1, int v2, int v3) {
return (v1 + v2 + v3) / 3.0;
}
// Calcola media di un array
public static double media(int[] voti) {
int somma = 0;
for (int v : voti) somma += v;
return (double) somma / voti.length;
}
// Calcola media con pesi
public static double media(int[] voti, double[] pesi) {
double sommaPonderata = 0;
double sommaPesi = 0;
for (int i = 0; i < voti.length; i++) {
sommaPonderata += voti[i] * pesi[i];
sommaPesi += pesi[i];
}
return sommaPonderata / sommaPesi;
}
}
// Utilizzo - il compilatore sceglie il metodo giusto
double m1 = CalcolatoreVoti.media(7, 8); // 7.5
double m2 = CalcolatoreVoti.media(7, 8, 9); // 8.0
double m3 = CalcolatoreVoti.media(new int[]{7,8,9}); // 8.0
값으로 전달
Java에서는 모든 매개변수가 전달됩니다. 가치로. 이 이는 메서드가 값의 복사본을 수신함을 의미합니다.
public static void incrementaVoto(int voto) {
voto++; // modifica la copia locale
System.out.println("Dentro metodo: " + voto);
}
public static void main(String[] args) {
int mioVoto = 7;
incrementaVoto(mioVoto);
System.out.println("Dopo chiamata: " + mioVoto); // Ancora 7!
}
// Output:
// Dentro metodo: 8
// Dopo chiamata: 7
// Gli array passano il riferimento (ma sempre per valore!)
public static void incrementaTuttiVoti(int[] voti) {
for (int i = 0; i < voti.length; i++) {
voti[i]++; // modifica l'array originale!
}
}
public static void main(String[] args) {
int[] classeVoti = {6, 7, 8};
incrementaTuttiVoti(classeVoti);
// Ora classeVoti = {7, 8, 9} - l'array originale e stato modificato!
}
프리미티브와 참조
- 기본 요소: 이 방법은 복사본에서 작동하지만 원본은 변경되지 않습니다.
- 배열/객체: 메서드는 참조의 복사본을 수신하므로 원본 개체를 수정할 수 있습니다.
Java의 배열
Un 정렬 동일한 요소를 저장하는 데이터 구조입니다. 인덱스를 통해 액세스할 수 있는 연속적인 메모리 위치를 입력합니다.
선언 및 초기화
// Dichiarazione e allocazione separati
int[] voti; // dichiarazione
voti = new int[5]; // allocazione (5 elementi inizializzati a 0)
// Dichiarazione e allocazione insieme
String[] materie = new String[4]; // 4 elementi null
// Inizializzazione con valori
int[] votiClasse = {7, 8, 6, 9, 8};
String[] materieBase = {"Italiano", "Matematica", "Storia", "Inglese"};
// Inizializzazione esplicita con new
int[] numeri = new int[]{1, 2, 3, 4, 5};
요소에 대한 접근
int[] voti = {7, 8, 6, 9, 8};
// Accesso in lettura (indice da 0 a length-1)
int primoVoto = voti[0]; // 7
int ultimoVoto = voti[4]; // 8
int terzoVoto = voti[2]; // 6
// Accesso in scrittura
voti[2] = 7; // ora l'array e {7, 8, 7, 9, 8}
// Lunghezza dell'array
int numeroVoti = voti.length; // 5
// ATTENZIONE: indice fuori range causa ArrayIndexOutOfBoundsException
// voti[5] = 10; // ERRORE! Indice massimo e 4
배열 반복
String[] studenti = {"Mario", "Luigi", "Anna", "Sarà"};
int[] voti = {7, 8, 6, 9};
// for classico (utile quando serve l'indice)
System.out.println("=== Registro Voti ===");
for (int i = 0; i < studenti.length; i++) {
System.out.println(studenti[i] + ": " + voti[i]);
}
// for-each (più pulito quando non serve l'indice)
System.out.println("\n=== Lista Studenti ===");
for (String studente : studenti) {
System.out.println("- " + studente);
}
// Calcolo media con for-each
int somma = 0;
for (int voto : voti) {
somma += voto;
}
double media = (double) somma / voti.length;
일반적인 작업
import java.util.Arrays;
int[] voti = {7, 9, 6, 8, 7};
// Ordinamento
Arrays.sort(voti); // {6, 7, 7, 8, 9}
// Ricerca binaria (array deve essere ordinato!)
int indice = Arrays.binarySearch(voti, 8); // 3
// Confronto array
int[] altriVoti = {6, 7, 7, 8, 9};
boolean uguali = Arrays.equals(voti, altriVoti); // true
// Copia array
int[] copiaVoti = Arrays.copyOf(voti, voti.length);
int[] primiTre = Arrays.copyOfRange(voti, 0, 3); // {6, 7, 7}
// Riempimento
int[] nuoviVoti = new int[5];
Arrays.fill(nuoviVoti, 6); // {6, 6, 6, 6, 6}
// Stampa array
System.out.println(Arrays.toString(voti)); // [6, 7, 7, 8, 9]
다차원 배열
// Matrice voti: righe = studenti, colonne = materie
int[][] registroClasse = {
{7, 8, 6, 9}, // Mario: Ita, Mat, Sto, Ing
{8, 9, 7, 8}, // Luigi
{6, 7, 6, 7}, // Anna
{9, 8, 8, 9} // Sarà
};
String[] studenti = {"Mario", "Luigi", "Anna", "Sarà"};
String[] materie = {"Italiano", "Matematica", "Storia", "Inglese"};
// Accesso: registroClasse[riga][colonna]
int votoMarioMatematica = registroClasse[0][1]; // 8
int votoSaraInglese = registroClasse[3][3]; // 9
// Iterazione completa
System.out.println("╔══════════════════════════════════════════════╗");
System.out.println("║ REGISTRO DI CLASSE ║");
System.out.println("╠══════════════════════════════════════════════╣");
for (int i = 0; i < studenti.length; i++) {
System.out.printf("║ %-8s: ", studenti[i]);
double somma = 0;
for (int j = 0; j < materie.length; j++) {
System.out.printf("%d ", registroClasse[i][j]);
somma += registroClasse[i][j];
}
System.out.printf("| Media: %.1f ║%n", somma / materie.length);
}
System.out.println("╚══════════════════════════════════════════════╝");
// Array con righe di lunghezza diversa
int[][] votiPerQuadrimestre = new int[2][];
votiPerQuadrimestre[0] = new int[]{7, 8, 6}; // Q1: 3 voti
votiPerQuadrimestre[1] = new int[]{8, 9, 7, 8}; // Q2: 4 voti
// Iterazione su array jagged
for (int q = 0; q < votiPerQuadrimestre.length; q++) {
System.out.print("Quadrimestre " + (q+1) + ": ");
for (int voto : votiPerQuadrimestre[q]) {
System.out.print(voto + " ");
}
System.out.println();
}
전체 예: 레지스트리 관리
package it.scuola.registro;
import java.util.Arrays;
public class GestioneRegistro {
// Costanti
private static final int VOTO_MINIMO = 1;
private static final int VOTO_MASSIMO = 10;
private static final double SOGLIA_PROMOZIONE = 6.0;
public static void main(String[] args) {
// Dati del registro
String[] studenti = {"Mario Rossi", "Luigi Verdi", "Anna Bianchi", "Sarà Neri"};
String[] materie = {"Italiano", "Matematica", "Storia", "Inglese", "Scienze"};
int[][] voti = {
{7, 8, 6, 9, 7}, // Mario
{8, 9, 7, 8, 8}, // Luigi
{6, 5, 6, 7, 6}, // Anna
{9, 8, 8, 9, 9} // Sarà
};
// Stampa registro completo
stampaRegistro(studenti, materie, voti);
// Statistiche per studente
System.out.println("\n=== STATISTICHE STUDENTI ===");
for (int i = 0; i < studenti.length; i++) {
analizzaStudente(studenti[i], voti[i]);
}
// Statistiche per materia
System.out.println("\n=== STATISTICHE MATERIE ===");
for (int j = 0; j < materie.length; j++) {
int[] votiMateria = estraiColonna(voti, j);
System.out.printf("%s: Media %.2f%n", materie[j], calcolaMedia(votiMateria));
}
}
// Stampa il registro formattato
public static void stampaRegistro(String[] studenti, String[] materie, int[][] voti) {
System.out.println("╔════════════════════════════════════════════════════════════╗");
System.out.println("║ REGISTRO DI CLASSE ║");
System.out.println("╠════════════════════════════════════════════════════════════╣");
// Intestazione materie
System.out.print("║ Studente │");
for (String m : materie) {
System.out.printf(" %-4s│", m.substring(0, Math.min(4, m.length())));
}
System.out.println(" Media ║");
System.out.println("╠═════════════════╪══════════════════════════════════════════╣");
// Righe studenti
for (int i = 0; i < studenti.length; i++) {
System.out.printf("║ %-15s │", studenti[i]);
for (int voto : voti[i]) {
System.out.printf(" %2d │", voto);
}
System.out.printf(" %.2f ║%n", calcolaMedia(voti[i]));
}
System.out.println("╚════════════════════════════════════════════════════════════╝");
}
// Analizza un singolo studente
public static void analizzaStudente(String nome, int[] voti) {
double media = calcolaMedia(voti);
int max = trovaMax(voti);
int min = trovaMin(voti);
int insufficienze = contaInsufficienze(voti);
System.out.println("\n" + nome + ":");
System.out.printf(" Media: %.2f%n", media);
System.out.printf(" Voto max: %d, Voto min: %d%n", max, min);
System.out.printf(" Insufficienze: %d%n", insufficienze);
System.out.printf(" Esito: %s%n", determinaEsito(media, insufficienze));
}
// Calcola la media di un array di voti
public static double calcolaMedia(int[] voti) {
if (voti == null || voti.length == 0) return 0;
int somma = 0;
for (int v : voti) somma += v;
return (double) somma / voti.length;
}
// Trova il voto massimo
public static int trovaMax(int[] voti) {
int max = voti[0];
for (int v : voti) {
if (v > max) max = v;
}
return max;
}
// Trova il voto minimo
public static int trovaMin(int[] voti) {
int min = voti[0];
for (int v : voti) {
if (v < min) min = v;
}
return min;
}
// Conta le insufficienze
public static int contaInsufficienze(int[] voti) {
int count = 0;
for (int v : voti) {
if (v < 6) count++;
}
return count;
}
// Determina l'esito finale
public static String determinaEsito(double media, int insufficienze) {
if (media >= SOGLIA_PROMOZIONE && insufficienze == 0) {
return "PROMOSSO";
} else if (insufficienze <= 2) {
return "SOSPESO - Debiti formativi";
} else {
return "NON PROMOSSO";
}
}
// Estrae una colonna dalla matrice (voti di una materia)
public static int[] estraiColonna(int[][] matrice, int indiceColonna) {
int[] colonna = new int[matrice.length];
for (int i = 0; i < matrice.length; i++) {
colonna[i] = matrice[i][indiceColonna];
}
return colonna;
}
// Valida un voto
public static boolean votoValido(int voto) {
return voto >= VOTO_MINIMO && voto <= VOTO_MASSIMO;
}
}
결론
이 기사에서는 정의부터 Java의 메소드를 탐색했습니다. 오버로딩, 단일 및 다차원 배열과 같은 기본 데이터 구조.
에서 다음 기사 우리는 거기에서 시작하겠습니다 프로그래밍 객체 기반(OOP): 클래스, 객체, 상태 및 동작.
기억해야 할 핵심 사항
- 행동 양식: 이름, 매개변수 및 반환값이 포함된 재사용 가능한 코드 블록
- 무효의: 아무것도 반환하지 않는 메서드
- 과부하: 같은 이름, 다른 매개변수
- 값으로 전달: 기본 요소가 복사되고 개체가 참조를 전달합니다.
- 어레이: 고정 크기 구조, 인덱스는 0부터
- 어레이 유틸리티: sort(), BinarySearch(), copyOf(), toString()







