Pertama-tama, saya membuat kelas BackEnd yang akan bertanggung jawab atas semua pekerjaan program. Ini memiliki bidang:
private int length; //
private int[] mas; //
private int[] inputArray; //,
Idenya adalah sebagai berikut: komputer menghasilkan sejumlah mas dengan panjang, pengguna memasukkan nomor inputArray dan melihat berapa banyak sapi jantan dan sapi yang dikandungnya, dan kemudian menang atau terus bermain. Pertama, kita akan menampilkan array mas untuk melihat nomor dan men-debug kodenya. maka kami akan menghapus baris ini. Mari tulis output dari array dengan panjang sembarang:
private void printMas(int[] mas) {
for (int i = 0; i < length; i++) {
System.out.print(mas[i] + " ");
}
}
Kami mengirimkan array ke metode ini, yang akan kami keluarkan melalui for loop. Ini bisa saja dilakukan melalui lapangan, tetapi karena kita akan mengeluarkan mas terlebih dahulu, dan kemudian inputArray, saya memutuskan untuk melakukan ini.
Sekarang kita perlu membuat generasi angka. Anda dapat melakukan ini dengan fungsi standar, tetapi jangan lupa bahwa kami membutuhkan angka yang berbeda. Ini berarti angka 45566 tidak akan berfungsi, tetapi 45367 sudah tepat. Mari kita tulis metode untuk menghasilkan angka seperti itu dengan verifikasi angka, tetapi pertama-tama, mari kita cari tahu berapa lama pengguna ingin menebak angka tersebut:
private void getMas() {
Scanner scanner = new Scanner(System.in);
do {
System.out.println(" 1 10");
while (!scanner.hasNextInt()) {
System.out.println(" ");
scanner.next();
}
length = scanner.nextInt();
} while (length <= 0 || length > 10);
setMas(createMas());
}
Kami membuat objek pemindai yang akan kami dapatkan nomornya dari konsol. Selanjutnya, kami menggunakan perulangan dengan do while postcondition. Saya akan menjelaskan mengapa ini nanti. Di badan loop, kita melihat loop sementara. ini digunakan untuk memverifikasi bahwa angka dimasukkan ke konsol, bukan pecahan, huruf, dll. Setelah kami memverifikasi bahwa suatu nomor dimasukkan ke dalam konsol, kami menulis nilainya dengan panjang. Dan sekarang, menggunakan do while postcondition, kita periksa apakah itu termasuk dalam interval [0,10). Jika nomor yang dimasukkan tidak termasuk dalam interval, maka kami kembali meminta Anda untuk memasukkan panjangnya. Jika nomor tersebut dimasukkan dengan benar sekaligus, maka kami menghasilkan nomor tersebut menggunakan metode createMas dan mengubah nilai bidang mas:
public void setMas(int[] mas) {
this.mas = mas;
}
private int[] createMas() {
int[] arr = new int[length];
for (int i = 0; i < this.length; i++) {
arr[i] = (int) (Math.random() * 10);
}
boolean checkMas = false;
while (!checkMas) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (i != j) {
if (arr[i] == arr[j]) {
arr[j] = (int) (Math.random() * 10);
}
}
}
}
boolean check = false;
for (int i = 0; i < arr.length && !check; i++) {
for (int j = 0; j < arr.length && !check; j++) {
if (i != j) {
if (arr[i] == arr[j]) {
check = true;
checkMas = false;
} else checkMas = true;
}
}
}
}
return arr;
}
Izinkan saya menjelaskan cara kerja createMas. Pertama, kita membuat array dengan panjang panjang dan mengisinya dengan angka acak dari interval [0,10). Math.random () menghasilkan nomor acak dari interval [0,1), dan mengalikannya dengan 10 kita mendapatkan nomor dalam interval [0,10). Kami sekarang memiliki array arr, yang terdiri dari digit acak. Langkah selanjutnya adalah memeriksa nomor yang berulang. Saya memutuskan untuk melakukan ini menggunakan variabel boolean. Pertama, kita membandingkan setiap elemen dengan masing-masing dan, jika terjadi kecocokan, ubah elemen yang kita bandingkan dengan nomor acak. Setelah kami membandingkan semua elemen, kami memeriksa array untuk keunikan digit. untuk ini, saya juga membuat variabel check. Lalu kita tinggal membandingkan tiap elemen dengan masing-masing. Jika Anda menemukan 2 elemen yang identik, maka keluar untuk perbandingan (karena! Periksa akan mengembalikan salah dan loop akan berakhir),dan kembali ke loop for untuk mengubah angka yang sama. Setelah semua angka dalam array berbeda, variabel checkMas menjadi true dan pemeriksaan array berakhir. Sekarang kita mengembalikan array arr dan membuat field mas = arr.
Kami sekarang memiliki nomor yang dibuat oleh komputer. Mari kita implementasikan menebak angka ini oleh pengguna. Untuk melakukan ini, mari tulis metode checkInput:
private void checkInput() {
Scanner scanner = new Scanner(System.in);
int[] arr = new int[length];
if (length == 1) System.out.println(" " + length + " ");
else {
if (length > 1 && length < 5) {
System.out.println(" " + length + " ");
} else {
if (length > 4 && length < 11) {
System.out.println(" " + length + " ");
}
}
}
boolean checkMas = false;
while (!checkMas) {
for (int i = 0; i < length; i++) {
do {
System.out.println(" ");
while (!scanner.hasNextInt()) {
System.out.println(" ");
scanner.next();
}
arr[i] = scanner.nextInt();
if(arr[i] < 0 || arr[i]>=10) System.out.println(" 0 9 ");
} while (arr[i] < 0 || arr[i] >= 10);
}
boolean check = checkInputArray(arr);
if (check) {
checkMas = true;
} else {
System.out.println(" ");
System.out.println(" ");
}
}
setInputArray(arr);
}
Demikian pula, kami membuat pemindai dan arr array tambahan dengan panjang panjang. Berikutnya adalah sekumpulan jika, yang bertanggung jawab tidak lebih dari mencocokkan angka dan frasa. Setelah mereka ada masukan langsung dan verifikasi nomor pengguna. Agar tidak ada ketidaksepakatan logika dengan pengguna, saya memutuskan untuk membuatnya agar pengguna memasukkan setiap nomor secara terpisah.
for (int i = 0; i < length; i++) {
do {
System.out.println(" ");
while (!scanner.hasNextInt()) {
System.out.println(" ");
scanner.next();
}
arr[i] = scanner.nextInt();
if(arr[i] < 0 || arr[i]>=10) System.out.println(" 0 9 ");
} while (arr[i] < 0 || arr[i] >= 10);
}
Di bagian kode inilah nomor tersebut dimasukkan dan diperiksa. Pekerjaannya mirip dengan memasukkan panjang array, jadi saya tidak melihat alasan untuk menjelaskannya. Kemudian array pengguna diperiksa keberadaan angka yang sama. Untuk melakukan ini, mari tulis metode checkInputArray:
private boolean checkInputArray(int[] arr) {
boolean checkMas = false;
boolean check = false;
for (int i = 0; i < arr.length && !check; i++) {
for (int j = 0; j < arr.length && !check; j++) {
if (i != j) {
if (arr[i] == arr[j]) {
check = true;
checkMas = false;
} else checkMas = true;
}
}
}
return checkMas;
}
Memeriksa mirip dengan memeriksa larik tersembunyi, jadi saya tidak akan membahasnya. Jika nomor pengguna berisi nomor duplikat, maka kami meminta Anda untuk memasukkan kembali seluruh nomor. Begitu seterusnya sampai dimasukkan dengan benar. Kemudian kami mengubah nilai bidang inputArray menjadi arr array tambahan kami. Untuk berjaga-jaga, saya akan memberikan kode:
public void setInputArray(int[] inputArray) {
this.inputArray = inputArray;
}
Pada titik ini, kita memiliki dua larik: larik tersembunyi dan larik input. Saatnya mencari tahu berapa banyak sapi jantan dan berapa banyak sapi yang ditemukan pengguna.
Kami akan mencari tahu ini menggunakan metode checkCowAndBull:
private int[] checkCowAndBull() {
int[] arr = new int[2];
int cow = 0;
int bull = 0;
for (int i = 0; i < length; i++) {
for (int j = 0; j < length; j++) {
if (mas[i] == inputArray[j]) {
if (i == j) bull++;
else cow++;
}
}
}
arr[0] = cow;
arr[1] = bull;
return arr;
}
Kami membuat array 2 elemen tambahan. Yang pertama adalah jumlah sapi, yang kedua adalah jumlah sapi jantan. Kemudian kami mengulangi kedua larik, membandingkan elemennya. Jika unsur-unsurnya sama dan indeksnya sama, maka kami menambah jumlah sapi jantan, jika tidak kami menambah jumlah sapi. Setelah itu, kami menulis nilai ke array dan mengembalikannya.
Saatnya untuk mencari tahu apa yang ada di konstruktor kelas BackEnd selama ini.
public BackEnd() {
getMas();
//printMas(mas);
boolean win = false;
while (!win) {
checkInput();
System.out.println(" :");
printMas(inputArray);
System.out.println();
int[] arr = checkCowAndBull();
if (arr[1] == length) {
win = true;
System.out.println("! !");
} else {
System.out.println(" " + arr[0] + " , " + arr[1] + " ");
System.out.println(" ");
}
}
}
Pertama, kami menghasilkan larik yang diinginkan. Saya mengeluarkannya untuk debugging, tetapi fungsi ini tidak diperlukan untuk game. Karena kita tidak tahu dari upaya apa pengguna akan menebak nomor tersebut, kita memulai perulangan while hingga saat yang tepat. Kemudian kami meminta pengguna untuk memasukkan nomornya, menampilkan array yang dimasukkan, memeriksa jumlah sapi jantan dan sapi. Jika jumlah sapi jantan bertepatan dengan panjang larik, maka jumlahnya ditebak dan permainan berakhir. Jika tidak, jumlah sapi jantan dan sapi akan ditampilkan dan permainan dilanjutkan.
Tetap hanya menambahkan pembuatan instance kelas ke man:
public class main {
public static void main(String[] args) {
BackEnd bk = new BackEnd();
}
}
Kami meluncurkan, memeriksa, bermain.
Terima kasih atas perhatiannya, bagian kedua akan segera hadir.