Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [JAVA] Разобрать чужой код


Автор: stichik 28.1.2007, 03:13
Есть такая программка
Код

import java.util.List;
import java.util.ArrayList;
import java.util.Random;
import java.util.Collections;

public class TestArray {
    public static void main(String[] args) {
        
        if (args.length == 0) {
            args = new String[2];
            args[0] = "10";
            args[1] = "100";
        }
        
        int itemsCount = Integer.parseInt(args[0]);
        int maxRandomValue = Integer.parseInt(args[1]); 
   
        List myList = new ArrayList();
        Random myRandom = new Random();
        
        for (int i=0; i<itemsCount; i++) {
            myList.add(myRandom.nextInt(maxRandomValue));
        }
        
        System.out.println("Filled:   " + myList);
        
        Collections.sort(myList);
        System.out.println("Sorted:   " + myList);
        
        Collections.shuffle(myList);
        System.out.println("Shuffled: " + myList);
    }
    
}

Помогите, пожалуйста, разобраться вот в этом:
Код

if (args.length == 0) {
            args = new String[2];
            args[0] = "10";
            args[1] = "100";
        }
        
        int itemsCount = Integer.parseInt(args[0]);
        int maxRandomValue = Integer.parseInt(args[1]); 

 и в этом 
Код

myList.add(myRandom.nextInt(maxRandomValue));

 smile 

Автор: ShurikA 28.1.2007, 03:25
А в чём точно вопрос?
Тут даже названия функций говорят сами за себя...

Автор: Alexandr87 28.1.2007, 05:50
Цитата(stichik @ 28.1.2007,  06:13)

Помогите, пожалуйста, разобраться вот в этом:
Код

if (args.length == 0) {
            args = new String[2];
            args[0] = "10";
            args[1] = "100";
        }
        
        int itemsCount = Integer.parseInt(args[0]);
        int maxRandomValue = Integer.parseInt(args[1]); 

 и в этом 
Код

myList.add(myRandom.nextInt(maxRandomValue));

 smile

1. Программа работает с переданными ей во время запуска параметрами, если таких параметров нет (args.length==0),  то программа сама создает подобные параметры "по-умолчанию" 10 и 100.

2. Добавляет в List случайное число, меньшее maxRandomValue, которое как раз таки берется из второго параметра.

Автор: stichik 28.1.2007, 16:46
Цитата

А в чём точно вопрос?
Тут даже названия функций говорят сами за себя... 

Вопрос в том, о чем говорят и что значат эти функции
Если можно, для особо одаренных, построчно smile

Добавлено @ 16:49 
Цитата

1. Программа работает с переданными ей во время запуска параметрами, если таких параметров нет (args.length==0),  то программа сама создает подобные параметры "по-умолчанию" 10 и 100.

это вот это:
Код

f (args.length == 0) {
            args = new String[2];
            args[0] = "10";
            args[1] = "100";
        }
 так??
а это??::
Код

int itemsCount = Integer.parseInt(args[0]);
        int maxRandomValue = Integer.parseInt(args[1]);

 smile 

Автор: ShurikA 28.1.2007, 17:48
Цитата(stichik @  28.1.2007,  15:46 Найти цитируемый пост)
так??

Да


Цитата(stichik @  28.1.2007,  15:46 Найти цитируемый пост)
а это??::
код Java
1:
2:

int itemsCount = Integer.parseInt(args[0]);
        int maxRandomValue = Integer.parseInt(args[1]);


Параметры передаются в апликацию в качестве стринга, а тут нужны интеджеры.
Вот именно этим и занимается функция Integer.parseInt; переводит String в Integer.

Автор: stichik 28.1.2007, 18:22
Спасибо, вроде поняла! smile 
а вот тут не разъясните:
Код

myRandom.nextBytes(bytes);
        
        for (int i=0; i<itemsCount; i++) {
            myArray[i] = new Byte(bytes[i]);
        }
        
        
        int rangeCount = 0;
        String arrayString = new String("Array: [");
        
        for (int i=0; i<itemsCount; i++) {
            if (i != 0) arrayString += ", ";
            arrayString += myArray[i];
            
            if (myArray[i] >= maxValue || myArray[i] <= minValue)
                rangeCount++;

 smile 
это от сюда:
Код

import java.util.Random;

public class TesByte {
    
    public static void main(String[] args) {
        
        if (args.length == 0) {
            args = new String[3];
            args[0] = "30";
            args[1] = "-100";
            args[2] = "100";
        }
        
        int itemsCount = Integer.parseInt(args[0]);
        int minValue = Integer.parseInt(args[1]);
        int maxValue = Integer.parseInt(args[2]);
        
        byte[] bytes = new byte[itemsCount];
        Byte[] myArray = new Byte[itemsCount];
        Random myRandom = new Random();
        
        myRandom.nextBytes(bytes);
        
        for (int i=0; i<itemsCount; i++) {
            myArray[i] = new Byte(bytes[i]);
        }
        
        
        int rangeCount = 0;
        String arrayString = new String("Array: [");
        
        for (int i=0; i<itemsCount; i++) {
            if (i != 0) arrayString += ", ";
            arrayString += myArray[i];
            
            if (myArray[i] >= maxValue || myArray[i] <= minValue)
                rangeCount++;
        }
        
        arrayString += "]";
        System.out.println(arrayString);
        System.out.println("Not in range (" + minValue + ", " + maxValue + "): " + rangeCount);
    }
}

Автор: powerOn 28.1.2007, 20:16
Очевидно что генерируется itemsCount случайных чисел и помещаются в массив bytes. 
Цитата(stichik @  28.1.2007,  18:22 Найти цитируемый пост)
myRandom.nextBytes(bytes);


Потом эти числа перегоняются в другой массив:

Цитата(stichik @  28.1.2007,  18:22 Найти цитируемый пост)
 for (int i=0; i<itemsCount; i++) {
            myArray[i] = new Byte(bytes[i]);
        }


далее, в цикле формируется строка, которая содержит с генерированные ранее числа разделённые запятой:

Цитата(stichik @  28.1.2007,  18:22 Найти цитируемый пост)
for (int i=0; i<itemsCount; i++) {
            if (i != 0) arrayString += ", ";
            arrayString += myArray[i];

а так же подсчитывается какое количество из этих чисел не принадлежит диапазону [minValue, maxValue] 

Цитата(stichik @  28.1.2007,  18:22 Найти цитируемый пост)
if (myArray[i] >= maxValue || myArray[i] <= minValue)
                rangeCount++;


Автор: stichik 28.1.2007, 21:52
Спасибо!!! smile  поняла теперь!!! smile 

Автор: sergejzr 28.1.2007, 21:56
Внимание! Эта тема не соответствует правилам форума

Заголовок темы не отражает её суть, или несколько вопросов в одной теме.

Ознакомьтесь с правилами! http://forum.vingrad.ruhttp://forum.vingrad.ru/act-SR/f-27.html[ММ]

Тема перенесена в Центр Помощи

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)