Arrays
Last updated
Last updated
arrays
math.random
public class Main{
public static void main(String[] args) {
int[] arr = {10, 20, 30, 40, 50, 60, 70, 80 ,90, 100};
System.out.println("array size is: " + arr.length);
System.out.print("values are: ");
for (int i = 0; i < arr.length; i++)
System.out.print(arr[i] + " ,");
}
}
array size is: 10
values are: 10 ,20 ,30 ,40 ,50 ,60 ,70 ,80 ,90 ,100 ,
these are all the same
int[] arr = {10, 20, 30, 40, 50, 60, 70, 80 ,90, 100};
int[] arr2 = new int[]{10, 20, 30, 40, 50, 60, 70, 80 ,90, 100};
int[] arr3 = new int[10];
for (int i = 1; i <= arr3.length; i++)
arr3[i-1] = i*10;
here we used arr3[i-1]
since the first index starts from 0 but are for loops starts from 1
int[] arr3 = new int[10];
we must explicitly to define the size to 10 since we can't infer the the size at the beginning
cool way to visualize
public class Main{
public static void main(String[] args) {
int[] arr = {10, 20, 30, 40, 50, 60, 70, 80 ,90, 100};
System.out.println("-".repeat(arr.length*5));
for (int i = 0; i < arr.length; i++)
System.out.print("| " + i + " ");
System.out.print(" | <- Indices\n");
System.out.println("-".repeat(arr.length*5));
for (int i = 0; i < arr.length; i++)
System.out.print("| " + arr[i] + " ");
System.out.print("| <- Values\n");
System.out.println("-".repeat(arr.length*5));
}
}
----------------------------------------------------
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | <- Indices
----------------------------------------------------
| 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 | <- Values
----------------------------------------------------
בהינתן מערך חשב את הסכום של האיבר עם הקודמים לו
ex.
original: 1 | 2 | 3 | 4 | 5 | 6
new array: 1 | 3 | 6 | 10 | 15 | 21
explanation:
public class Main{
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6};
for (int i = 1; i < arr.length; i++)
arr[i]+=arr[i-1]; // same as arr[i]= arr[i] + arr[i-1]
for (int i = 0; i < arr.length; i++)
System.out.print(" | " + arr[i]);
}
}
| 1 | 3 | 6 | 10 | 15 | 21
Read n number of values in an array and display it in reverse order:
public class Main{
public static void main(String[] args) {
int n;
while ((n = MyConsole.readInt("enter number of elements: "))<0)
System.out.println("you entered a negative number");
int[] arr = new int[n];
for (int i = 0; i < n; i++)
arr[i] = MyConsole.readInt("enter num"+ i + ": ");
System.out.print("original: ");
for (int i = 0; i < n; i++)
System.out.print(arr[i] + " ,");
System.out.print("\nreversed: ");
for (int i = n-1; i >= 0; i--)
System.out.print(arr[i] + " ,");
}
}
enter number of elements: 4
enter num0: 2
enter num1: 4
enter num2: 6
enter num3: 8
original: 2 ,4 ,6 ,8 ,
reversed: 8 ,6 ,4 ,2 ,
עכשיו תעתיקו את המערך הפוך למערך אחר
public class Main{
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6};
int[] new_arr = new int[arr.length];
for (int i = arr.length-1; i >= 0; i--) {
new_arr[arr.length - 1 - i] = arr[i];
}
for (int i = 0; i < new_arr.length; i++) {
System.out.print(new_arr[i] + " | ");
}
}
}
עכשיו במקום להכניס n מספרים הוא יגריל n מספרים
בנוסף הוא ימצא את המינ' המקסימום וגם השני הגדול ביותר
יודפס גם האיבר ממוצע
ex.
how many elements: 10
min: 100
max: 999
array:
----------------------------------------------------------------------
| 430 | 900 | 136 | 560 | 999 | 604 | 658 | 413 | 481 | 374
----------------------------------------------------------------------
max value: 999
2nd largest value: 900
min value: 136
avg value: 555
solution:
public class Main{
public static void main(String[] args) {
int n = MyConsole.readInt("how many elements: ");
int[] arr = new int[n];
int min_rand = MyConsole.readInt("min: ");
int max_rand = MyConsole.readInt("max: ");
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
int sum=0;
//fill in array with random numbers
for (int i = 0; i < n; i++)
arr[i] = (int) ((Math.random() * ((max_rand+1) - min_rand)) + min_rand);
//find max and min numbers
System.out.println("\narray:\n" + "-".repeat(n*7));
for (int i = 0; i < n; i++){
System.out.print("| " + arr[i] + " ");
sum+=arr[i];
max = Math.max(max, arr[i]); //one way to find max
if (arr[i] < min) //one way to find min
min = arr[i];
}
System.out.println("\n" + "-".repeat(n*7));
//find 2nd largest
int second_largest = Integer.MIN_VALUE;
for (int i = 0; i < n; i++) {
if (second_largest< arr[i] && arr[i]!=max)
second_largest= arr[i];
}
System.out.println("\nmax value: " + max);
System.out.println("2nd largest value: " + second_largest);
System.out.println("min value: " + min);
System.out.println("avg value: " + sum/n);
}
}
how many elements: 10
min: 100
max: 999
array:
----------------------------------------------------------------------
| 430 | 900 | 136 | 560 | 936 | 604 | 658 | 413 | 481 | 374
----------------------------------------------------------------------
max value: 936
2nd largest value: 900
min value: 136
avg value: 555
ספרו כמה פעמים שי ערכים שחוזרים על עצמם
-----------------------
| 5 | 2 | 7 | 7 | 5 | 7
-----------------------
duplicate elements: 3
Watch out not to double count duplicates
import java.util.Arrays;
public class Main{
public static void main(String[] args) {
int[] arr = {5, 2, 7, 7, 5, 7};
int cntr = 0;
boolean[] marked = new boolean[arr.length];
Arrays.fill(marked, false); // fills array with value
for (int i = 0; i < arr.length; i++)
for (int j = i+1; j < arr.length; j++)
if (arr[i] == arr[j] && marked[j] == false){
++cntr;
marked[j] = true;
}
System.out.println("duplicate elements: " + cntr);
}
}
duplicate elements: 3
Note: we could also write
!marked[j]
instead ofmarked[j] == false
import java.util.Arrays;
public class Main{
public static void main(String[] args) {
int[] arr = {5, 2, 7, 7, 5, 7};
int cntr = 0;
for (int i = 0; i < arr.length; i++)
for (int j = i+1; j < arr.length; j++)
if (arr[i] == arr[j]){
++cntr;
break;
}
System.out.println("duplicate elements: " + cntr);
}
}
duplicate elements: 3
This also works and we wont count twice (or more) since we break
before reaching the other doubles. By breaking we prevented ourselves from counting more than we should
now print the duplicate values as well
ex.
| 5 | 2 | 7 | 7 | 5 | 7
num of duplicate elements: 3
duplicates: | 5 | 7 | 7
import java.util.Arrays;
public class Main{
public static void main(String[] args) {
int[] arr = {5, 2, 7, 7, 5, 7};
int cntr = 0;
boolean[] marked = new boolean[arr.length];
int[] duplicates = new int[arr.length];
int duplicateIndex = 0;
Arrays.fill(marked, false);
Arrays.fill(duplicates, 0);
for (int i = 0; i < arr.length; i++)
System.out.print("| " + arr[i] + " ");
System.out.println("\n");
for (int i = 0; i < arr.length; i++)
for (int j = i+1; j < arr.length; j++)
if (arr[i] == arr[j] && !marked[j]){
++cntr;
marked[j] = true;
duplicates[duplicateIndex++] = arr[j];
}
System.out.println("num of duplicate elements: " + cntr);
System.out.print("duplicates: ");
for (int i = 0; i < duplicateIndex; i++)
System.out.print("| " + duplicates[i] + " ");
}
}
| 5 | 2 | 7 | 7 | 5 | 7
num of duplicate elements: 3
duplicates: | 5 | 7 | 7
https://youtu.be/xli_FI7CuzA - link to youtube explanation
public class Main{
public static void main(String[] args) {
int n = MyConsole.readInt("how many elements: ");
int[] arr = new int[n];
int min_rand = MyConsole.readInt("min: ");
int max_rand = MyConsole.readInt("max: ");
int digit_space = (int) Math.log10(max_rand) + 1 + 2;
//fill in array
for (int i = 0; i < n; i++)
arr[i] = (int) ((Math.random() * ((max_rand+1) - min_rand)) + min_rand);
//print original array
System.out.println("\noriginal\n" + "-".repeat(n*digit_space));
for (int i = 0; i < n; i++)
System.out.print("| " + arr[i] + " ");
System.out.println("\n" + "-".repeat(n*digit_space));
//interesting stuff starts here
for (int i = 0; i < arr.length; i++)
for (int j = 0; j < arr.length-i-1; j++)
if (arr[j] > arr[j+1]) {
// swap arr[j+1] and arr[j]
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
//print sorted array
System.out.println();
System.out.println("sorted\n" + "-".repeat(n*digit_space));
for (int i = 0; i < n; i++)
System.out.print("| " + arr[i] + " ");
System.out.println("\n" + "-".repeat(n*digit_space));
}
}
how many elements: 10
min: 100
max: 2000
original
------------------------------------------------------------------------
| 438 | 897 | 863 | 608 | 371 | 1581 | 1885 | 480 | 1538 | 751
------------------------------------------------------------------------
sorted
------------------------------------------------------------------------
| 371 | 438 | 480 | 608 | 751 | 863 | 897 | 1538 | 1581 | 1885
------------------------------------------------------------------------
Time Complexity of Bubble sort is: O(n^2) so it isn't often used
use:
System.out.print((i%15==0 && i!=0 ?"\n" : "") + "| " + arr[i] + " ");
for a nicer print
how many elements: 5
original
------------------------------
| 43 | 93 | 41 | 61 | 57
-----------------------------
enter new num: 100
where to add, from 0 to 5: 2
after adding num
-------------------------------------
| 43 | 93 | 100 | 41 | 61 | 57
------------------------------------
public class Main{
public static void main(String[] args) {
int n = MyConsole.readInt("how many elements: ");
int[] arr = new int[n];
int min_rand = 10;
int max_rand = 99;
//fill in array
for (int i = 0; i < n; i++)
arr[i] = (int) ((Math.random() * ((max_rand+1) - min_rand)) + min_rand);
//print original array
System.out.println("\noriginal\n----------------------------------------------------");
for (int i = 0; i < n; i++)
System.out.print("| " + arr[i] + " ");
System.out.println("\n----------------------------------------------------");
//add number
int newNum = MyConsole.readInt("enter new num: ");
int index;
while ((index= MyConsole.readInt("where to add, from 0 to "+ n+ ": ")) >n || index<0)
System.out.println("the number is not a valid index");
//interesting stuff
int[] new_arr = new int[n+1];
for (int i = 0; i < index; i++)
new_arr[i] = arr[i];
new_arr[index] = newNum;
for (int i = index+1; i < n+1; i++)
new_arr[i] = arr[i-1];
//print sorted array
System.out.println();
System.out.println("after adding num\n----------------------------------------------------");
for (int i = 0; i < n+1; i++)
System.out.print("| " + new_arr[i] + " ");
System.out.println("\n----------------------------------------------------");
}
}
public class Main{
public static void main(String[] args) {
int n = MyConsole.readInt("how many elements: ");
int[] arr = new int[n];
int min_rand = 1;
int max_rand = 4;
//fill in array with random numbers
for (int i = 0; i < n; i++)
arr[i] = (int) ((Math.random() * ((max_rand+1) - min_rand)) + min_rand);
//print array
System.out.println("array:");
System.out.println("-".repeat(n*5));
for (int i = 0; i < n; i++)
System.out.print("| " + arr[i] + " ");
System.out.println("\n" + "-".repeat(n*5));
//here we start
int num2remove = MyConsole.readInt("whom to remove: ");
int countRemaining = 0;
//count elements that we will leave
for (int i = 0; i < n ; i++)
if (arr[i]!=num2remove)
countRemaining++;
int[] arr_remaining = new int[countRemaining];
int remainingIndex = 0;
for (int i = 0; i < n; i++){
if (arr[i]!=num2remove){
arr_remaining[remainingIndex] = arr[i];
++remainingIndex;
}
}
//print array
System.out.println("array:");
System.out.println("-".repeat(countRemaining*5));
for (int i = 0; i < arr_remaining.length; i++)
System.out.print("| " + arr_remaining[i] + " ");
System.out.println("\n"+ "-".repeat(countRemaining*5));
}
}
how many elements: 10
array:
--------------------------------------------------
| 4 | 4 | 2 | 3 | 4 | 1 | 1 | 3 | 1 | 4
--------------------------------------------------
whom to remove: 4
array:
------------------------------
| 2 | 3 | 1 | 1 | 3 | 1
------------------------------
version 2
public class Main{
public static void main(String[] args) {
int n = 4;
for (int i = 0; i < n; i++)
System.out.println("*".repeat(i));
for (int i = n-1; i > 0; i--)
System.out.println("*".repeat(i));
}
}
*
**
***
***
**
*
check if an array can be splitted such that the sum of left side of the splitting is equal to the sum of the right side