Katie (uralpanda) wrote,
Katie
uralpanda

Category:

Java

Изучаю java по комиксовой книжке O'Reilly.
Я на пятом уроке, дело иногда замедляется, потому что любопытство меня толкает на поиски того, чего в книжке на пятом уроке не имеется.
К примеру, выяснилось, что задача генерации уникальной случайной последовательности в java решается очаровательно - есть конструкция "множество", в которой элементы уникальны, так что достаточно туда рандомно напихать элементов до нужного количества, причём дубликаты просто автоматически не будут добавлены. Например нам надо создать множество из трёх элементов с рандомными, но уникальными числами:

import java.util.*;
public class SimpleDotComTestDrive {
public static void main (String[] args) {
HashSet<Integer> myHashSet = new HashSet<Integer>();
for (int i=0; i<=1000; i++) {
myHashSet.add((int)(Math.random()*7));
if (myHashSet.size()==3) {
break;
}
}
Вообще очень легко изучается, хотя синтаксис непривычен, Сишный синтаксис я в студенческие времена не любила. Но есть ощущение, что вещь функциональная и мощная.

Upd. используя этот же паттерн с множеством подкрутила учебную программку, чтобы не учитывать попытку ввода, если число повторяется. Это игра в морской бой, и если пользователь повторяет числа, то не нужно увеличивать счётчик. Очень просто и изящно

import java.util.*;
class SimpleDotCom {
int[] locationCells;
int numOfHits=0;
boolean notsame;
HashSet<Integer> myHashSet = new HashSet<Integer>();
public void setLocationCells(int[] locs) {
locationCells=locs;
}
public String checkYourself (String stringGuess) {
int guess=Integer.parseInt(stringGuess);
String result="Мимо";
for (int cell:locationCells) {
if (guess==cell) {
result="Попал";
notsame=myHashSet.add(guess);
if (notsame==true) {
numOfHits++;
}
break;
}
}
if (numOfHits==locationCells.length) {
result="Потопил";
}
System.out.println(result);
return result;
}
}

Upd2. дочитала до того места, где авторы предлагают решение. Оказалось, что они используют неограниченный массив ArrayList, и выкидывают из него элементы, когда пользователь в них попадает. Неограниченный массив впечатлил, но моё решение лучше! Потому что оно оставляет в неизменности исходные данные (набор ячеек) :))))
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments