• Что делает цикл for в данной функции bash?

    @abcd0x00
    Что делает цикл for в данной функции bash?

    Он просто берёт из num каждый символ в обратном порядке.

    digit=${num:$t:1} #????

    [guest@localhost ~]$ s=abcd
    [guest@localhost ~]$ echo "${s:0:3} ${s:0:2} ${s:2:1}"
    abc ab c
    [guest@localhost ~]$
    Ответ написан
    1 комментарий
  • Какую модель для записи XML файла в Java использовать?

    compilator
    @compilator
    Senior Data Engineer
    А зачем вообще xml использовать ?
    Пишите в файл по маске и все.

    Ответы на ваш вопрос могут поменяться, если расскажете как потом эти логи вы планируете использовать :)
    Ответ написан
    1 комментарий
  • Какую модель для записи XML файла в Java использовать?

    OLDRihard
    @OLDRihard
    Java Developer
    А в чом проблема?
    Берем и делаем нечто такое:
    <log>
    <message nik="" data="">Я твой код парсер шатал!</message>
    </log>

    И далее по мере обновления, добавляем к log новый дочерний message.
    Первая ссылка гугла уже дает полную информацию об этом.
    Ответ написан
    1 комментарий
  • Как правильно использовать лямбда выражения в Java?

    Vestail
    @Vestail
    Software Engineer
    Просто синтаксис не поймете?
    public static void main(String[] args) {
            Solution2 myApp = new Solution2();
            double[] numbers = new double[10];
            RandomDouble sum = (arr) -> {  double forSum = arr[0]; return forSum; };
            RandomDouble min = (arr) -> { double forMin = arr[0]; return forMin; };
            RandomDouble max = (arr) -> {  double forMax = arr[0]; return forMax; };
            System.out.println("Sum: " + myApp.operateBinary(numbers, sum));
            System.out.println("Min: " + myApp.operateBinary(numbers, min));
            System.out.println("Max: " + myApp.operateBinary(numbers, max));
        }
    }

    Или не поймете алгоритм как найти сумму?:)
    Ответ написан
    3 комментария
  • Как реализовать симуляцию JAVA используя многопоточность?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    По заявкам телезрителей :)
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.Random;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.TimeUnit;
    
    
    public class Simulation {
    
    	private static final Random globalRandom = new Random(System.currentTimeMillis());
    	
    	public synchronized int getRandomIntInRangeEnclosed(int min, int max){
    		return globalRandom.nextInt((max - min + 1) + min);
    	}
    	
    	private final static int CUSTOMER_NUMBER = 3000;
    	private final static int DESK_NUMBER = 6;
    
    	public final int ITEM_DURATION_S_MIN = 3;
    	public final int ITEM_DURATION_S_MAX = 8;
    
    	public final CustomerFactory customerFactory = new CustomerFactory(this, CUSTOMER_NUMBER);
    
    	public final ArrayList<DeskReport> results = new ArrayList<DeskReport>(DESK_NUMBER);
    	
    	public void perform(){
    		ExecutorService executor = Executors.newFixedThreadPool(DESK_NUMBER);
    		for (int i = 1; i <= DESK_NUMBER; i++) {
    			executor.submit(new Desk(this, i));
    		}
    
    		executor.shutdown();
            try {
                executor.awaitTermination(20, TimeUnit.SECONDS);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
    	}
    	
    	public void printResult(){
    		int maxTimeS = 0;
    		int maxItems = 0;
    		int maxCustomers = 0;
    		
    		int minItems = Integer.MAX_VALUE;
    		int minCustomers = Integer.MAX_VALUE;
    		
    		for(DeskReport r : results){
    			if(r.getSpentTime() > maxTimeS){
    				maxTimeS = r.getSpentTime();
    			}
    			
    			if(r.getSoldItemCount() > maxItems){
    				maxItems = r.getSoldItemCount();
    			}
    			if(r.getSoldItemCount() < minItems){
    				minItems = r.getSoldItemCount();
    			}
    			
    			
    			if(r.getServedCustomerCount() > maxCustomers){
    				maxCustomers = r.getServedCustomerCount();
    			}
    			if(r.getServedCustomerCount() < minCustomers){
    				minCustomers = r.getServedCustomerCount();
    			}
    			
    		}
    		
    		Date date = new Date(maxTimeS * 1000L);
    		DateFormat formatter = new SimpleDateFormat("HH:mm:ss");
    		String dateFormatted = formatter.format(date);
    		
    		
    		System.out.println("---------------- RESULTS ----------------");
    		System.out.println(DESK_NUMBER + " desks served " + CUSTOMER_NUMBER + " customers in " + dateFormatted);
    		System.out.println("Troughput min ~ max:");
    		System.out.println(minItems + "\t~\t" + maxItems + " \titems/desk");
    		System.out.println(minCustomers + "\t~\t" + maxCustomers + "\tcustomers/desk");
    	}
    	
    	public static void main(String[] args) {
    		Simulation sim = new Simulation();
    		sim.perform();
    		sim.printResult();
    	}
    }
    public class CustomerFactory {
    
    	private Simulation simulation;
    	private int capacity = 0;
    	
    	public CustomerFactory(Simulation simulation, int capacity){
    		this.simulation = simulation;
    		this.capacity = capacity;
    	}
    
    	public synchronized Customer getInstanceWithRandomCapacity(){
    		if(capacity-- > 1){
    			return new Customer(this.simulation.getRandomIntInRangeEnclosed(1,20));
    		} else {
    			return null;
    		}
    	}
    	
    }
    
    public class Desk implements Runnable{
    	private Simulation s = null;
    	private int deskNo = 0;
    
    	private int servedCustomerCount = 0;
    	private int soldItemCount = 0;
    	private int spentTime = 0;
    	
    	public Desk(Simulation s, int deskNo) {
    		this.s = s;
    		this.deskNo = deskNo;
    	}
    	
    	public void run() {
    		System.out.println("Desk " + deskNo + " opening...");
    
    		Customer c = null;
    		while ((c = s.customerFactory.getInstanceWithRandomCapacity()) != null) {
    			servedCustomerCount++;
    			for(int i=c.getItemCount(); i>1; i--){
    				soldItemCount++;
    				spentTime += s.getRandomIntInRangeEnclosed(s.ITEM_DURATION_S_MIN, s.ITEM_DURATION_S_MAX);
    			}
    			//get short break after each customer ;)
    			sleep(Long.valueOf(s.getRandomIntInRangeEnclosed(s.ITEM_DURATION_S_MIN, s.ITEM_DURATION_S_MAX)));
    		}
    		
    		s.results.add(new DeskReport(deskNo, servedCustomerCount, soldItemCount, spentTime));
    		System.out.println("Desk " + deskNo + "\tclosing.\tcustomers " + servedCustomerCount + "\titems " + soldItemCount + "\ttime(s) " + spentTime);
    	}
    	
    	private void sleep(long ms){
    		try {
    			Thread.sleep(ms);
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    	}
    }
    
    public class DeskReport {
    	private int deskNo = 0;
    	private int servedCustomerCount = 0;
    	private int soldItemCount = 0;
    	private int spentTime = 0;
    	
    	public DeskReport(int deskNo, int servedCustomerCount, int soldItemCount, int spentTime){
    		this.deskNo = deskNo;
    		this.servedCustomerCount = servedCustomerCount;
    		this.soldItemCount = soldItemCount;
    		this.spentTime = spentTime;
    	}
    	
    	public int getDeskNo() {
    		return deskNo;
    	}
    
    	public int getServedCustomerCount() {
    		return servedCustomerCount;
    	}
    
    	public int getSoldItemCount() {
    		return soldItemCount;
    	}
    
    	public int getSpentTime() {
    		return spentTime;
    	}
    	
    }
    
    public class Customer{
    	private int itemCount = 0;
    	
    	public Customer(int itemCount){
    		this.itemCount = itemCount;
    	}
    	
    	public int getItemCount(){
    		return this.itemCount;
    	}
    }

    Симуляция примитивнейшая, демонстрирует скорее работу планировщика потоков, нежели магазина. Но если ее развить: смоделировать неравномерное "поступление" покупателей в магазин, очередь к кассам, случайный выбор кассы покупателем и т.д., можно узнать много интересного о работе магазинов. А пока, чтоб не было совсем уж бессмысленно, считается хоть какая-то примитивная статистика.
    Ответ написан
    Комментировать
  • Как реализовать данный пример?

    Afganec
    @Afganec
    Аццкий кодер...
    Привет. А в чем сейчас ошибка? Не совсем понимаю, какого ответа вы ждете :)
    Ответ написан
    9 комментариев
  • Почему полиморфизм так работает?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Объяснить суть полиморфизма "на пальцах" довольно просто. Представьте себе класс Телефон. Его спроектировал некто в далеких 80-х, и определил в нем метод набратьНомер(). А потом другой программист в 90-х отнаследовал от него класс МобильныйТелефон и перекрыл метод набратьНомер(), т.к. грубо говоря, в новом устройстве набор производится уже не импульсно, а тонально. А потом третий программист отнаследовал от него класс Смартфон. При этом он не стал трогать метод набратьНомер(), а просто добавил методы для нового функционала, типа определитьПоложениеПоGPS() и т.д.

    Теперь представьте себе пользователя. Он родом из 80-х и понятия не имеет о тональном наборе и GPS... но если ему в руки дать любое из этих устройств, он сможет набрать номер и сделать звонок. Почему? Потому, что он умеет использовать метод набратьНомер(), и большего ему знать не нужно.

    А теперь представьте другого пользователя, нашего современника. Он вырос в эпоху смартфонов... но если ему в руки дать старый телефонный аппарат, он тоже сможет сделать звонок, т.к., опять же, знает метод набратьНомер().

    Применительно к ООП, пользователь - это переменная, содержащая ссылку на экземпляр класса. Ее тип (как она была объявлена) - это "набор знаний" о возможностях этого экземпляра. И т.к. Смартфон в своей основе является Телефон-ом, мы вполне можем дать его в руки гипотетическому пользователю из 80-х:
    Телефон устройство = new Смартфон();
    в результате чего он сможет сделать звонок:
    устройство.набратьНомер("03");
    А вот определить свое местоположение он не сможет, пока не узнает о существовании соотв. метода:
    Смартфон усовершенствованноеУстройство = (Смартфон)устройство;

    Это называется приведением типа. В данном примере у экземпляра класса уже был соотв. метод, но чтоб им воспользоваться, нужно сначала явно указать, что мы хотим рассматривать имеющееся у нас в руках устройство не как "простой" Телефон, а как Смартфон.

    P.S. Кстати, в этом примере мы затронули не только полиморфизм, но и наследование, и инкапсуляцию (пользователя "снаружи" совершенно не интересует, как именно производится набор номера - тонально, импульсно или еще как-то иначе)... так сказать, все три кита ООП в одном флаконе. И только так вообще имеет смысл рассматривать эти принципы, т.к. они по сути неотделимы друг от друга, как Отец, Сын и Святой Дух в Христианстве или же длина, ширина и высота в трехмерном пространстве :) Если это понять, ООП становится совершенно простой и естественной парадигмой программирования.
    Ответ написан
    8 комментариев
  • Как протестировать protected void ф-цию java с помощью JUnit?

    Ewintory
    @Ewintory
    Java / Android developer
    Не понтяно, что именно вы спрашиваете?
    • Зачем тестировать? Это вам решать. Такой простой метод можно и не тестировать.
    • Как тестируется protected метод? Решается путем помещения тестирующего класса в тот же пакет.
      stackoverflow.com/questions/440786/junit-java-test...
    Ответ написан
    1 комментарий
  • Не работает нужным образом цикл for - почему?

    @Anhedonia
    { 6, 11, 7, 15, 9, 4, 1, 14, 10, 5, 13, 3, 8, 0, 2, 12 };
    Посмотрите внимательно на массив.
    6 > 4 , 1 , 5, 3, 0, 2 - Посчитаете сами?

    P.S. 0 - лишний
    P.S.S Убрал 0 и получил ответ 5 9 5 11 6 3 0 7 4 2 4 1 1 0 0
    Ответ написан
    1 комментарий
  • Не работает нужным образом цикл for - почему?

    создайте массив для каждого числа int[] inversions, а потом в цикле inversions[i]++;
    Ответ написан
    2 комментария
  • Как перевести двумерный массив в одномерный JAVA?

    fornit1917
    @fornit1917
    псевдокод
    for (i=0; i<4; i++) {
      for(j=0; j<4; j++) {
        arr[i*4+j] = matr[i][j]
      }
    }
    Ответ написан
    1 комментарий