Javaのメソッド
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 |
|---|---|---|
| 修飾子 | 可視性と動作 | パブリック、プライベート、静的 |
| 戻り値の型 | 戻り値の型 | int、文字列、void |
| 名前 | メソッド識別子 | 平均を計算、投票を印刷 |
| パラメータ | メソッド入力 | (int[] 投票数、int しきい値) |
void メソッドと return メソッド
// 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 のメソッドを定義から調べました。 オーバーロードや、単次元配列や多次元配列などの基本的なデータ構造まで。
Nel 次の記事 そこから始めます プログラミング オブジェクトベース (OOP): クラス、オブジェクト、状態、動作。
覚えておくべき重要なポイント
- 方法: 名前、パラメータ、リターンを含む再利用可能なコード ブロック
- 空所: 何も返さないメソッド
- オーバーロード: 同じ名前、異なるパラメータ
- 値渡し: プリミティブがコピーされ、オブジェクトが参照を渡します
- 配列: 固定サイズの構造体、0 からのインデックス
- 配列ユーティリティ: sort()、binarySearch()、copyOf()、toString()







