21

Re: прогрма"Успішність учнів" -- автоматизація на Java

Програма, в якій захардкоджено конкретні дані про конкретних учнів — поганий стиль. Так, розумію, з консольним вводом даних у джаві працювати вкрай незручно (навіть точно не скажу, як це цивілізовано слід робити). Як варіант, їх можна передавати через args — це звичайний масив рядків, для отримання числових даних з нього можна зробити щось у стилі:
[code=java]
int[] otsinky=new int[12];
for(int i=0; i<12; i++)
    otsinky[i]=Integer.valueOf(args[i]);[/code]
Самі ж оцінки задавати при виклику джава-програми, вказавши їх у командномурядку після імені класу:

java Result_of_knowledge 0 5 2 1 3 7 2 0 2 1 0 0

22

Re: прогрма"Успішність учнів" -- автоматизація на Java

P.Y. написав:

Програма, в якій захардкоджено конкретні дані про конкретних учнів — поганий стиль. Так, розумію, з консольним вводом даних у джаві працювати вкрай незручно (навіть точно не скажу, як це цивілізовано слід робити). Як варіант, їх можна передавати через args — це звичайний масив рядків, для отримання числових даних з нього можна зробити щось у стилі:
[code=java]
int[] otsinky=new int[12];
for(int i=0; i<12; i++)
    otsinky[i]=Integer.valueOf(args[i]);[/code]
Самі ж оцінки задавати при виклику джава-програми, вказавши їх у командномурядку після імені класу:

java Result_of_knowledge 0 5 2 1 3 7 2 0 2 1 0 0

пропонуєте через командний рядок робити?

23

Re: прогрма"Успішність учнів" -- автоматизація на Java

У Джаві передати дані через командний рядок простіше, ніж через System.in (який сам по собі забезпечує лише низькорівневий побайтний ввід) — то що ж краще обрати для простої прикладної програми?

24

Re: прогрма"Успішність учнів" -- автоматизація на Java

В Java існують сканери (Scanner) для System.in.

Подякували: P.Y.1

25

Re: прогрма"Успішність учнів" -- автоматизація на Java

думка була через графічний інтерфейс вводити, але того я ще не вивчила) все поступово)

26

Re: прогрма"Успішність учнів" -- автоматизація на Java

Кажуть,що називати змінні через трансліт,тобто "pochatkovyy"  поганий тон

27 Востаннє редагувалося P.Y. (11.03.2015 11:22:17)

Re: прогрма"Успішність учнів" -- автоматизація на Java

koala написав:

В Java існують сканери (Scanner) для System.in.

Тоді можна так:

import java.util.Scanner;

...

Scanner scanner=new Scanner(System.in);
int[] otsinky=new int[12];
for(int i=0; i<12; i++)
    otsinky[i]=scanner.nextInt();

Правда, там іще треба з ексепшенами розбиратися.

28

Re: прогрма"Успішність учнів" -- автоматизація на Java

VTrim написав:

Кажуть,що називати змінні через трансліт,тобто "pochatkovyy"  поганий тон

Хоча джава-компілятор дозволяє їм давати навіть кириличні назви (за умови, звичайно, що програміст нічого не наплутав з кодуваннями — а це трапляється постійно).

Ну а так, хороший тон — English only. З іншого боку, перечитуючи свій старий код, мені часом складно зрозуміти свої англомовні коментарі (що ж зробиш, Київ — не англомовне місто, тому з активним володінням англійською поки що не склалось).

29

Re: прогрма"Успішність учнів" -- автоматизація на Java

Tinca написав:
Regen написав:

sum_dostatnij і т.п. не потрібно присвоювати 0 при ініціалізації, це відбувається дефолтно

дивно, в мене воно вибиває як помилку і просить присвоїти

Оскільки локальні змінні не мають значення по замовчуванню.

30

Re: прогрма"Успішність учнів" -- автоматизація на Java

P.Y. написав:
koala написав:

В Java існують сканери (Scanner) для System.in.

Тоді можна так:

import java.util.Scanner;

...

Scanner scanner=new Scanner(System.in);
int[] otsinky=new int[12];
for(int i=0; i<12; i++)
    otsinky[i]=scanner.nextInt();

Правда, там іще треба з ексепшенами розбиратися.

і перевірка на  hasNextInt()

31

Re: прогрма"Успішність учнів" -- автоматизація на Java

fed_lviv написав:
Tinca написав:
Regen написав:

sum_dostatnij і т.п. не потрібно присвоювати 0 при ініціалізації, це відбувається дефолтно

дивно, в мене воно вибиває як помилку і просить присвоїти

Оскільки локальні змінні не мають значення по замовчуванню.

от тут в мене був фейл, хіба глобальні

32

Re: прогрма"Успішність учнів" -- автоматизація на Java

Дякую всім за рекомендації!

33

Re: прогрма"Успішність учнів" -- автоматизація на Java

Tinca написав:

Дякую всім за рекомендації!

не так швидко, хд)
старайся не використовувати конкатенцію стрічок, її в тебе забагато в Sysout
наприклад вираз Sysout(a+b), де a і b стрічки компілятор імплементить як

StringBuilder sb = new StringBuilder();
sb.append(a);
sb.append(b);
return sb.toString();

тобто кожного разу створюється новий непотрібний об'єкт, який зразу ж стає першим конкурентом для gc
тому юзай ось такий код замість попереднього:

System.out.print(a);
System.out.println(b);
Подякували: Tinca, leofun012

34 Востаннє редагувалося Tinca (21.03.2015 14:26:35)

