Debug Program Java.

Seorang dosen membuat 5 soal dan diberikan kepada N mahasiswa. Untuk setiap nomor, maksimum nilai yang dapat dicapai oleh masing-masing mahasiswa adalah 100, dan minimum nilai adalah 0. Buatlah sebuah program dengan spesifikasi input dan output sebagai berikut:Input: Baris pertama input adalah sebuah bilangan bulat N yang menyatakan jumlah mahasiswa.N baris berikutnya masing-masing berisi 5 bilangan bulat yang merupakan nilai untuk setiap nomor (setiap baris berisi input nilai nomor 1 – 5 dari mahasiswa ke 1)Output:Nomor soal dimana paling banyak mahasiswa yang mendapat nilai 100. Jika tidak ada yang mendapat nilai 100, keluarkan hasil 0, dan jika ada lebih dari satu soal dengan jumlah nilai 100 yang sama, keluarkan nomor soal yang lebih kecil.

Contoh (bagian atas sebelum garis: input, bagian bawah setelah garis: output)

 siswanya 5 orang, 
 100 100 80 20 100
 100 80 80 80 80
 100 100 100 100 100
 60 50 40 80 100
 60 80 100 50 100
 _________________________________
 Outputnya harus 5

Source code nya :
package ayoboga.com;

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int[] counter = new int[5];
        System.out.print("Masukan jumlah siswa : ");
        int nilai, n = sc.nextInt();
        for(int i = 0; i < 5; i++){
            for(int j = 0; j < n; j++) {
                System.out.print("Masukan nilai siswa ke-" + (j + 1) + " : ");
                nilai = sc.nextInt();
                if(nilai == 100) {
                    counter[j]++;
                }
            }
        }

        System.out.println(max(counter));
    }


    public static int max(int[] counter){
        int max = 0;
        for(int i = 0; i < 5; i++){
            if(counter[i] < counter[max]) {
                max = i;
            }
        }
        return max;
    }

}


avatar randynetworks

@randynetworks

23 Kontribusi 5 Poin


Jawaban Terpilih

Hai,  

Saya tidak membahas cara entry (input) nya ya. Anggap aja data sdh terkumpul, dlm wujud array 2D -> `siswa_id_nilai`.  

Di kasus ini, saya adakan array 1D -> `cntNilai100_i`, isinya counter utk mengingat soal ke-n ada berapa yg dpt nilai 100. Lalu dari array inilah kita cari mana yg tertinggi counternya, tp yg counternya > 0, dan jika ada catat nomor indexnya.  

Pencatat nomor index, awalnya saya set -1, utk berjaga-jaga sekiranya hasil perolehan dosen ternyata tdk ada satu siswa pun yg bernilai 100.  

import java.util.*;

class SK1609756640 {

	public static void main(String[] args){
		// Scanner sc = new Scanner(System.in);
		// int[] counter = new int[5];
		// System.out.print("Masukan jumlah siswa : ");
		// int nilai, n = sc.nextInt();
		// for(int i = 0; i < 5; i++){
		// 	for(int j = 0; j < n; j++) {
		// 		System.out.print("Masukan nilai siswa ke-" + (j + 1) + " : ");
		// 		nilai = sc.nextInt();
		// 		if(nilai == 100) {
		// 			counter[j]++;
		// 		}
		// 	}
		// }

		// System.out.println(max(counter));
		
		{
			// test-1.
			// sesuai contoh soal.
			int[][] siswa_id_nilai = {
				{100, 100,  80,  20, 100},
				{100,  80,  80,  80,  80},
				{100, 100, 100, 100, 100},
				{ 60,  50,  80,  80, 100},
				{ 60,  80,  50,  50, 100},
			};
			
			System.out.println(
				"Nilai 100 terbanyak ada di soal no. " +
				nmrSoalDgnNilai100Terbanyak(siswa_id_nilai) + "\n"
			);
		}
		
		{	
			// test-2.
			// misal jika ada yg kembar, yaitu soal no 1 & 5, 
			// sama2 ada 3 siswa yg bernilai 100.
			int[][] siswa_id_nilai = {
				{100, 100,  80,  20,  20},
				{100,  80,  80,  80,  80},
				{100, 100, 100, 100, 100},
				{ 60,  50,  80,  80, 100},
				{ 60,  80,  50,  50, 100},
			};
			
			System.out.println(
				"Nilai 100 terbanyak ada di soal no. " +
				nmrSoalDgnNilai100Terbanyak(siswa_id_nilai) + "\n"
			);
		}

		{ 
			// test-3.
			// misal jika semua nilai < 100.
			int[][] siswa_id_nilai = {
				{ 90,  90,  80,  20,  20},
				{ 90,  80,  80,  80,  80},
				{ 90,  90,  90,  90,  90},
				{ 60,  50,  80,  80,  90},
				{ 60,  80,  50,  50,  90},
			};
			
			System.out.println(
				"Nilai 100 terbanyak ada di soal no. " +
				nmrSoalDgnNilai100Terbanyak(siswa_id_nilai) + "\n"
			);
		}
		
	}


	static int nmrSoalDgnNilai100Terbanyak(int[][] siswa_id_nilai) {
		// siswa_id_nilai = tidak boleh array kosong!
		int qtySoal = siswa_id_nilai[0].length;
		
		int[] cntNilai100_i = new int[qtySoal]; // tabel counter utk yg nilainya 100 (fyi: init = 0).
		int cntNilai100Hi = 0; // nilai tertinggi dari tabel (array) di atas.
		int idxCntNilai100Hi = -1; // idx-array dari nilai tertinggi di atas.
		
		for (int[] siswaId_nilai : siswa_id_nilai) {
			for (int idxSoal = 0; idxSoal < qtySoal; idxSoal++) {
				if (siswaId_nilai[idxSoal] == 100) {
					cntNilai100_i[idxSoal]++;
					if (cntNilai100_i[idxSoal] > cntNilai100Hi) {
						cntNilai100Hi = cntNilai100_i[idxSoal];
						idxCntNilai100Hi = idxSoal;
					}
				}
			}
		}
		// berikut utk pemeriksaan aja.
		System.out.println(
			"Counter nilai 100 dlm soal: " + Arrays.toString(cntNilai100_i));
		
		return ++idxCntNilai100Hi;
	}

}

avatar jnrbdjnt

@jnrbdjnt

2 Kontribusi 3 Poin

Jawaban

Hai,  

Saya tidak membahas cara entry (input) nya ya. Anggap aja data sdh terkumpul, dlm wujud array 2D -> `siswa_id_nilai`.  

Di kasus ini, saya adakan array 1D -> `cntNilai100_i`, isinya counter utk mengingat soal ke-n ada berapa yg dpt nilai 100. Lalu dari array inilah kita cari mana yg tertinggi counternya, tp yg counternya > 0, dan jika ada catat nomor indexnya.  

Pencatat nomor index, awalnya saya set -1, utk berjaga-jaga sekiranya hasil perolehan dosen ternyata tdk ada satu siswa pun yg bernilai 100.  

import java.util.*;

class SK1609756640 {

	public static void main(String[] args){
		// Scanner sc = new Scanner(System.in);
		// int[] counter = new int[5];
		// System.out.print("Masukan jumlah siswa : ");
		// int nilai, n = sc.nextInt();
		// for(int i = 0; i < 5; i++){
		// 	for(int j = 0; j < n; j++) {
		// 		System.out.print("Masukan nilai siswa ke-" + (j + 1) + " : ");
		// 		nilai = sc.nextInt();
		// 		if(nilai == 100) {
		// 			counter[j]++;
		// 		}
		// 	}
		// }

		// System.out.println(max(counter));
		
		{
			// test-1.
			// sesuai contoh soal.
			int[][] siswa_id_nilai = {
				{100, 100,  80,  20, 100},
				{100,  80,  80,  80,  80},
				{100, 100, 100, 100, 100},
				{ 60,  50,  80,  80, 100},
				{ 60,  80,  50,  50, 100},
			};
			
			System.out.println(
				"Nilai 100 terbanyak ada di soal no. " +
				nmrSoalDgnNilai100Terbanyak(siswa_id_nilai) + "\n"
			);
		}
		
		{	
			// test-2.
			// misal jika ada yg kembar, yaitu soal no 1 & 5, 
			// sama2 ada 3 siswa yg bernilai 100.
			int[][] siswa_id_nilai = {
				{100, 100,  80,  20,  20},
				{100,  80,  80,  80,  80},
				{100, 100, 100, 100, 100},
				{ 60,  50,  80,  80, 100},
				{ 60,  80,  50,  50, 100},
			};
			
			System.out.println(
				"Nilai 100 terbanyak ada di soal no. " +
				nmrSoalDgnNilai100Terbanyak(siswa_id_nilai) + "\n"
			);
		}

		{ 
			// test-3.
			// misal jika semua nilai < 100.
			int[][] siswa_id_nilai = {
				{ 90,  90,  80,  20,  20},
				{ 90,  80,  80,  80,  80},
				{ 90,  90,  90,  90,  90},
				{ 60,  50,  80,  80,  90},
				{ 60,  80,  50,  50,  90},
			};
			
			System.out.println(
				"Nilai 100 terbanyak ada di soal no. " +
				nmrSoalDgnNilai100Terbanyak(siswa_id_nilai) + "\n"
			);
		}
		
	}


	static int nmrSoalDgnNilai100Terbanyak(int[][] siswa_id_nilai) {
		// siswa_id_nilai = tidak boleh array kosong!
		int qtySoal = siswa_id_nilai[0].length;
		
		int[] cntNilai100_i = new int[qtySoal]; // tabel counter utk yg nilainya 100 (fyi: init = 0).
		int cntNilai100Hi = 0; // nilai tertinggi dari tabel (array) di atas.
		int idxCntNilai100Hi = -1; // idx-array dari nilai tertinggi di atas.
		
		for (int[] siswaId_nilai : siswa_id_nilai) {
			for (int idxSoal = 0; idxSoal < qtySoal; idxSoal++) {
				if (siswaId_nilai[idxSoal] == 100) {
					cntNilai100_i[idxSoal]++;
					if (cntNilai100_i[idxSoal] > cntNilai100Hi) {
						cntNilai100Hi = cntNilai100_i[idxSoal];
						idxCntNilai100Hi = idxSoal;
					}
				}
			}
		}
		// berikut utk pemeriksaan aja.
		System.out.println(
			"Counter nilai 100 dlm soal: " + Arrays.toString(cntNilai100_i));
		
		return ++idxCntNilai100Hi;
	}

}

avatar jnrbdjnt

@jnrbdjnt

2 Kontribusi 3 Poin


Dengan bantuan @jnrbdjnt, input pake user bisa kek gini :D

public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    System.out.print("Masukan jumlah siswa : ");
    int siswa = sc.nextInt();
    System.out.print("Masukan jumlah Soal : ");
    int  soal = sc.nextInt();


    int[][] counter = new int[siswa][soal];

    for(int i=0; i<siswa;i++)
    {
        for(int j=0; j<soal;j++)
        {
            System.out.print("Masukan nilai siswa ke-" + (j + 1) + " : ");
            counter[i][j]=sc.nextInt();
        }
    }

    System.out.println(max(counter));
}
avatar randynetworks

@randynetworks

23 Kontribusi 5 Poin


Login untuk gabung berdiskusi