Урок 23.09
|
|
vladcherry | Дата: Пятница, 2011-09-23, 21:11:37 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 10
Статус: Offline
| import java.util.Scanner; public class randomaze { public static void main(String[] args) { // TODO Auto-generated method stub int attempt=0; // счетчик попыток int guess=0; // счетчик угадываний int fromKeyboard=1; while (fromKeyboard!=0) { // если ввели 0 - выходим attempt++; //увеличиваем счетчик fromKeyboard=getNumberFromKeyboard(); String strKey= Integer.toString(fromKeyboard); // получаем число с клавиатуры
// получаем случайное число генерацией и преобразовываем целое случайное в битовую строку String strRnd=Integer.toBinaryString(getRandomNumber());
if (strKey.equals(strRnd)) { //угадал guess++; System.out.println("Вы угадали !"); System.out.println("Вы угадали:"+guess+" из "+attempt+" !"); } else{ //неугадал System.out.println("Не угадали ! Я загадал-"+strRnd); System.out.println("Вы угадали:"+guess+" из "+attempt+" !"); } // считаем количество совпадений for (int s=1; s==8; s++){ System.out.println("сравниваем символ"+s);
}
} } public static int getNumberFromKeyboard() { // получение с клавиатуры потокa System.out.println("Введите число(в формате ХХХХХХХХ, выход- Enter):"); Scanner input=new Scanner(System.in); return input.nextInt(); } public static int getRandomNumber() { //получение случайного числа от 1 до 255 return (int)(Math.random()*254+1); } }
|
|
| |
CHerry | Дата: Суббота, 2011-09-24, 02:28:02 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 141
Статус: Offline
| вариант генерировать число не оптимален, хотя и интересен. Возникают числа меньше восьми знаков, а нули то впереди не дописываются. Надо переписывать на генерацию восьми char-ов.
|
|
| |
j_todesky | Дата: Понедельник, 2011-09-26, 01:34:25 | Сообщение # 3 |
Рядовой
Группа: Проверенные
Сообщений: 18
Статус: Offline
| import java.util.*; import java.io.*; public class RandomNumbers { public static char[] enterYourNumber()throws Exception { System.out.println("enter your binary number from 8 elements (for example 00101101) "); BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String numbers = bf.readLine(); System.out.println(numbers); char [] stringArray; stringArray=numbers.toCharArray(); char [] numbersChar= stringArray; return numbersChar; } public static char[] randomSetNumber(){ Random rand = new Random(); int d = rand.nextInt(); StringBuilder sb = new StringBuilder(); int x = 1; for(int i = 0; i <8; i ++) { sb.append((d & x) == 0 ? "0" : "1"); x <<= 1; } StringBuilder result = sb.reverse(); System.out.println("result = " + result); String sbToString= result.toString(); char [] stringArray; stringArray=sbToString.toCharArray(); char [] convertSetNumberToChar= stringArray; return convertSetNumberToChar; } public static void guessingNumbers(char randomSetNumber[], char enterYourNumber[]){ System.out.print("you guess "); if(randomSetNumber[0] == enterYourNumber[0]) System.out.print("1st, "); if (randomSetNumber[1]==enterYourNumber[1]) System.out.print("2nd, "); if(randomSetNumber[2]==enterYourNumber[2]) System.out.print("3rd, "); if(randomSetNumber[3]==enterYourNumber[3]) System.out.print("4th, "); if(randomSetNumber[4]==enterYourNumber[4]) System.out.print("5th, "); if(randomSetNumber[5]==enterYourNumber[5]) System.out.print("6th, "); if (randomSetNumber[6]==enterYourNumber[6]) System.out.print("7th, "); if(randomSetNumber[7]==enterYourNumber[7]) System.out.print("8th "); System.out.print(" digits"); } public static void main(String[] args)throws Exception { char [] randomSetNumber =randomSetNumber(); char []enterYourNumber= enterYourNumber(); while(enterYourNumber.length>8||enterYourNumber.length<8) { System.out.println("Error: entering digits error"); break; } guessingNumbers(randomSetNumber, enterYourNumber);
} }
собственно частично написанный код !
|
|
| |
MINIsha | Дата: Понедельник, 2011-09-26, 16:35:36 | Сообщение # 4 |
Генерал-майор
Группа: Администраторы
Сообщений: 21
Статус: Offline
| import java.io.*;
public class bynary {
public static void main (String[] args) throws IOException{ int rand = (int) (Math.random()*1010);//генерато случ. числа от 0 до 1010 char[] mass1;//массив символов для записи числа пользователя char[] mass;//массив символов для записи случайного числа генератора int count ;//счётчик совпавших цифр в числах String bin;//переменная для преобразования в строку случайного числа генератора BufferedReader bf ;// ну это и так понятно String user;//переменная для преобразования в строку числа, введённого пользователем int z ;//переменная для преобразования строки в число случайного числа генератора int w;// переменная для преобразования строки в число, введённого пользователем int countUs = 0;//счётчик попыток
//пытался сравнивать строки - не сравнивает!!! Пришлось переводить в числа.
bin = Integer.toBinaryString(rand); System.out.println("Введите "+bin.length()+ "-значное бинарное число: "); bf = new BufferedReader(new InputStreamReader(System.in));
do {
user = bf.readLine();
count=0;
mass1 = user.toCharArray(); mass = bin.toCharArray(); if (mass1.length!=mass.length) { System.out.println("Введите указанное кол-во цифр!!! "); } else{ for (int i =0;i<mass.length;i++){
if (mass1[i]==mass[i]){ count++;
} } System.out.println("Количество совпавших цифр: "+count+" "+bin);//здесь я вывожу для countUs++; //наглядности случ. число
}
w = Integer.parseInt(bin); z = Integer.parseInt(user);
if (w==z){ System.out.println("Наконец-то вы угадали!!! с "+countUs+" попытки"); } } while(w!=z); }
}
//Вопрос: кто-нибудь знает, в каком случае строки считаются равными?
Почему? ДА ЧЕРЕЗ ПОТОМУ КАК ЧТОЖ!
Сообщение отредактировал MINIsha - Понедельник, 2011-09-26, 16:37:32 |
|
| |
Dimon | Дата: Понедельник, 2011-09-26, 17:48:08 | Сообщение # 5 |
Рядовой
Группа: Проверенные
Сообщений: 11
Статус: Offline
| import java.io.*;
public class binary { public static void main(String[] args) { int a = getRandomNumber(); String str = Integer.toBinaryString(a); BufferedReader input = new BufferedReader (new InputStreamReader (System.in)); String inputLine= " "; //ввод строки с клавиатуры try { int count=0; //объявление счетчика while ((inputLine = input.readLine()) !=null) { System.out.println(inputLine); //определение длины введенного массива int cpCount = inputLine.codePointCount (0, inputLine.length()); System.out.println ("Number of input symbols: " + cpCount); int y=0, i; for (i=0; i<inputLine.length(); i++) //перебираем элементы вводимой строки { char ch1= inputLine.charAt(i); char ch= str.charAt(i); if (ch == ch1) // при совпадении символов y ++; } if (y>0 && y<8) {System.out.println ("quantity in text: " + y); System.out.println (str);} //для проверки совпадений else if (y==8) { float percent = 1/count*100; System.out.println("At last! " + "Quantity of your attempts is: " + count); System.out.println ("Percent your attempts is: " + percent + "%" ); } count ++; // счетчик попыток }
} catch (IOException e) {System.err.println ("Error:" + e);} } public static int getRandomNumber() { Double value = Math.random(); int i= (int) (value*256); return i; } }Добавлено (2011-09-26, 17:48:08) --------------------------------------------- Моя прога еще достаточно сырая...
|
|
| |
j_todesky | Дата: Среда, 2011-09-28, 00:34:05 | Сообщение # 6 |
Рядовой
Группа: Проверенные
Сообщений: 18
Статус: Offline
| Поковырялся, чуть чуть перебрал, но все же есть к чему стремиться и что дорабатывать !
import java.util.*; import java.io.*; public class RandomNumbers { public static char[] enterYourNumber()throws IOException { //ну, собственно, ввод элементов с клавиатуры System.out.println(" enter your binary number from 8 elements (for example 00101101). "); BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String numbers = bf.readLine(); // перевожу String в массив Char char [] stringArray; stringArray=numbers.toCharArray(); char [] numbersChar= stringArray; return numbersChar; } public static char[] randomSetNumber(){ // задается рандомное число с помощью Стрингбуфера // но как , я пока сам не особо разобрал )) Random rand = new Random(); int d = rand.nextInt(); StringBuilder sb = new StringBuilder(); int x = 1; for(int i = 0; i <8; i ++) { sb.append((d & x) == 0 ? "0" : "1"); x <<= 1; } StringBuilder result = sb.reverse(); // System.out.println("result = " + result); // перевод из Стрингбуфера в Стринг, а затем в Чар массив String sbToString= result.toString(); char [] stringArray; stringArray=sbToString.toCharArray(); char [] convertSetNumberToChar= stringArray; return convertSetNumberToChar; } // метод, отвечающий за сравнение public static void guessingNumbers(char randomSetNumber[], char enterYourNumber[]){ System.out.print("you guess: "); int count=0 ; // сравниваются по отдельности каждый элемент массива // если совпадает - выводит совпавшую цифру // если нет - букву Х if(randomSetNumber[0] == enterYourNumber[0]) System.out.print(enterYourNumber[0]); else { System.out.print("X"); } if (randomSetNumber[1]==enterYourNumber[1]) System.out.print(enterYourNumber[1]); else { System.out.print("X"); } if(randomSetNumber[2]==enterYourNumber[2]) System.out.print(enterYourNumber[2]); else { System.out.print("X"); } if(randomSetNumber[3]==enterYourNumber[3]) System.out.print(enterYourNumber[3]); else { System.out.print("X"); } if(randomSetNumber[4]==enterYourNumber[4]) System.out.print(enterYourNumber[4]); else { System.out.print("X"); } if(randomSetNumber[5]==enterYourNumber[5]) System.out.print(enterYourNumber[5]); else { System.out.print("X"); } if (randomSetNumber[6]==enterYourNumber[6]) System.out.print(enterYourNumber[6]); else { System.out.print("X"); } if(randomSetNumber[7]==enterYourNumber[7]) System.out.print(enterYourNumber[7]); else { System.out.print("X"); }
} public static void main(String[] args)throws IOException { System.out.println("To guess you have 3 attempts "); char [] randomSetNumber = randomSetNumber(); // char [] enterYourNumber= enterYourNumber(); int i = 0; do { char [] enterYourNumber= enterYourNumber(); if (randomSetNumber.length!=enterYourNumber.length)
{ System.out.println("Error: entering digits error"); } else if(((enterYourNumber[0]!=1)||(enterYourNumber[0]!='0')&& ((enterYourNumber[1]!=1)||(enterYourNumber[1]!='0'))&& ((enterYourNumber[2]!=1)||(enterYourNumber[2]!='0'))&& ((enterYourNumber[3]!=1)||(enterYourNumber[3]!='0'))&& ((enterYourNumber[4]!=1)||(enterYourNumber[4]!='0'))&& ((enterYourNumber[5]!=1)||(enterYourNumber[5]!='0'))&& ((enterYourNumber[6]!=1)||(enterYourNumber[6]!='0'))&& ((enterYourNumber[7]!=1)||(enterYourNumber[7]!='0')))) { System.out.println("Error, enter only '1' or '0'"); } else { if(randomSetNumber[0]==enterYourNumber[0]&&randomSetNumber[1]==enterYourNumber[1]&& randomSetNumber[2]==enterYourNumber[2]&&randomSetNumber[3]==enterYourNumber[3] &&randomSetNumber[4]==enterYourNumber[4]&&randomSetNumber[5]==enterYourNumber[5] &&randomSetNumber[6]==enterYourNumber[6]&&randomSetNumber[7]==enterYourNumber[7]) { System.out.println("You geuess all rhe number"); break; } guessingNumbers(randomSetNumber, enterYourNumber); } i++ ; } while(i!=3); } }
Сообщение отредактировал j_todesky - Среда, 2011-09-28, 00:48:31 |
|
| |
MINIsha | Дата: Среда, 2011-09-28, 16:59:22 | Сообщение # 7 |
Генерал-майор
Группа: Администраторы
Сообщений: 21
Статус: Offline
| j_todesky, Валерик!!! Всё это хорошо, но даже при вводе 0 или 1 этот код выдаёт ошибку ввода. Пишет вводите только цифры 1 и 0. По моему ошибка происходит в этом блоке: Code else if(((enterYourNumber[0]!=1)||(enterYourNumber[0]!='0')&& ((enterYourNumber[1]!=1)||(enterYourNumber[1]!='0'))&& ((enterYourNumber[2]!=1)||(enterYourNumber[2]!='0'))&& ((enterYourNumber[3]!=1)||(enterYourNumber[3]!='0'))&& ((enterYourNumber[4]!=1)||(enterYourNumber[4]!='0'))&& ((enterYourNumber[5]!=1)||(enterYourNumber[5]!='0'))&& ((enterYourNumber[6]!=1)||(enterYourNumber[6]!='0'))&& ((enterYourNumber[7]!=1)||(enterYourNumber[7]!='0')))) А именно (enterYourNumber[1]!=1)||(enterYourNumber[1]!='0') и т. д. Единица без одинарных кавычек !!! И с операторами сравнения тоже бок - нужно везде ставить &&!!!
Кстати о циклах: Code for(int i=0; i<enterYourNumber.length; i++){ (enterYourNumber[i]!='1')||(enterYourNumber[i]!='0') }
будет работать так же.
Валерий! А за это : Code StringBuilder sb = new StringBuilder(); int x = 1; for(int i = 0; i <8; i ++) { sb.append((d & x) == 0 ? "0" : "1"); x <<= 1; }
Super Respect и уважуха!!! Добавлено (2011-09-28, 16:59:22) --------------------------------------------- import java.io.*;
public class bynary { static int userControl(char[] Luser){//функция-фильтр символов введённых пользователем int f = 0; for (int j=0; j<Luser.length;j++){ if ((Luser[j]=='0') || (Luser[j]=='1')){ f++; } } return f; } public static void main (String[] args) throws IOException{ int rand = (int) (Math.random()*1010);//генерато случ. числа от 0 до 1010 char[] mass1;//массив символов для записи числа пользователя char[] mass;//массив символов для записи случайного числа генератора int count ;//счётчик совпавших цифр в числах String bin;//переменная для преобразования в строку случайного числа генератора BufferedReader bf ;// ну это и так понятно String user;//переменная для преобразования в строку числа, введённого пользователем int z =0;//переменная для преобразования строки в число случайного числа генератора int w = 0;// переменная для преобразования строки в число, введённого пользователем int countUs = 0;//счётчик попыток int f=0; //пытался сравнивать строки - не сравнивает!!! Пришлось переводить в числа. bin = Integer.toBinaryString(rand);//перевод десятичн. в двоичную строку bf = new BufferedReader(new InputStreamReader(System.in)); do { System.out.println("Введите "+bin.length()+ "-значное бинарное число: "); user = bf.readLine();//считываю с клавы данные и записываю в user f=userControl(user.toCharArray());//передаю функции массив символов из user count=0;// обнуляю счётчик попыток (неверный ввод не считается попыткой) w = Integer.parseInt(bin);//перевожу строку случ. числа в число mass1 = user.toCharArray();//массив символов пользователя mass = bin.toCharArray();//массив символов случ.числа if (f!=user.length())//если результат функции не равен длине строки, введённой пользователем. /*функция userControl устрояна таким образом что если длина user совпадает с её результатом, то проверка на ввод прошла успешно, т.е. в тексте только единицы и нули*/ System.out.println("Вводите только 1 или 0 !!!"); else if (f==user.length())//если результат функции равен длине строки, введённой пользователем. { if (mass1.length!=mass.length)/*сравниваю длины массивов для определения введения правильного количества символов 1 и 0*/ { System.out.println("Введите указанное кол-во цифр!!! "); } else { for (int i =0;i<mass.length;i++)/*цикл на совпадение цифр в массивах чисел пользователя и случайного числа*/ { if (mass1[i]==mass[i])//если символ равен - добавляю счётчик совпадений { count++; } } System.out.println("Количество совпавших цифр: "+count+" "); countUs++; //если все вышеизложенные проверки пройдены, добавляю счётчик попыток. } z = Integer.parseInt(user);/*если все вышеизложенные проверки пройдены перевожу число строку user в число*/ if (w== z)//если число userа совпало со случайным - то вывод сообщения: { System.out.println("Наконец-то вы угадали!!! с "+countUs+"-й попытки"); } } } while( w!= z);//выполнять цикл, пока пользователь не угадает число. }
} Вроде робит и без сбоев!!!
Почему? ДА ЧЕРЕЗ ПОТОМУ КАК ЧТОЖ!
Сообщение отредактировал MINIsha - Среда, 2011-09-28, 10:51:53 |
|
| |