Re: прогрма"Успішність учнів" -- автоматизація на Java

Трохи допрацювала:

Прихований текст
import javax.swing.*;
class ResultOfKnowledge 
{
 public static void main(String[] args) 
 {
     System.out.println("Введіть кількість учнів які вчаться на оцінки 12,11,10,9,8,7,6,5,4,3,2,1,0");
     int[] mark = new int [13]; 
     mark[0]=0;
     for (int i=1; i<13; i++)
    {
         mark[i] = Integer.parseInt(JOptionPane.showInputDialog("Введіть кількість учнів,які вчаться на "+i));
    }
     System.out.println("Успішність учнів у %:");
    /* кількість учнів які вчаться 
     на оцінки 12,11,10,9,8,7,6,5,4,3,2,1*/
     int sumExpert = 0;// рахуємо суму масиву високого рівня
     for ( int  i=10; i<=12;i++)
     {
         sumExpert +=mark[i]; 
     }     
     int sumAdvanced=0; // рахуємо суму масиву достатнього рівня
     for ( int  i=7; i<=9;i++)
     {
         sumAdvanced += mark[i]; 
     }  
     int sumBasic=0; // рахуємо суму масиву середнього рівня
     for ( int  i=4; i<=6;i++)
     {
         sumBasic += mark[i]; 
     }
     int sumEntry = 0;// рахуємо суму масиву початкового рівня
     for ( int  i=1; i<=3;i++)
     {
         sumEntry += mark[i]; 
     }
     int generalSuma=sumExpert+sumAdvanced+sumBasic+sumEntry; 
     // рахуємо загальну кількість відсотків на всіх рівнях
     int rate=100;
     if (generalSuma!=0)
     {
         int rExpert=sumExpert*100/generalSuma;
         int rAdvanced=sumAdvanced*rate/generalSuma;
         int rBasic=sumBasic*rate/generalSuma;
         int rEntry=sumEntry*rate/generalSuma;
         int sumaRate=rExpert+rAdvanced+rBasic+rEntry;
         if (sumaRate==rate)
         {
             showResult(rExpert,rAdvanced,rBasic,rEntry);
             System.out.println("Готово");
         }
         else 
         {
             System.out.println("не 100");
             int rDifference=rate-sumaRate;
             rAdvanced+=rDifference;
             showResult(rExpert,rAdvanced,rBasic,rEntry);
             System.out.print("Різниця: ");
             System.out.print(rDifference);
             System.out.println("% додана до достатнього рівня");
         }
     }
     else 
     {
         System.out.println("На нуль ділити не можна!");
     }
     
 }
 public static void showResult( int rExpert, int rAdvanced,int rBasic,int rEntry)
 {
     System.out.print("Високий рівень ");
     System.out.print(rExpert);
     System.out.println("%");
     System.out.print("Достатній рівень ");
     System.out.print(rAdvanced);
     System.out.println("%");
     System.out.print("Середній рівень ");
     System.out.print(rBasic);
     System.out.println("%");
     System.out.print("Низький рівень ");
     System.out.print(rEntry);
     System.out.println("%"); 
 }
} 

Треба опрацювати ще виключення (якщо хтось натисне Cancel, чи закриє формою діалогове вікно), ну і більше з графічним попрацювати))) Слухаю, Ваші, поради та зауваження.

35

Re: прогрма"Успішність учнів" -- автоматизація на Java

Tinca написав:

Слухаю, Ваші, поради та зауваження.

Ви гарна дівчина.

Подякували: Tinca1

36

Re: прогрма"Успішність учнів" -- автоматизація на Java

int rExpert=sumExpert*100/generalSuma;
int rAdvanced=sumAdvanced*rate/generalSuma;

Формули відрізняються, хоча не повинні. Взагалі зробіть rate константою.

 int sumaRate=rExpert+rAdvanced+rBasic+rEntry;
if (sumaRate==rate)

Ви губитемете проценти в загальному випадку. Додавати їх "від фонаря" до достатнього рівня неправильно. Подумайте про використання відповідних типів для ділення.

Подякували: Tinca1

37

Re: прогрма"Успішність учнів" -- автоматизація на Java

Chemist-i написав:
Tinca написав:

Слухаю, Ваші, поради та зауваження.

Ви гарна дівчина.

Весна прийшла, бачу.

Подякували: Chemist-i1

38

Re: прогрма"Успішність учнів" -- автоматизація на Java

Мушу зауважити, що пан Chemist-i всім жінкам на цьому хворумі таке каже, сподівається що десь, та клюне.

Подякували: leofun011

39

Re: прогрма"Успішність учнів" -- автоматизація на Java

quez написав:
int rExpert=sumExpert*100/generalSuma;
int rAdvanced=sumAdvanced*rate/generalSuma;

Формули відрізняються, хоча не повинні. Взагалі зробіть rate константою.

 int sumaRate=rExpert+rAdvanced+rBasic+rEntry;
if (sumaRate==rate)

Ви губитемете проценти в загальному випадку. Додавати їх "від фонаря" до достатнього рівня неправильно. Подумайте про використання відповідних типів для ділення.

Формули не відрізняються, механічну помилку допустила, та можна зробити її як константу. А з тим процентом історія цікава, спершу я ділила з остачею і пробувала заокруглювати і теж губила, тому лишила так, поки не можу нічого придумати.

40

Re: прогрма"Успішність учнів" -- автоматизація на Java

0xDADA11C7 написав:

Мушу зауважити, що пан Chemist-i всім жінкам на цьому хворумі таке каже, сподівається що десь, та клюне.

та тут дівчат/жінок не багато