Methods & Scope
Varargs
Variable Arguments
You're building a logging method. Sometimes you log one value, sometimes five. Instead of overloading for every count, varargs lets you accept any number of arguments with a single method definition.
Accept any number of arguments
Define a method that takes zero or more values.
public class BasicVarargs {
public static void main(String[] args) {
System.out.println("=== Basic Varargs ===\n");
// Call with different numbers of arguments
printAll(); // Zero args
printAll("Hello"); // One arg
printAll("Alice", "Bob"); // Two args
printAll("Red", "Green", "Blue"); // Three args
System.out.println("\n=== Inside the Method ===");
showDetails("a", "b", "c");
// Typed varargs
System.out.println("\n=== Integer Varargs ===");
showNumbers(10, 20, 30, 40);
}
// Varargs method
static void printAll(String... messages) {
System.out.println("Called with " + messages.length + " argument(s):");
for (String msg : messages) {
System.out.println(" - " + msg);
}
}
static void showDetails(String... items) {
System.out.println("items.getClass(): " + items.getClass().getSimpleName());
System.out.println("items.length: " + items.length);
System.out.print("items contents: ");
for (int i = 0; i < items.length; i++) {
System.out.print(items[i]);
if (i < items.length - 1) System.out.print(", ");
}
System.out.println();
}
// Integer varargs
static void showNumbers(int... nums) {
System.out.println("Received " + nums.length + " integers");
int sum = 0;
for (int n : nums) sum += n;
System.out.println("Sum: " + sum);
}
}
public static void main(String[] args)
2public class BasicVarargs {3 public static void main(String[] args) {4 System.out.println("=== Basic Varargs ===\n");5 6 // Call with different numbers of arguments //?calls7 printAll(); // Zero args8 printAll("Hello"); // One argoutput=== Basic Varargs ===static void printAll(String... messages)
pass 1 of 46 // Call with different numbers of arguments //?calls7 printAll(); // Zero args8 printAll("Hello"); // One arg9 printAll("Alice", "Bob"); // Two args10 printAll("Red", "Green", "Blue"); // Three args11 12 System.out.println("\n=== Inside the Method ===");13 showDetails("a", "b", "c");14 15 // Typed varargs //@var=_,!16 System.out.println("\n=== Integer Varargs ===");17 showNumbers(10, 20, 30, 40);18}1920// Varargs method //?varargs21static void printAll(String... messages) {22 System.out.println("Called with " + messages.length0 + " argument(s):");23 for (String msg : messages) {outputCalled with 0 argument(s):All 4 passes — pass 1 is the card above pass messages.lengthitems.lengthi1 0 — — 2 1 — — 3 2 — — 4 3 3 0 for (String msg : messages)
pass 1 of 67 printAll(); // Zero args8 printAll("Hello"); // One arg9 printAll("Alice", "Bob"); // Two args10 printAll("Red", "Green", "Blue"); // Three args11 12 System.out.println("\n=== Inside the Method ===");13 showDetails("a", "b", "c");14 15 // Typed varargs //@var=_,!16 System.out.println("\n=== Integer Varargs ===");17 showNumbers(10, 20, 30, 40);18}1920// Varargs method //?varargs21static void printAll(String... messages) {22 System.out.println("Called with " + messages.length + " argument(s):");23 for (String msgHello : messages) {24 System.out.println(" - " + msgHello);25 }output - HelloAll 6 passes — pass 1 is the card above pass msgitems.lengthi1 Hello — — 2 Alice — — 3 Bob — — 4 Red — — 5 Green — — 6 Blue 3 0 static void showDetails(String... items)
28static void showDetails(String... items) { //?details29 System.out.println("items.getClass(): " + items.getClass().getSimpleName());30 System.out.println("items.length: " + items.length3);31 System.out.print("items contents: ");32 for (int i = 0; i < items.length; i++) {outputitems.getClass(): String[] items.length: 3 items contents:for (int i = 0; i < items.length; i++)
pass 1 of 331System.out.print("items contents: ");32for (int i0 = 0; i < items.length3; i++) {33 System.out.print(items[i]a);34 if (i < items.length - 1) System.out.print(", ");outputaAll 3 passes — pass 1 is the card above pass iitems[i]1 0 a 2 1 b 3 2 c if (i < items.length - 1)
pass 1 of 233 System.out.print(items[i]);34 if (i0 < items.length3 - 1) System.out.print(", ");35}output,if (i < items.length - 1)
pass 2 of 233 System.out.print(items[i]);34 if (i1 < items.length3 - 1) System.out.print(", ");35}output,System.out.println();
12 System.out.println("\n=== Inside the Method ===");13 showDetails("a", "b", "c");14 15 // Typed varargs //@var=_,!16 System.out.println("\n=== Integer Varargs ===");17 showNumbers(10, 20, 30, 40);18}1920// Varargs method //?varargs21static void printAll(String... messages) {22 System.out.println("Called with " + messages.length + " argument(s):");23 for (String msg : messages) {24 System.out.println(" - " + msg);25 }26}2728static void showDetails(String... items) { //?details29 System.out.println("items.getClass(): " + items.getClass().getSimpleName());30 System.out.println("items.length: " + items.length);31 System.out.print("items contents: ");32 for (int i = 0; i < items.length; i++) {33 System.out.print(items[i]);34 if (i < items.length - 1) System.out.print(", ");35 }36 System.out.println();37}output === Integer Varargs ===sum ← 0
39// Integer varargs //@var=_,!40static void showNumbers(int... nums) { //?intvarargs41 System.out.println("Received " + nums.length4 + " integers"); //@var=_,!42 int sum→ 0 = 0; //@var=_,!43 for (int n : nums) sum += n; //@var=_,!outputReceived 4 integerssum ← 10
pass 1 of 442int sum = 0; //@var=_,!43for (int n10 : nums) sum→ 10 += n; //@var=_,!44System.out.println("Sum: " + sum); //@var=_,!All 4 passes — pass 1 is the card above pass nsum1 10 0 → 10 2 20 10 → 30 3 30 30 → 60 4 40 60 → 100 System.out.println("Sum: " + sum); //@var=_,!
16 System.out.println("\n=== Integer Varargs ===");17 showNumbers(10, 20, 30, 40);18}1920// Varargs method //?varargs21static void printAll(String... messages) {22 System.out.println("Called with " + messages.length + " argument(s):");23 for (String msg : messages) {24 System.out.println(" - " + msg);25 }26}2728static void showDetails(String... items) { //?details29 System.out.println("items.getClass(): " + items.getClass().getSimpleName());30 System.out.println("items.length: " + items.length);31 System.out.print("items contents: ");32 for (int i = 0; i < items.length; i++) {33 System.out.print(items[i]);34 if (i < items.length - 1) System.out.print(", ");35 }36 System.out.println();37}3839// Integer varargs //@var=_,!40static void showNumbers(int... nums) { //?intvarargs41 System.out.println("Received " + nums.length + " integers"); //@var=_,!42 int sum = 0; //@var=_,!43 for (int n : nums) sum += n; //@var=_,!44 System.out.println("Sum: " + sum100); //@var=_,!45} //@var=_,!outputSum: 100
Use Type... name syntax. Inside the method, it's an array.
Sum any count of numbers
Calculate the sum of however many numbers are passed.
public class SumNumbers {
public static void main(String[] args) {
System.out.println("=== Summing with Varargs ===\n");
// Sum different counts of numbers
int bonus = 5;
System.out.println("sum() = " + sum());
System.out.println("sum(" + bonus + ") = " + sum(bonus));
System.out.println("sum(1, 2, " + bonus + ") = " + sum(1, 2, bonus));
System.out.println("sum(10, 20, 30, 40, " + bonus + ") = " + sum(10, 20, 30, 40, bonus));
System.out.println("\n=== Finding Max ===");
System.out.println("max(5) = " + max(5));
System.out.println("max(3, 7, 2) = " + max(3, 7, 2));
System.out.println("max(10, -5, 8, 20, 15) = " + max(10, -5, 8, 20, 15));
// Extended stats
System.out.println("\n=== Statistics ===");
stats(1, 2, 3, 4, bonus);
stats(10, 20, 30);
}
static int sum(int... numbers) {
int total = 0;
for (int n : numbers) {
total += n;
}
return total;
}
static int max(int first, int... rest) {
// first guarantees at least one argument
int maximum = first;
for (int n : rest) {
if (n > maximum) {
maximum = n;
}
}
return maximum;
}
// Stats helper
static void stats(int... numbers) {
if (numbers.length == 0) {
System.out.println("No numbers provided");
return;
}
int sum = 0, min = numbers[0], max = numbers[0];
for (int n : numbers) {
sum += n;
if (n < min) min = n;
if (n > max) max = n;
}
double avg = (double) sum / numbers.length;
System.out.printf("Count: %d, Sum: %d, Avg: %.2f, Min: %d, Max: %d%n",
numbers.length, sum, avg, min, max);
}
}
public class SumNumbers {
public static void main(String[] args) {
System.out.println("=== Summing with Varargs ===\n");
// Sum different counts of numbers
int bonus = -2;
System.out.println("sum() = " + sum());
System.out.println("sum(" + bonus + ") = " + sum(bonus));
System.out.println("sum(1, 2, " + bonus + ") = " + sum(1, 2, bonus));
System.out.println("sum(10, 20, 30, 40, " + bonus + ") = " + sum(10, 20, 30, 40, bonus));
System.out.println("\n=== Finding Max ===");
System.out.println("max(5) = " + max(5));
System.out.println("max(3, 7, 2) = " + max(3, 7, 2));
System.out.println("max(10, -5, 8, 20, 15) = " + max(10, -5, 8, 20, 15));
// Extended stats
System.out.println("\n=== Statistics ===");
stats(1, 2, 3, 4, bonus);
stats(10, 20, 30);
}
static int sum(int... numbers) {
int total = 0;
for (int n : numbers) {
total += n;
}
return total;
}
static int max(int first, int... rest) {
// first guarantees at least one argument
int maximum = first;
for (int n : rest) {
if (n > maximum) {
maximum = n;
}
}
return maximum;
}
// Stats helper
static void stats(int... numbers) {
if (numbers.length == 0) {
System.out.println("No numbers provided");
return;
}
int sum = 0, min = numbers[0], max = numbers[0];
for (int n : numbers) {
sum += n;
if (n < min) min = n;
if (n > max) max = n;
}
double avg = (double) sum / numbers.length;
System.out.printf("Count: %d, Sum: %d, Avg: %.2f, Min: %d, Max: %d%n",
numbers.length, sum, avg, min, max);
}
}
public class SumNumbers {
public static void main(String[] args) {
System.out.println("=== Summing with Varargs ===\n");
// Sum different counts of numbers
int bonus = 10;
System.out.println("sum() = " + sum());
System.out.println("sum(" + bonus + ") = " + sum(bonus));
System.out.println("sum(1, 2, " + bonus + ") = " + sum(1, 2, bonus));
System.out.println("sum(10, 20, 30, 40, " + bonus + ") = " + sum(10, 20, 30, 40, bonus));
System.out.println("\n=== Finding Max ===");
System.out.println("max(5) = " + max(5));
System.out.println("max(3, 7, 2) = " + max(3, 7, 2));
System.out.println("max(10, -5, 8, 20, 15) = " + max(10, -5, 8, 20, 15));
// Extended stats
System.out.println("\n=== Statistics ===");
stats(1, 2, 3, 4, bonus);
stats(10, 20, 30);
}
static int sum(int... numbers) {
int total = 0;
for (int n : numbers) {
total += n;
}
return total;
}
static int max(int first, int... rest) {
// first guarantees at least one argument
int maximum = first;
for (int n : rest) {
if (n > maximum) {
maximum = n;
}
}
return maximum;
}
// Stats helper
static void stats(int... numbers) {
if (numbers.length == 0) {
System.out.println("No numbers provided");
return;
}
int sum = 0, min = numbers[0], max = numbers[0];
for (int n : numbers) {
sum += n;
if (n < min) min = n;
if (n > max) max = n;
}
double avg = (double) sum / numbers.length;
System.out.printf("Count: %d, Sum: %d, Avg: %.2f, Min: %d, Max: %d%n",
numbers.length, sum, avg, min, max);
}
}
bonus ← 5
2public class SumNumbers {3 public static void main(String[] args) {4 System.out.println("=== Summing with Varargs ===\n");5 6 // Sum different counts of numbers //?sum7 int bonus→ 5 = 5; //@bonus=5, 10, -28 System.out.println("sum() = " + sum());9 System.out.println("sum(" + bonus + ") = " + sum(bonus));output=== Summing with Varargs ===total ← 0
pass 1 of 424static int sum(int... numbers) { //?summethod25 int total→ 0 = 0;26 for (int n : numbers) {27 total += n;28 }29 return total0;30}All 4 passes — pass 1 is the card above pass total1 0 2 0 3 0 4 0 System.out.println("sum(" + bonus + ") = " + sum(bonus));
7int bonus = 5; //@bonus=5, 10, -28System.out.println("sum() = " + sum());9System.out.println("sum(" + bonus5 + ") = " + sum(bonus));10System.out.println("sum(1, 2, " + bonus + ") = " + sum(1, 2, bonus));outputsum() = 0total ← 5
pass 1 of 925int total = 0;26for (int n5 : numbers) {27 total→ 5 += n5;28}All 9 passes — pass 1 is the card above pass ntotal1 5 0 → 5 2 1 0 → 1 3 2 1 → 3 4 5 3 → 8 5 10 0 → 10 6 20 10 → 30 7 30 30 → 60 8 40 60 → 100 9 5 100 → 105 return total;
28 }29 return total5;30}System.out.println("sum(" + bonus + ") = " + sum(bonus));
8System.out.println("sum() = " + sum());9System.out.println("sum(" + bonus5 + ") = " + sum(bonus));10System.out.println("sum(1, 2, " + bonus5 + ") = " + sum(1, 2, bonus));11System.out.println("sum(10, 20, 30, 40, " + bonus + ") = " + sum(10, 20, 30, 40, bonus));outputsum(5) = 5return total;
28 }29 return total8;30}System.out.println("sum(1, 2, " + bonus + ") = " + sum(1, 2, bonus));
9System.out.println("sum(" + bonus + ") = " + sum(bonus));10System.out.println("sum(1, 2, " + bonus5 + ") = " + sum(1, 2, bonus));11System.out.println("sum(10, 20, 30, 40, " + bonus5 + ") = " + sum(10, 20, 30, 40, bonus));outputsum(1, 2, 5) = 8return total;
28 }29 return total105;30}System.out.println("sum(10, 20, 30, 40, " + bonus + ") = " + sum(10, 2…
10System.out.println("sum(1, 2, " + bonus + ") = " + sum(1, 2, bonus));11System.out.println("sum(10, 20, 30, 40, " + bonus5 + ") = " + sum(10, 20, 30, 40, bonus));1213System.out.println("\n=== Finding Max ==="); //?max14System.out.println("max(5) = " + max(5));15System.out.println("max(3, 7, 2) = " + max(3, 7, 2));outputsum(10, 20, 30, 40, 5) = 105 === Finding Max ===maximum ← 5
pass 1 of 332static int max(int first5, int... rest) { //?requireone33 // first guarantees at least one argument34 int maximum→ 5 = first;35 for (int n : rest) {36 if (n > maximum) {37 maximum = n;38 }39 }40 return maximum5;41}All 3 passes — pass 1 is the card above pass firstnmaximum1 5 — 5 2 3 7 3 3 10 20 10 System.out.println("max(5) = " + max(5));
13System.out.println("\n=== Finding Max ==="); //?max14System.out.println("max(5) = " + max(5));15System.out.println("max(3, 7, 2) = " + max(3, 7, 2));16System.out.println("max(10, -5, 8, 20, 15) = " + max(10, -5, 8, 20, 15));outputmax(5) = 5for (int n : rest)
pass 1 of 634int maximum = first;35for (int n7 : rest) {36 if (n > maximum) {All 6 passes — pass 1 is the card above pass nmaximum1 7 3 → 7 2 2 — 3 -5 — 4 8 — 5 20 10 → 20 6 15 — maximum ← 7
pass 1 of 235for (int n : rest) {36 if (n7 > maximum3) {37 maximum→ 7 = n7;38 }return maximum;
39 }40 return maximum7;41}System.out.println("max(3, 7, 2) = " + max(3, 7, 2));
14System.out.println("max(5) = " + max(5));15System.out.println("max(3, 7, 2) = " + max(3, 7, 2));16System.out.println("max(10, -5, 8, 20, 15) = " + max(10, -5, 8, 20, 15));outputmax(3, 7, 2) = 7maximum ← 20
pass 2 of 235for (int n : rest) {36 if (n20 > maximum10) {37 maximum→ 20 = n20;38 }return maximum;
39 }40 return maximum20;41}stats(1, 2, 3, 4, bonus);
15System.out.println("max(3, 7, 2) = " + max(3, 7, 2));16System.out.println("max(10, -5, 8, 20, 15) = " + max(10, -5, 8, 20, 15));1718// Extended stats //@var=_,!19System.out.println("\n=== Statistics ===");20stats(1, 2, 3, 4, bonus5);21stats(10, 20, 30);outputmax(10, -5, 8, 20, 15) = 20 === Statistics ===max ← 1
pass 1 of 243// Stats helper //@var=_,!44static void stats(int... numbers) { //?stats45 if (numbers.length == 0) { //@var=_,!46 System.out.println("No numbers provided"); //@var=_,!47 return; //@var=_,!48 } //@var=_,!49 int sum = 0, min = numbers[0], max→ 1 = numbers[0]1; //@var=_,!50 for (int n : numbers) { //@var=_,!sum ← 1
pass 1 of 849int sum = 0, min = numbers[0], max = numbers[0]; //@var=_,!50for (int n1 : numbers) { //@var=_,!51 sum→ 1 += n1; //@var=_,!52 if (n < min) min = n; //@var=_,!All 8 passes — pass 1 is the card above pass nsum1 1 0 → 1 2 2 1 → 3 3 3 3 → 6 4 4 6 → 10 5 5 10 → 15 6 10 0 → 10 7 20 10 → 30 8 30 30 → 60 max ← 2
pass 1 of 652 if (n < min) min = n; //@var=_,!53 if (n2 > max1) max = n; //@var=_,!54} //@var=_,!All 6 passes — pass 1 is the card above pass nmax1 2 1 → 2 2 3 2 → 3 3 4 3 → 4 4 5 4 → 5 5 20 10 → 20 6 30 20 → 30 avg ← 3.0
19 System.out.println("\n=== Statistics ===");20 stats(1, 2, 3, 4, bonus5);21 stats(10, 20, 30);22}2324static int sum(int... numbers) { //?summethod25 int total = 0;26 for (int n : numbers) {27 total += n;28 }29 return total;30}3132static int max(int first, int... rest) { //?requireone33 // first guarantees at least one argument34 int maximum = first;35 for (int n : rest) {36 if (n > maximum) {37 maximum = n;38 }39 }40 return maximum;41}4243// Stats helper //@var=_,!44static void stats(int... numbers) { //?stats45 if (numbers.length == 0) { //@var=_,!46 System.out.println("No numbers provided"); //@var=_,!47 return; //@var=_,!48 } //@var=_,!49 int sum = 0, min = numbers[0], max = numbers[0]; //@var=_,!50 for (int n : numbers) { //@var=_,!51 sum += n; //@var=_,!52 if (n < min) min = n; //@var=_,!53 if (n > max) max = n; //@var=_,!54 } //@var=_,!55 double avg→ 3.0 = (double) sum / numbers.length5; //@var=_,!56 System.out.printf("Count: %d, Sum: %d, Avg: %.2f, Min: %d, Max: %d%n", //@var=_,!57 numbers.length5, sum15, avg3.0, min1, max5); //@var=_,!58} //@var=_,!max ← 10
pass 2 of 243// Stats helper //@var=_,!44static void stats(int... numbers) { //?stats45 if (numbers.length == 0) { //@var=_,!46 System.out.println("No numbers provided"); //@var=_,!47 return; //@var=_,!48 } //@var=_,!49 int sum = 0, min = numbers[0], max→ 10 = numbers[0]10; //@var=_,!50 for (int n : numbers) { //@var=_,!avg ← 20.0
20 stats(1, 2, 3, 4, bonus);21 stats(10, 20, 30);22}2324static int sum(int... numbers) { //?summethod25 int total = 0;26 for (int n : numbers) {27 total += n;28 }29 return total;30}3132static int max(int first, int... rest) { //?requireone33 // first guarantees at least one argument34 int maximum = first;35 for (int n : rest) {36 if (n > maximum) {37 maximum = n;38 }39 }40 return maximum;41}4243// Stats helper //@var=_,!44static void stats(int... numbers) { //?stats45 if (numbers.length == 0) { //@var=_,!46 System.out.println("No numbers provided"); //@var=_,!47 return; //@var=_,!48 } //@var=_,!49 int sum = 0, min = numbers[0], max = numbers[0]; //@var=_,!50 for (int n : numbers) { //@var=_,!51 sum += n; //@var=_,!52 if (n < min) min = n; //@var=_,!53 if (n > max) max = n; //@var=_,!54 } //@var=_,!55 double avg→ 20.0 = (double) sum / numbers.length3; //@var=_,!56 System.out.printf("Count: %d, Sum: %d, Avg: %.2f, Min: %d, Max: %d%n", //@var=_,!57 numbers.length3, sum60, avg20.0, min10, max30); //@var=_,!58} //@var=_,!
bonus ← -2
1public class SumNumbers {2 public static void main(String[] args) {3 System.out.println("=== Summing with Varargs ===\n");4 5 // Sum different counts of numbers6 int bonus→ -2 = -2;7 System.out.println("sum() = " + sum());8 System.out.println("sum(" + bonus + ") = " + sum(bonus));output=== Summing with Varargs ===total ← 0
pass 1 of 423static int sum(int... numbers) {24 int total→ 0 = 0;25 for (int n : numbers) {26 total += n;27 }28 return total0;29}All 4 passes — pass 1 is the card above pass total1 0 2 0 3 0 4 0 System.out.println("sum(" + bonus + ") = " + sum(bonus));
6int bonus = -2;7System.out.println("sum() = " + sum());8System.out.println("sum(" + bonus-2 + ") = " + sum(bonus));9System.out.println("sum(1, 2, " + bonus + ") = " + sum(1, 2, bonus));outputsum() = 0total ← -2
pass 1 of 924int total = 0;25for (int n-2 : numbers) {26 total→ -2 += n-2;27}All 9 passes — pass 1 is the card above pass ntotal1 -2 0 → -2 2 1 0 → 1 3 2 1 → 3 4 -2 3 → 1 5 10 0 → 10 6 20 10 → 30 7 30 30 → 60 8 40 60 → 100 9 -2 100 → 98 return total;
27 }28 return total-2;29}System.out.println("sum(" + bonus + ") = " + sum(bonus));
7System.out.println("sum() = " + sum());8System.out.println("sum(" + bonus-2 + ") = " + sum(bonus));9System.out.println("sum(1, 2, " + bonus-2 + ") = " + sum(1, 2, bonus));10System.out.println("sum(10, 20, 30, 40, " + bonus + ") = " + sum(10, 20, 30, 40, bonus));outputsum(-2) = -2return total;
27 }28 return total1;29}System.out.println("sum(1, 2, " + bonus + ") = " + sum(1, 2, bonus));
8System.out.println("sum(" + bonus + ") = " + sum(bonus));9System.out.println("sum(1, 2, " + bonus-2 + ") = " + sum(1, 2, bonus));10System.out.println("sum(10, 20, 30, 40, " + bonus-2 + ") = " + sum(10, 20, 30, 40, bonus));outputsum(1, 2, -2) = 1return total;
27 }28 return total98;29}System.out.println("sum(10, 20, 30, 40, " + bonus + ") = " + sum(10, 2…
9System.out.println("sum(1, 2, " + bonus + ") = " + sum(1, 2, bonus));10System.out.println("sum(10, 20, 30, 40, " + bonus-2 + ") = " + sum(10, 20, 30, 40, bonus));1112System.out.println("\n=== Finding Max ===");13System.out.println("max(5) = " + max(5));14System.out.println("max(3, 7, 2) = " + max(3, 7, 2));outputsum(10, 20, 30, 40, -2) = 98 === Finding Max ===maximum ← 5
pass 1 of 331static int max(int first5, int... rest) {32 // first guarantees at least one argument33 int maximum→ 5 = first;34 for (int n : rest) {35 if (n > maximum) {36 maximum = n;37 }38 }39 return maximum5;40}All 3 passes — pass 1 is the card above pass firstnmaximum1 5 — 5 2 3 7 3 3 10 20 10 System.out.println("max(5) = " + max(5));
12System.out.println("\n=== Finding Max ===");13System.out.println("max(5) = " + max(5));14System.out.println("max(3, 7, 2) = " + max(3, 7, 2));15System.out.println("max(10, -5, 8, 20, 15) = " + max(10, -5, 8, 20, 15));outputmax(5) = 5for (int n : rest)
pass 1 of 633int maximum = first;34for (int n7 : rest) {35 if (n > maximum) {All 6 passes — pass 1 is the card above pass nmaximum1 7 3 → 7 2 2 — 3 -5 — 4 8 — 5 20 10 → 20 6 15 — maximum ← 7
pass 1 of 234for (int n : rest) {35 if (n7 > maximum3) {36 maximum→ 7 = n7;37 }return maximum;
38 }39 return maximum7;40}System.out.println("max(3, 7, 2) = " + max(3, 7, 2));
13System.out.println("max(5) = " + max(5));14System.out.println("max(3, 7, 2) = " + max(3, 7, 2));15System.out.println("max(10, -5, 8, 20, 15) = " + max(10, -5, 8, 20, 15));outputmax(3, 7, 2) = 7maximum ← 20
pass 2 of 234for (int n : rest) {35 if (n20 > maximum10) {36 maximum→ 20 = n20;37 }return maximum;
38 }39 return maximum20;40}stats(1, 2, 3, 4, bonus);
14System.out.println("max(3, 7, 2) = " + max(3, 7, 2));15System.out.println("max(10, -5, 8, 20, 15) = " + max(10, -5, 8, 20, 15));1617// Extended stats18System.out.println("\n=== Statistics ===");19stats(1, 2, 3, 4, bonus-2);20stats(10, 20, 30);outputmax(10, -5, 8, 20, 15) = 20 === Statistics ===max ← 1
pass 1 of 242// Stats helper43static void stats(int... numbers) {44 if (numbers.length == 0) {45 System.out.println("No numbers provided");46 return;47 }48 int sum = 0, min = numbers[0], max→ 1 = numbers[0]1;49 for (int n : numbers) {sum ← 1
pass 1 of 848int sum = 0, min = numbers[0], max = numbers[0];49for (int n1 : numbers) {50 sum→ 1 += n1;51 if (n < min) min = n;All 8 passes — pass 1 is the card above pass nsummin1 1 0 → 1 — 2 2 1 → 3 — 3 3 3 → 6 — 4 4 6 → 10 — 5 -2 10 → 8 1 → -2 6 10 0 → 10 — 7 20 10 → 30 — 8 30 30 → 60 — max ← 2
pass 1 of 551 if (n < min) min = n;52 if (n2 > max1) max = n;53}All 5 passes — pass 1 is the card above pass nmaxmin1 2 1 → 2 — 2 3 2 → 3 — 3 4 3 → 4 1 → -2 4 20 10 → 20 — 5 30 20 → 30 — min ← -2
50sum += n;51if (n-2 < min1) min = n;52if (n > max) max = n;avg ← 1.6
18 System.out.println("\n=== Statistics ===");19 stats(1, 2, 3, 4, bonus-2);20 stats(10, 20, 30);21}2223static int sum(int... numbers) {24 int total = 0;25 for (int n : numbers) {26 total += n;27 }28 return total;29}3031static int max(int first, int... rest) {32 // first guarantees at least one argument33 int maximum = first;34 for (int n : rest) {35 if (n > maximum) {36 maximum = n;37 }38 }39 return maximum;40}4142// Stats helper43static void stats(int... numbers) {44 if (numbers.length == 0) {45 System.out.println("No numbers provided");46 return;47 }48 int sum = 0, min = numbers[0], max = numbers[0];49 for (int n : numbers) {50 sum += n;51 if (n < min) min = n;52 if (n > max) max = n;53 }54 double avg→ 1.6 = (double) sum / numbers.length5;55 System.out.printf("Count: %d, Sum: %d, Avg: %.2f, Min: %d, Max: %d%n",56 numbers.length5, sum8, avg1.6, min-2, max4);57}max ← 10
pass 2 of 242// Stats helper43static void stats(int... numbers) {44 if (numbers.length == 0) {45 System.out.println("No numbers provided");46 return;47 }48 int sum = 0, min = numbers[0], max→ 10 = numbers[0]10;49 for (int n : numbers) {avg ← 20.0
19 stats(1, 2, 3, 4, bonus);20 stats(10, 20, 30);21}2223static int sum(int... numbers) {24 int total = 0;25 for (int n : numbers) {26 total += n;27 }28 return total;29}3031static int max(int first, int... rest) {32 // first guarantees at least one argument33 int maximum = first;34 for (int n : rest) {35 if (n > maximum) {36 maximum = n;37 }38 }39 return maximum;40}4142// Stats helper43static void stats(int... numbers) {44 if (numbers.length == 0) {45 System.out.println("No numbers provided");46 return;47 }48 int sum = 0, min = numbers[0], max = numbers[0];49 for (int n : numbers) {50 sum += n;51 if (n < min) min = n;52 if (n > max) max = n;53 }54 double avg→ 20.0 = (double) sum / numbers.length3;55 System.out.printf("Count: %d, Sum: %d, Avg: %.2f, Min: %d, Max: %d%n",56 numbers.length3, sum60, avg20.0, min10, max30);57}
bonus ← 10
1public class SumNumbers {2 public static void main(String[] args) {3 System.out.println("=== Summing with Varargs ===\n");4 5 // Sum different counts of numbers6 int bonus→ 10 = 10;7 System.out.println("sum() = " + sum());8 System.out.println("sum(" + bonus + ") = " + sum(bonus));output=== Summing with Varargs ===total ← 0
pass 1 of 423static int sum(int... numbers) {24 int total→ 0 = 0;25 for (int n : numbers) {26 total += n;27 }28 return total0;29}All 4 passes — pass 1 is the card above pass total1 0 2 0 3 0 4 0 System.out.println("sum(" + bonus + ") = " + sum(bonus));
6int bonus = 10;7System.out.println("sum() = " + sum());8System.out.println("sum(" + bonus10 + ") = " + sum(bonus));9System.out.println("sum(1, 2, " + bonus + ") = " + sum(1, 2, bonus));outputsum() = 0total ← 10
pass 1 of 924int total = 0;25for (int n10 : numbers) {26 total→ 10 += n10;27}All 9 passes — pass 1 is the card above pass ntotal1 10 0 → 10 2 1 0 → 1 3 2 1 → 3 4 10 3 → 13 5 10 0 → 10 6 20 10 → 30 7 30 30 → 60 8 40 60 → 100 9 10 100 → 110 return total;
27 }28 return total10;29}System.out.println("sum(" + bonus + ") = " + sum(bonus));
7System.out.println("sum() = " + sum());8System.out.println("sum(" + bonus10 + ") = " + sum(bonus));9System.out.println("sum(1, 2, " + bonus10 + ") = " + sum(1, 2, bonus));10System.out.println("sum(10, 20, 30, 40, " + bonus + ") = " + sum(10, 20, 30, 40, bonus));outputsum(10) = 10return total;
27 }28 return total13;29}System.out.println("sum(1, 2, " + bonus + ") = " + sum(1, 2, bonus));
8System.out.println("sum(" + bonus + ") = " + sum(bonus));9System.out.println("sum(1, 2, " + bonus10 + ") = " + sum(1, 2, bonus));10System.out.println("sum(10, 20, 30, 40, " + bonus10 + ") = " + sum(10, 20, 30, 40, bonus));outputsum(1, 2, 10) = 13return total;
27 }28 return total110;29}System.out.println("sum(10, 20, 30, 40, " + bonus + ") = " + sum(10, 2…
9System.out.println("sum(1, 2, " + bonus + ") = " + sum(1, 2, bonus));10System.out.println("sum(10, 20, 30, 40, " + bonus10 + ") = " + sum(10, 20, 30, 40, bonus));1112System.out.println("\n=== Finding Max ===");13System.out.println("max(5) = " + max(5));14System.out.println("max(3, 7, 2) = " + max(3, 7, 2));outputsum(10, 20, 30, 40, 10) = 110 === Finding Max ===maximum ← 5
pass 1 of 331static int max(int first5, int... rest) {32 // first guarantees at least one argument33 int maximum→ 5 = first;34 for (int n : rest) {35 if (n > maximum) {36 maximum = n;37 }38 }39 return maximum5;40}All 3 passes — pass 1 is the card above pass firstnmaximum1 5 — 5 2 3 7 3 3 10 20 10 System.out.println("max(5) = " + max(5));
12System.out.println("\n=== Finding Max ===");13System.out.println("max(5) = " + max(5));14System.out.println("max(3, 7, 2) = " + max(3, 7, 2));15System.out.println("max(10, -5, 8, 20, 15) = " + max(10, -5, 8, 20, 15));outputmax(5) = 5for (int n : rest)
pass 1 of 633int maximum = first;34for (int n7 : rest) {35 if (n > maximum) {All 6 passes — pass 1 is the card above pass nmaximum1 7 3 → 7 2 2 — 3 -5 — 4 8 — 5 20 10 → 20 6 15 — maximum ← 7
pass 1 of 234for (int n : rest) {35 if (n7 > maximum3) {36 maximum→ 7 = n7;37 }return maximum;
38 }39 return maximum7;40}System.out.println("max(3, 7, 2) = " + max(3, 7, 2));
13System.out.println("max(5) = " + max(5));14System.out.println("max(3, 7, 2) = " + max(3, 7, 2));15System.out.println("max(10, -5, 8, 20, 15) = " + max(10, -5, 8, 20, 15));outputmax(3, 7, 2) = 7maximum ← 20
pass 2 of 234for (int n : rest) {35 if (n20 > maximum10) {36 maximum→ 20 = n20;37 }return maximum;
38 }39 return maximum20;40}stats(1, 2, 3, 4, bonus);
14System.out.println("max(3, 7, 2) = " + max(3, 7, 2));15System.out.println("max(10, -5, 8, 20, 15) = " + max(10, -5, 8, 20, 15));1617// Extended stats18System.out.println("\n=== Statistics ===");19stats(1, 2, 3, 4, bonus10);20stats(10, 20, 30);outputmax(10, -5, 8, 20, 15) = 20 === Statistics ===max ← 1
pass 1 of 242// Stats helper43static void stats(int... numbers) {44 if (numbers.length == 0) {45 System.out.println("No numbers provided");46 return;47 }48 int sum = 0, min = numbers[0], max→ 1 = numbers[0]1;49 for (int n : numbers) {sum ← 1
pass 1 of 848int sum = 0, min = numbers[0], max = numbers[0];49for (int n1 : numbers) {50 sum→ 1 += n1;51 if (n < min) min = n;All 8 passes — pass 1 is the card above pass nsum1 1 0 → 1 2 2 1 → 3 3 3 3 → 6 4 4 6 → 10 5 10 10 → 20 6 10 0 → 10 7 20 10 → 30 8 30 30 → 60 max ← 2
pass 1 of 651 if (n < min) min = n;52 if (n2 > max1) max = n;53}All 6 passes — pass 1 is the card above pass nmax1 2 1 → 2 2 3 2 → 3 3 4 3 → 4 4 10 4 → 10 5 20 10 → 20 6 30 20 → 30 avg ← 4.0
18 System.out.println("\n=== Statistics ===");19 stats(1, 2, 3, 4, bonus10);20 stats(10, 20, 30);21}2223static int sum(int... numbers) {24 int total = 0;25 for (int n : numbers) {26 total += n;27 }28 return total;29}3031static int max(int first, int... rest) {32 // first guarantees at least one argument33 int maximum = first;34 for (int n : rest) {35 if (n > maximum) {36 maximum = n;37 }38 }39 return maximum;40}4142// Stats helper43static void stats(int... numbers) {44 if (numbers.length == 0) {45 System.out.println("No numbers provided");46 return;47 }48 int sum = 0, min = numbers[0], max = numbers[0];49 for (int n : numbers) {50 sum += n;51 if (n < min) min = n;52 if (n > max) max = n;53 }54 double avg→ 4.0 = (double) sum / numbers.length5;55 System.out.printf("Count: %d, Sum: %d, Avg: %.2f, Min: %d, Max: %d%n",56 numbers.length5, sum20, avg4.0, min1, max10);57}max ← 10
pass 2 of 242// Stats helper43static void stats(int... numbers) {44 if (numbers.length == 0) {45 System.out.println("No numbers provided");46 return;47 }48 int sum = 0, min = numbers[0], max→ 10 = numbers[0]10;49 for (int n : numbers) {avg ← 20.0
19 stats(1, 2, 3, 4, bonus);20 stats(10, 20, 30);21}2223static int sum(int... numbers) {24 int total = 0;25 for (int n : numbers) {26 total += n;27 }28 return total;29}3031static int max(int first, int... rest) {32 // first guarantees at least one argument33 int maximum = first;34 for (int n : rest) {35 if (n > maximum) {36 maximum = n;37 }38 }39 return maximum;40}4142// Stats helper43static void stats(int... numbers) {44 if (numbers.length == 0) {45 System.out.println("No numbers provided");46 return;47 }48 int sum = 0, min = numbers[0], max = numbers[0];49 for (int n : numbers) {50 sum += n;51 if (n < min) min = n;52 if (n > max) max = n;53 }54 double avg→ 20.0 = (double) sum / numbers.length3;55 System.out.printf("Count: %d, Sum: %d, Avg: %.2f, Min: %d, Max: %d%n",56 numbers.length3, sum60, avg20.0, min10, max30);57}
Loop through the varargs array just like any array.
Combine regular and varargs parameters
Mix required parameters with varargs.
public class MixedParams {
public static void main(String[] args) {
System.out.println("=== Mixed Parameters with Varargs ===\n");
// Required params + varargs
log("INFO", "System started");
log("DEBUG", "Loading config", "user.properties");
log("ERROR", "Failed to connect", "timeout", "retry=3");
System.out.println("\n=== Shopping Cart ===");
printReceipt("Alice", 10.99, 24.50, 5.25);
printReceipt("Bob", 99.99);
System.out.println("\n=== Team Roster ===");
printTeam("Engineering", "Alice", "Bob", "Charlie");
printTeam("Marketing", "Diana", "Eve");
printTeam("Executive"); // No members
}
// Level (required) + message (required) + details (varargs)
static void log(String level, String message, String... details) {
System.out.print("[" + level + "] " + message);
if (details.length > 0) {
System.out.print(" | ");
System.out.print(String.join(", ", details));
}
System.out.println();
}
// Name + prices (at least one price makes sense)
static void printReceipt(String customer, double... prices) {
System.out.println("Receipt for: " + customer);
double total = 0;
for (int i = 0; i < prices.length; i++) {
System.out.printf(" Item %d: $%.2f%n", i + 1, prices[i]);
total += prices[i];
}
System.out.printf(" Total: $%.2f%n", total);
}
static void printTeam(String teamName, String... members) {
System.out.print("Team " + teamName + ": ");
if (members.length == 0) {
System.out.println("(no members)");
} else {
System.out.println(String.join(", ", members));
}
}
}
public static void main(String[] args)
1public class MixedParams {2 public static void main(String[] args) {3 System.out.println("=== Mixed Parameters with Varargs ===\n");4 5 // Required params + varargs //?mixed6 log("INFO", "System started");7 log("DEBUG", "Loading config", "user.properties");output=== Mixed Parameters with Varargs ===static void log(String level, String message, String... details)
pass 1 of 35 // Required params + varargs //?mixed6 log("INFO", "System started");7 log("DEBUG", "Loading config", "user.properties");8 log("ERROR", "Failed to connect", "timeout", "retry=3");9 10 System.out.println("\n=== Shopping Cart ==="); //?cart11 printReceipt("Alice", 10.99, 24.50, 5.25);12 printReceipt("Bob", 99.99);13 14 System.out.println("\n=== Team Roster ==="); //?roster15 printTeam("Engineering", "Alice", "Bob", "Charlie");16 printTeam("Marketing", "Diana", "Eve");17 printTeam("Executive"); // No members18}1920// Level (required) + message (required) + details (varargs)21static void log(String levelINFO, String messageSystem started, String... details) { //?logmethod22 System.out.print("[" + levelINFO + "] " + messageSystem started);23 if (details.length > 0) {24 System.out.print(" | ");25 System.out.print(String.join(", ", details));26 }27 System.out.println();28}output[INFO] System startedAll 3 passes — pass 1 is the card above pass levelmessagedetails.length1 INFO System started — 2 DEBUG Loading config 1 3 ERROR Failed to connect 2 if (details.length > 0)
pass 1 of 222System.out.print("[" + level + "] " + message);23if (details.length1 > 0) {24 System.out.print(" | ");25 System.out.print(String.join(", ", details));26}output | user.propertiesSystem.out.println();
6 log("INFO", "System started");7 log("DEBUG", "Loading config", "user.properties");8 log("ERROR", "Failed to connect", "timeout", "retry=3");9 10 System.out.println("\n=== Shopping Cart ==="); //?cart11 printReceipt("Alice", 10.99, 24.50, 5.25);12 printReceipt("Bob", 99.99);13 14 System.out.println("\n=== Team Roster ==="); //?roster15 printTeam("Engineering", "Alice", "Bob", "Charlie");16 printTeam("Marketing", "Diana", "Eve");17 printTeam("Executive"); // No members18}1920// Level (required) + message (required) + details (varargs)21static void log(String level, String message, String... details) { //?logmethod22 System.out.print("[" + level + "] " + message);23 if (details.length > 0) {24 System.out.print(" | ");25 System.out.print(String.join(", ", details));26 }27 System.out.println();28}if (details.length > 0)
pass 2 of 222System.out.print("[" + level + "] " + message);23if (details.length2 > 0) {24 System.out.print(" | ");25 System.out.print(String.join(", ", details));26}output | timeout, retry=3System.out.println();
7 log("DEBUG", "Loading config", "user.properties");8 log("ERROR", "Failed to connect", "timeout", "retry=3");9 10 System.out.println("\n=== Shopping Cart ==="); //?cart11 printReceipt("Alice", 10.99, 24.50, 5.25);12 printReceipt("Bob", 99.99);13 14 System.out.println("\n=== Team Roster ==="); //?roster15 printTeam("Engineering", "Alice", "Bob", "Charlie");16 printTeam("Marketing", "Diana", "Eve");17 printTeam("Executive"); // No members18}1920// Level (required) + message (required) + details (varargs)21static void log(String level, String message, String... details) { //?logmethod22 System.out.print("[" + level + "] " + message);23 if (details.length > 0) {24 System.out.print(" | ");25 System.out.print(String.join(", ", details));26 }27 System.out.println();28}output === Shopping Cart ===total ← 0.0
pass 1 of 230// Name + prices (at least one price makes sense)31static void printReceipt(String customerAlice, double... prices) { //?receipt32 System.out.println("Receipt for: " + customerAlice);33 double total→ 0.0 = 0;34 for (int i = 0; i < prices.length; i++) {outputReceipt for: Alicetotal ← 10.99
pass 1 of 433double total = 0;34for (int i0 = 0; i < prices.length3; i++) {35 System.out.printf(" Item %d: $%.2f%n", i0 + 1, prices[i]10.99);36 total→ 10.99 += prices[i]10.99;37}All 4 passes — pass 1 is the card above pass iprices.lengthprices[i]total1 0 3 10.99 0.0 → 10.99 2 1 3 24.5 10.99 → 35.49 3 2 3 5.25 35.49 → 40.74 4 0 1 99.99 0.0 → 99.99 System.out.printf(" Total: $%.2f%n", total);
10 System.out.println("\n=== Shopping Cart ==="); //?cart11 printReceipt("Alice", 10.99, 24.50, 5.25);12 printReceipt("Bob", 99.99);13 14 System.out.println("\n=== Team Roster ==="); //?roster15 printTeam("Engineering", "Alice", "Bob", "Charlie");16 printTeam("Marketing", "Diana", "Eve");17 printTeam("Executive"); // No members18}1920// Level (required) + message (required) + details (varargs)21static void log(String level, String message, String... details) { //?logmethod22 System.out.print("[" + level + "] " + message);23 if (details.length > 0) {24 System.out.print(" | ");25 System.out.print(String.join(", ", details));26 }27 System.out.println();28}2930// Name + prices (at least one price makes sense)31static void printReceipt(String customer, double... prices) { //?receipt32 System.out.println("Receipt for: " + customer);33 double total = 0;34 for (int i = 0; i < prices.length; i++) {35 System.out.printf(" Item %d: $%.2f%n", i + 1, prices[i]);36 total += prices[i];37 }38 System.out.printf(" Total: $%.2f%n", total40.74);39}total ← 0.0
pass 2 of 230// Name + prices (at least one price makes sense)31static void printReceipt(String customerBob, double... prices) { //?receipt32 System.out.println("Receipt for: " + customerBob);33 double total→ 0.0 = 0;34 for (int i = 0; i < prices.length; i++) {outputReceipt for: BobSystem.out.printf(" Total: $%.2f%n", total);
11 printReceipt("Alice", 10.99, 24.50, 5.25);12 printReceipt("Bob", 99.99);13 14 System.out.println("\n=== Team Roster ==="); //?roster15 printTeam("Engineering", "Alice", "Bob", "Charlie");16 printTeam("Marketing", "Diana", "Eve");17 printTeam("Executive"); // No members18}1920// Level (required) + message (required) + details (varargs)21static void log(String level, String message, String... details) { //?logmethod22 System.out.print("[" + level + "] " + message);23 if (details.length > 0) {24 System.out.print(" | ");25 System.out.print(String.join(", ", details));26 }27 System.out.println();28}2930// Name + prices (at least one price makes sense)31static void printReceipt(String customer, double... prices) { //?receipt32 System.out.println("Receipt for: " + customer);33 double total = 0;34 for (int i = 0; i < prices.length; i++) {35 System.out.printf(" Item %d: $%.2f%n", i + 1, prices[i]);36 total += prices[i];37 }38 System.out.printf(" Total: $%.2f%n", total99.99);39}output === Team Roster ===static void printTeam(String teamName, String... members)
pass 1 of 341static void printTeam(String teamNameEngineering, String... members) { //?team42 System.out.print("Team " + teamNameEngineering + ": ");43 if (members.length == 0) {outputTeam Engineering:All 3 passes — pass 1 is the card above pass teamNamemembers.length1 Engineering — 2 Marketing — 3 Executive 0 else
pass 1 of 214 System.out.println("\n=== Team Roster ==="); //?roster15 printTeam("Engineering", "Alice", "Bob", "Charlie");16 printTeam("Marketing", "Diana", "Eve");17 printTeam("Executive"); // No members18}1920// Level (required) + message (required) + details (varargs)21static void log(String level, String message, String... details) { //?logmethod22 System.out.print("[" + level + "] " + message);23 if (details.length > 0) {24 System.out.print(" | ");25 System.out.print(String.join(", ", details));26 }27 System.out.println();28}2930// Name + prices (at least one price makes sense)31static void printReceipt(String customer, double... prices) { //?receipt32 System.out.println("Receipt for: " + customer);33 double total = 0;34 for (int i = 0; i < prices.length; i++) {35 System.out.printf(" Item %d: $%.2f%n", i + 1, prices[i]);36 total += prices[i];37 }38 System.out.printf(" Total: $%.2f%n", total);39}4041static void printTeam(String teamName, String... members) { //?team42 System.out.print("Team " + teamName + ": ");43 if (members.length == 0) {44 System.out.println("(no members)");45 } else {46 System.out.println(String.join(", ", members));47 }outputAlice, Bob, Charlieelse
pass 2 of 215 printTeam("Engineering", "Alice", "Bob", "Charlie");16 printTeam("Marketing", "Diana", "Eve");17 printTeam("Executive"); // No members18}1920// Level (required) + message (required) + details (varargs)21static void log(String level, String message, String... details) { //?logmethod22 System.out.print("[" + level + "] " + message);23 if (details.length > 0) {24 System.out.print(" | ");25 System.out.print(String.join(", ", details));26 }27 System.out.println();28}2930// Name + prices (at least one price makes sense)31static void printReceipt(String customer, double... prices) { //?receipt32 System.out.println("Receipt for: " + customer);33 double total = 0;34 for (int i = 0; i < prices.length; i++) {35 System.out.printf(" Item %d: $%.2f%n", i + 1, prices[i]);36 total += prices[i];37 }38 System.out.printf(" Total: $%.2f%n", total);39}4041static void printTeam(String teamName, String... members) { //?team42 System.out.print("Team " + teamName + ": ");43 if (members.length == 0) {44 System.out.println("(no members)");45 } else {46 System.out.println(String.join(", ", members));47 }outputDiana, Eveif (members.length == 0)
16 printTeam("Marketing", "Diana", "Eve");17 printTeam("Executive"); // No members18}1920// Level (required) + message (required) + details (varargs)21static void log(String level, String message, String... details) { //?logmethod22 System.out.print("[" + level + "] " + message);23 if (details.length > 0) {24 System.out.print(" | ");25 System.out.print(String.join(", ", details));26 }27 System.out.println();28}2930// Name + prices (at least one price makes sense)31static void printReceipt(String customer, double... prices) { //?receipt32 System.out.println("Receipt for: " + customer);33 double total = 0;34 for (int i = 0; i < prices.length; i++) {35 System.out.printf(" Item %d: $%.2f%n", i + 1, prices[i]);36 total += prices[i];37 }38 System.out.printf(" Total: $%.2f%n", total);39}4041static void printTeam(String teamName, String... members) { //?team42 System.out.print("Team " + teamName + ": ");43 if (members.length0 == 0) {44 System.out.println("(no members)");45 } else {output(no members)
Varargs must be the last parameter. Regular params come first.
Build printf-style formatting
Create a method that formats strings with variable placeholders.
public class PrintfStyle {
public static void main(String[] args) {
System.out.println("=== printf-Style Formatting ===\n");
// Java's actual printf
System.out.printf("Name: %s, Age: %d%n", "Alice", 30);
System.out.printf("Price: $%.2f%n", 29.99);
System.out.printf("%s scored %d points%n", "Bob", 150);
System.out.println("\n=== Our Simple Format ===");
// Our custom simpleFormat
String msg1 = simpleFormat("Hello, {}!", "World");
System.out.println(msg1);
String msg2 = simpleFormat("{} + {} = {}", 10, 20, 30);
System.out.println(msg2);
String msg3 = simpleFormat("User {} logged in from {}", "alice", "192.168.1.1");
System.out.println(msg3);
System.out.println("\n=== Logging with Format ===");
logf("INFO", "User {} completed task {}", "Bob", "cleanup");
logf("ERROR", "Failed after {} retries", 3);
logf("DEBUG", "Processing {} items from {}", 100, "queue-1");
}
// Custom format function like SLF4J
static String simpleFormat(String template, Object... args) {
String result = template;
for (Object arg : args) {
// Replace first {} with next argument
result = result.replaceFirst("\\{\\}", String.valueOf(arg));
}
return result;
}
// Logging with formatting
static void logf(String level, String template, Object... args) {
String message = simpleFormat(template, args);
System.out.println("[" + level + "] " + message);
}
}
public static void main(String[] args)
1public class PrintfStyle {2 public static void main(String[] args) {3 System.out.println("=== printf-Style Formatting ===\n");4 5 // Java's actual printf //?printf6 System.out.printf("Name: %s, Age: %d%n", "Alice", 30);7 System.out.printf("Price: $%.2f%n", 29.99);8 System.out.printf("%s scored %d points%n", "Bob", 150);9 10 System.out.println("\n=== Our Simple Format ==="); //?custom11 12 // Our custom simpleFormat13 String msg1 = simpleFormat("Hello, {}!", "World");14 System.out.println(msg1);output=== printf-Style Formatting === === Our Simple Format ===result ← Hello, {}!
pass 1 of 628// Custom format function like SLF4J //?simpleformat29static String simpleFormat(String templateHello, {}!, Object... args) {30 String result→ Hello, {}! = template;31 for (Object arg : args) {All 6 passes — pass 1 is the card above pass templateresult1 Hello, {}! Hello, {}! 2 {} + {} = {} {} + {} = {} 3 User {} logged in from {} User {} logged in from {} 4 User {} completed task {} User {} completed task {} 5 Failed after {} retries Failed after {} retries 6 Processing {} items from {} Processing {} items from {} result ← Hello, World!
pass 1 of 1130String result = template;31for (Object argWorld : args) {32 // Replace first {} with next argument33 result→ Hello, World! = result.replaceFirst("\\{\\}", String.valueOf(argWorld));34}All 11 passes — pass 1 is the card above pass argresult1 World Hello, World! 2 10 10 + {} = {} 3 20 10 + 20 = {} 4 30 10 + 20 = 30 5 alice User alice logged in from {} 6 192.168.1.1 User alice logged in from 192.168.1.1 7 Bob User Bob completed task {} 8 cleanup User Bob completed task cleanup 9 3 Failed after 3 retries 10 100 Processing 100 items from {} 11 queue-1 Processing 100 items from queue-1 return result;
34 }35 return resultHello, World!;36}msg1 ← Hello, World!
12// Our custom simpleFormat13String msg1→ Hello, World! = simpleFormat("Hello, {}!", "World");14System.out.println(msg1Hello, World!);1516String msg2 = simpleFormat("{} + {} = {}", 10, 20, 30);17System.out.println(msg2);outputHello, World!return result;
34 }35 return result10 + 20 = 30;36}msg2 ← 10 + 20 = 30
16String msg2→ 10 + 20 = 30 = simpleFormat("{} + {} = {}", 10, 20, 30);17System.out.println(msg210 + 20 = 30);1819String msg3 = simpleFormat("User {} logged in from {}", "alice", "192.168.1.1");20System.out.println(msg3);output10 + 20 = 30return result;
34 }35 return resultUser alice logged in from 192.168.1.1;36}msg3 ← User alice logged in from 192.168.1.1
19String msg3→ User alice logged in from 192.168.1.1 = simpleFormat("User {} logged in from {}", "alice", "192.168.1.1");20System.out.println(msg3User alice logged in from 192.168.1.1);2122System.out.println("\n=== Logging with Format ==="); //?logging23logf("INFO", "User {} completed task {}", "Bob", "cleanup");24logf("ERROR", "Failed after {} retries", 3);outputUser alice logged in from 192.168.1.1 === Logging with Format ===static void logf(String level, String template, Object... args)
pass 1 of 338// Logging with formatting //?logformat39static void logf(String levelINFO, String templateUser {} completed task {}, Object... args) {40 String message = simpleFormat(templateUser {} completed task {}, args);41 System.out.println("[" + level + "] " + message);All 3 passes — pass 1 is the card above pass leveltemplate1 INFO User {} completed task {} 2 ERROR Failed after {} retries 3 DEBUG Processing {} items from {} return result;
34 }35 return resultUser Bob completed task cleanup;36}message ← User Bob completed task cleanup
22 System.out.println("\n=== Logging with Format ==="); //?logging23 logf("INFO", "User {} completed task {}", "Bob", "cleanup");24 logf("ERROR", "Failed after {} retries", 3);25 logf("DEBUG", "Processing {} items from {}", 100, "queue-1");26}2728// Custom format function like SLF4J //?simpleformat29static String simpleFormat(String template, Object... args) {30 String result = template;31 for (Object arg : args) {32 // Replace first {} with next argument33 result = result.replaceFirst("\\{\\}", String.valueOf(arg));34 }35 return result;36}3738// Logging with formatting //?logformat39static void logf(String level, String template, Object... args) {40 String message→ User Bob completed task cleanup = simpleFormat(templateUser {} completed task {}, args);41 System.out.println("[" + levelINFO + "] " + messageUser Bob completed task cleanup);42}output[INFO] User Bob completed task cleanupreturn result;
34 }35 return resultFailed after 3 retries;36}message ← Failed after 3 retries
23 logf("INFO", "User {} completed task {}", "Bob", "cleanup");24 logf("ERROR", "Failed after {} retries", 3);25 logf("DEBUG", "Processing {} items from {}", 100, "queue-1");26}2728// Custom format function like SLF4J //?simpleformat29static String simpleFormat(String template, Object... args) {30 String result = template;31 for (Object arg : args) {32 // Replace first {} with next argument33 result = result.replaceFirst("\\{\\}", String.valueOf(arg));34 }35 return result;36}3738// Logging with formatting //?logformat39static void logf(String level, String template, Object... args) {40 String message→ Failed after 3 retries = simpleFormat(templateFailed after {} retries, args);41 System.out.println("[" + levelERROR + "] " + messageFailed after 3 retries);42}output[ERROR] Failed after 3 retriesreturn result;
34 }35 return resultProcessing 100 items from queue-1;36}message ← Processing 100 items from queue-1
24 logf("ERROR", "Failed after {} retries", 3);25 logf("DEBUG", "Processing {} items from {}", 100, "queue-1");26}2728// Custom format function like SLF4J //?simpleformat29static String simpleFormat(String template, Object... args) {30 String result = template;31 for (Object arg : args) {32 // Replace first {} with next argument33 result = result.replaceFirst("\\{\\}", String.valueOf(arg));34 }35 return result;36}3738// Logging with formatting //?logformat39static void logf(String level, String template, Object... args) {40 String message→ Processing 100 items from queue-1 = simpleFormat(templateProcessing {} items from {}, args);41 System.out.println("[" + levelDEBUG + "] " + messageProcessing 100 items from queue-1);42}output[DEBUG] Processing 100 items from queue-1
String.format() and printf() use varargs for their flexible APIs.
Pass an array to varargs
Arrays can be passed directly to varargs methods.
import java.util.Arrays;
public class ArrayVsVarargs {
public static void main(String[] args) {
System.out.println("=== Arrays and Varargs ===\n");
// Call with individual arguments (normal varargs)
printItems("apple", "banana", "cherry");
// Call with existing array
String[] fruits = {"orange", "grape", "mango"};
printItems(fruits); // Array passed directly!
System.out.println("\n=== Creating Arrays ===");
// Traditional array creation
int[] arr1 = new int[]{1, 2, 3};
// Using varargs-based method
int[] arr2 = createArray(4, 5, 6);
System.out.println("arr1: " + Arrays.toString(arr1));
System.out.println("arr2: " + Arrays.toString(arr2));
System.out.println("\n=== Arrays.asList (varargs) ===");
var list = Arrays.asList("x", "y", "z");
System.out.println("List: " + list);
// Also works with array
String[] letters = {"a", "b", "c"};
var list2 = Arrays.asList(letters);
System.out.println("List from array: " + list2);
}
static void printItems(String... items) {
System.out.println("Received " + items.length + " items:");
for (String item : items) {
System.out.println(" - " + item);
}
}
// Return array from varargs
static int[] createArray(int... values) {
return values; // values IS the array!
}
}
public static void main(String[] args)
3public class ArrayVsVarargs {4 public static void main(String[] args) {5 System.out.println("=== Arrays and Varargs ===\n");6 7 // Call with individual arguments (normal varargs) //?individual8 printItems("apple", "banana", "cherry");output=== Arrays and Varargs ===static void printItems(String... items)
pass 1 of 235static void printItems(String... items) { //?method36 System.out.println("Received " + items.length3 + " items:");37 for (String item : items) {outputReceived 3 items:for (String item : items)
pass 1 of 636System.out.println("Received " + items.length + " items:");37for (String itemapple : items) {38 System.out.println(" - " + itemapple);39}output - appleAll 6 passes — pass 1 is the card above pass itemitems.length1 apple — 2 banana — 3 cherry 3 4 orange — 5 grape — 6 mango — static void printItems(String... items)
pass 2 of 235static void printItems(String... items) { //?method36 System.out.println("Received " + items.length3 + " items:");37 for (String item : items) {outputReceived 3 items:static int[] createArray(int... values)
42// Return array from varargs43static int[] createArray(int... values) { //?return44 return values; // values IS the array!45}list ← [x, y, z], list2 ← [a, b, c]
19 // Using varargs-based method20 int[] arr2 = createArray(4, 5, 6); //?helper21 22 System.out.println("arr1: " + Arrays.toString(arr1));23 System.out.println("arr2: " + Arrays.toString(arr2));24 25 System.out.println("\n=== Arrays.asList (varargs) ==="); //?aslist26 var list→ [x, y, z] = Arrays.asList("x", "y", "z");27 System.out.println("List: " + list[x, y, z]);28 29 // Also works with array30 String[] letters = {"a", "b", "c"};31 var list2→ [a, b, c] = Arrays.asList(letters);32 System.out.println("List from array: " + list2[a, b, c]);33}outputarr1: [1, 2, 3] arr2: [4, 5, 6] === Arrays.asList (varargs) === List: [x, y, z] List from array: [a, b, c]
Varargs and arrays are interchangeable at the call site.
Exercise: VarargsOverload.java
Explore overloading ambiguity with varargs