Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 03.11.2015
Сообщений: 19

Работа со статическими переменными

23.10.2016, 18:27. Показов 1510. Ответов 7
Метки java (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Ругается на статические переменные. Я думаю я неправильно написал массив, который принадлежит к другому классу.
Первый класс -
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import java.util.Scanner;
 
 
public class fifo {
 
    static int N;
    static int S;
    static int Z;
    static int A;
    static int sWait;
    static int sDoing;
 
 
    public static void main(String[] args){
 
        Scanner in = new Scanner(System.in);
 
        System.out.println("Введите кол-во процессов");
        N=in.nextInt();
        process[] m1 = new  process[N];
 
        S = 0;
 
        System.out.println("Введите время вхождения и время выполнения");
        for (int i = 0; i < N; i ++){
            m1[i].start =in.nextInt();
            m1[i].doing =in.nextInt();
        }
 
        for (int i = 0; i < N; i++){
            m1[i].wait = m1[i].doing;
            S += m1[i].doing + 5;
        }
 
 
        char[][] m3 = new char[N][S];
 
        for (int j = 0; j < S; j++){
            for (int i = 0; i < N; i++){
                m3[i][j] = 'O';
                if (j == m1[i].start){
                    m1[i].status = 'i';
                };
            }
 
            Z = first(m1,N);
            if (m1[Z].status == 'd') {
                m3[Z][j] = 'B';
                m1[Z].wait--;
            }
            else if (m1[Z].status == 'i'){
                if (check (m1, N)) {
                    m1[Z].status = 'd';
                    m3[Z][j] = 'B';
                    m1[Z].wait--;
                }
            }
 
 
            for (int i = 0; i < N; i++){
                if (m1[i].status == 'o'){
                    m3[i][j] = ' ';
                }
                if (m1[i].wait == 0){
                    m1[i].status = 'o';
                }
            }
        }
        for (int i = N - 1; i>= 0; i--){
            System.out.println('P' + i+1 + ':');
            for (int j = 0; j < S; j++) {
                System.out.println(m3[i][j] + ' ');
                if (j >= 10) {
                    System.out.println(' ');
                }
                if (m3[i][j] == 'B'){
                    sDoing++;
                }
                if (m3[i][j] == '0')
                {
                    sWait++;
                }
            }
            System.out.println();
        }
 
        System.out.println("SC:");
        for (int j = 0; j < S; j++){
            System.out.println(j+' ');
        }
        System.out.println("Среднее время выполнения - " + sDoing/N);
        System.out.println("Среднее время ожидания - " + sWait/N);
    }
 
 
    public static int first(process m2[], int size) {
        int f = 0;
        while (m2[f].status == 'o') {
            f++;
        }
        for (int i = 0; i < size; i++) {
            if ((m2[i].status == 'w') || (m2[i].status == 'd')) {
                if (m2[i].start < m2[f].start) {
                    f = i;
                }
            }
        }
        return f;
    }
 
    public static boolean check(process m2[], int size){
        boolean kek = false;
        for (int i = 0; i < size;i++) {
            if (m2[i].status !='d') {
                kek = true;
            }
        }
        return kek;
    }
}
Второй класс -
Java
1
2
3
4
5
6
7
public class process {
 
    static int start = 0;
    static int doing = 0;
    static int wait = 0;
    static char status ='o';
}
Фото с номерами строк. del

 Комментарий модератора 
Прикрепляйте изображения к посту
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2016, 18:27
Ответы с готовыми решениями:

Помогите разобраться со статическими переменными в Java
Hi, java programmer! Я пытаюсь создать и показать окно. Текст программы такой: import javax.swing.*; public class JFrameDemo { ...

Работа с переменными конструктора. Объясните
Для примера: public class AplleBag { public AplleBag(int apllesCount){} } Есть такой шаблон, по нему создаю объекты в...

Работа со статическими и локальными переменными в классе
такая проблема: пишу программу под MFC. Работа заключается в принятии посылке строки в COM-порт, затем принимает ответ и разбирает принятую...

7
1 / 1 / 0
Регистрация: 03.11.2015
Сообщений: 19
23.10.2016, 18:47  [ТС]
Вот ошибка и номера строк.
Миниатюры
Работа со статическими переменными  
0
1 / 1 / 0
Регистрация: 03.11.2015
Сообщений: 19
23.10.2016, 19:03  [ТС]
Вот проблема.
Миниатюры
Работа со статическими переменными  
0
20 / 23 / 24
Регистрация: 20.10.2016
Сообщений: 45
23.10.2016, 19:17
Какой вообще смысл этого цикла ? Если все статусы будут равны 'o', то происходит выход за пределы массива.
Java
1
2
3
  while (m2[f].status == 'o') {
            f++;
        }
0
 Аватар для GreeNicee
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
23.10.2016, 19:19
Лучший ответ Сообщение было отмечено dadaddaa как решение

Решение

Почитайте, что такое static... (Вы вместо того, чтобы создавать для каждого процесса новый экземпляр типа Process, работали с 1 экземпляром
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class process {
 
    public int start;
    public int doing;
    public int wait;
    public char status;
 
    public process(int start, int doing, int wait, char status) {
        this.start = start;
        this.doing = doing;
        this.wait = wait;
        this.status = status;
    }
 
    public process() {
        this.start = 0;
        this.doing = 0;
        this.wait = 0;
        this.status = 'o';
    }
}
 
public static void main(String[] args){
 
        Scanner in = new Scanner(System.in);
 
        System.out.println("Введите кол-во процессов");
        N =in.nextInt();
        process[] m1 = new  process[N];
        for (int i = 0; i < m1.length; i++) {
            m1[i] = new process();
        }
...
 
 
 
 
public static int first(process m2[], int size) {
        int f = 0;
        while (m2[f].status == 'o') {
            ++f;
            if (m2.length <= f)
                break;
        }
        for (int i = 0; i < size; i++) {
            if ((m2[i].status == 'w') || (m2[i].status == 'd')) {
                if (m2[i].start < m2[f].start) {
                    f = i;
                }
            }
        }
        return f;
    }
Остальное сами исправляйте
П.с. Классы с большой буквы принято писать в Java.
П.с. п.с.
Java
1
2
3
4
//Вместо
public static int first(process m2[], int size){}
//Лучше
public static int first(process[] m2, int size){}
П.с. п.с. п.с. Вы же в курсе, что у вас все это в одном потоке запускается да?)
1
1 / 1 / 0
Регистрация: 03.11.2015
Сообщений: 19
23.10.2016, 19:39  [ТС]
т.е. вся проблема в static?

Добавлено через 6 минут
Тот выход за пределы массива устранил. Ошибка пока осталось. Я переписывал код с C++. Может поможет, тут всё работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include <iostream>
using namespace std;
class process {
public:
    int arrival;  // время вхождения
    int burst;    // время выполнения
    int resttime; // время ожидания 
    char status; 
    process() {
        arrival = 0;    
        burst = 0;                                                                     
        resttime = 0;  
        status = 'o';  // статус
        /*
        * statusIN вхождение i (ожидание)
        * statusDO выполнение d (выполнение)
        * statusOUT выход o (пустота)
        * rr[] - mas proc
        * Rr[] - mas proc v func
        * size - razmer massiva
        * a
        * Q - index proc
        *
        */
    }
 
};
 
int firstcome(process Rr[], int size) {   // КТО ПЕРВЫЙ ВОШЁЛ
    int a = 0;
    while ((Rr[a].status == 'o')) // Пока пустоста
    {
        a++; // увеличиваем а
    }
    for (int i = 0; i < size; i++) { // через весь массив
        if ((Rr[i].status == 'i') || (Rr[i].status == 'd')) { // если статус вхождение или статус ожидание
            if (Rr[i].arrival < Rr[a].arrival) { // если время вхождение i-го процесса меньше последнего  
                a = i; // вместо процесса а делаем процесс i
            }
        }
    }
    return a; // возвращаем a
}
bool check(process Rr[], int size) {       // проверка на занятость
    bool result;
    for (int i = 0; i < size; i++) { // по всему массиву
        if (Rr[i].status != 'd') { // если статус не выполнения
            return true; // вовзвращаем тру
        }
    }
}
 
int main() {
 
    setlocale(0, "");
 
    int N, M, Q, A, atat, awt;//N строки (процессы), М столбцы (секунды)
    cout << "Введите количество процессов" << endl;
    cin >> N;
    process *rr = new process[N];
    M = 0;
 
    cout << "Введите данные процессов в виде (время вхождения,время выполнения)" << endl;
    for (int i = 0; i < N; i++) {
        cin >> rr[i].arrival >> rr[i].burst;
    }
    for (int i = 0; i < N; i++) {
        rr[i].resttime = rr[i].burst; // Время ожидания = время выполнения
        M += rr[i].burst + N;
 
    }
 
    char **ss = new char *[N];
    for (int i = 0; i < N; i++) {
        ss[i] = new char[M]; // в каждый i-ый элементы массива присваиваем массив (столбец) размерности M
    }
    for (int j = 0; j < M; j++) { 
        for (int i = 0; i < N; i++) {
            ss[i][j] = 'О';  // забиваем ожиданием
            if (j == rr[i].arrival) { // если секунда i-го процесса = времени вхождения
                rr[i].status = 'i'; // у i-го процесса статус вхождения (ожидания)
            };
        }
        
        Q = firstcome(rr, N);  // Q = номер процесса, который первый вошёл
        if (rr[Q].status == 'd') { // если Q процесс выполняется
            ss[Q][j] = 'B'; // у Q процесса j секунда пишется "выполняется"
 
            rr[Q].resttime--; // уменьшаем времы ожидания Q процесса 
        }
        else if (rr[Q].status == 'i') { // иначе если у Q процесса статус вхождения (ожидания)
            if (check) { // если никакой процесс не выполняется тогда
                rr[Q].status = 'd'; // статус Q становится выполнением
                ss[Q][j] = 'B'; // пишется выполнение
                rr[Q].resttime--; // уменьшается ввремя ожидания
            }
        }
 
        for (int i = 0; i < N; i++) { // от 0 до последнего номера процесса
            if (rr[i].status == 'o') // если статус i процесса вышел (не выполняется и не ожидает)
            {
            /*  if (j >= 10) {
                    ss[i][j] = ' ';
                    j++;
                    ss[i][j] = ' ';
                }
                else { */
                    ss[i][j] = ' '; // забиваем пробелом
                //}
            }
            if (rr[i].resttime == 0) { // если время ожидание = 0
                rr[i].status = 'o'; // статус i процесса = вышел
            }
 
 
        }
    }
    for (int i = N - 1; i >= 0; i--) {  
        cout << "P" << i + 1 << ':';
        for (int j = 0; j < M; j++) {
 
            cout << ss[i][j] << ' ';
            if (j >= 10) {
                cout << ' ';
            }
 
 
            if (ss[i][j] == 'B')
            {
 
                atat += 1;
            }
            else
            {
                if (ss[i][j] == '0')
                {
                    awt += 1;
                }
 
 
        }
        cout << endl;
    }cout << "SС:";
    for (int j = 0; j <M; j++) {
            cout << j << ' ';
    }
 
    cout << "\n Среднее время ожидания: " << awt / N;
    cout << "\n Среднее время выполнения: " << atat / N;
 
 
    system("pause");
    cout << endl;
 
    return 0;
 
 
}
0
 Аватар для GreeNicee
185 / 155 / 88
Регистрация: 04.10.2014
Сообщений: 397
23.10.2016, 19:41
Я же привел вам несколько фрагментов кода с исправлениями)у вас там полно ошибок еще, но основная проблема была в static да, простой пример
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//Если статик
private class Apple{
static int count = 0;
 
    public static void main(String[] args) {
        Apple apple1 = new Apple();
        apple1.count = 3;
        Apple apple2 = new Apple();
        apple2.count = 4;
        System.out.print("apple1" + apple1.count + "apple2" + apple2.count);//Оба раза выведет 4
    }
}
 
//Если НЕ статик
private class Apple{
int count = 0;
 
    public static void main(String[] args) {
        Apple apple1 = new Apple();
        apple1.count = 3;
        Apple apple2 = new Apple();
        apple2.count = 4;
        System.out.print("apple1 " + apple1.count + " apple2 " + apple2.count);//Выведет apple1 3 apple2 4
    }
}
1
1 / 1 / 0
Регистрация: 03.11.2015
Сообщений: 19
23.10.2016, 19:47  [ТС]
Спасибо за ответы. Не заметил исправления, извиняюсь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.10.2016, 19:47
Помогаю со студенческими работами здесь

Проблема со статическими переменными в рекурсии
Собственно, преподаватель требует, чтобы была одна входная переменная А и точность (10^-6) Функцию написал, но при другом А, счетчик...

> как правильно работать со статическими переменными
пишу сайт простой магазин, пишу класс шаблонизатора. каждый раз когда запрашивается любая страница из моего сайта, создается новый класс,...

Работа со статическими файлами
Если работаю со стаьическими файлами ] тактическими файлами из папки публик, значит ли это , что при использование пути в виде...

работа с переменными
начал работать в Eclipse.Нужно сохранить выбранный пункт ListView в переменную nom для работы с case в другом классе.Не подскажите, как это...

Работа с переменными
Доброе время суток. Есть Texbox (в который пользователь пишит название папки которую нужно открыть) потом нажимает на Button. После...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru