Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
NRX
21 / 19 / 9
Регистрация: 22.09.2015
Сообщений: 149
Завершенные тесты: 1
1

Сравнение числа типа Integer с методом возвращающий Integer или остановка цикла for

23.02.2016, 19:58. Просмотров 434. Ответов 4

Здравствуйте, пытаюсь написать свой метод сортировки по алфавиту, и при написании куска кода который должен сравнивать два слова, когда n-ое количество букв в словах подряд совпадают

вот этот метод:
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
public void sortABC(){
    
word.clear();
inte.clear();
     
 for(int i = 0; i < name.size(); i++){
     word.add(name.get(i).substring(0, 1));
 }
 
 for(int i = 0; i < word.size(); i++){
      word.set(i, String.valueOf(ABC.valueOf(word.get(i)).ordinal()));
      inte.add(Integer.parseInt(word.get(i)));
 
 }
 
 
 for(int i = word.size()-1; i > 0; i--){
     for(int j = 0; j < i; j++){
         if(inte.get(j) == inte.get(j+1)){
             int r = 1;  
             counter = j;
 
             for( counter = j ; inte.add(Integer.parseInt(word.get(counter))) == prov(); counter++){
             
             word.add(name.get(j).substring(r, r+1));
             word.add(name.get(j+1).substring(r, r+1));
             inte.add(Integer.parseInt(word.get(counter)));
             inte.add(Integer.parseInt(word.get(counter+1)));
             
         }}
             String oid = id.get(j);
                String oname = name.get(j);
                String osurname = surname.get(j);
                String oage = age.get(j);
                String ophone = phone.get(j);
                id.set(j, id.get(j+1));
                name.set(j, name.get(j+1));
                surname.set(j, surname.get(j+1));
                age.set(j, age.get(j+1));
                phone.set(j, phone.get(j+1));
                
                id.set(j+1, oid);
                name.set(j+1, oname);
                surname.set(j+1, osurname);
                age.set(j+1, oage);
                phone.set(j+1, ophone);
         
         if(inte.get(j) > inte.get(j+1)){
            String oid1 = id.get(j);
            String oname1 = name.get(j);
            String osurname1 = surname.get(j);
            String oage1 = age.get(j);
            String ophone1 = phone.get(j);
            id.set(j, id.get(j+1));
            name.set(j, name.get(j+1));
            surname.set(j, surname.get(j+1));
            age.set(j, age.get(j+1));
            phone.set(j, phone.get(j+1));
            
            id.set(j+1, oid1);
            name.set(j+1, oname1);
            surname.set(j+1, osurname1);
            age.set(j+1, oage1);
            phone.set(j+1, ophone1);
            
         }
     }
 }
 
 }
 
 private Integer prov(){
 if(inte.size() < counter+1 ){
 return (Integer) (counter +1);
 }else{
 return (Integer) 1000;
 }
 }
смотрим на 23 строчку, компилятор ругается, что не так? Если такое не возможно, то как мне остановить цикл(который на 23 строчке) когда "counter+1" - не существует такого элемента в Аррей листе?

(P.S все переменные которые не объявлены, объявлены за пределами метода в самом классе. Смысл моего метода это получение буквы из слова, и замене ее порядковым числом и потом сравнение чисел[ алфавит написан в перечислении] вроде все)

на всякий случай весь код

Main.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
package zcode.main;
 
import java.util.Scanner;
 
import zcode.oper.OpFile;
 
public class Main {
public static void printHelp(){
 
    System.out.println("Комманды:");
    System.out.println("OpenFile <Полный путь к файлу> - введите эту команду, чтобы получить возможность открыть сторонний файл с контактами");
    System.out.println("OpF - откроет стандартный файл с контактами");
    System.out.println("Help - отобразить все возможные команды для данной программы");
    
}
    public static void main(String[] args){
        System.out.println("-----------------//Добро Пожаловать в Записную книжку"+""+"----------------------------------");
        OpFile newf = new OpFile();
        printHelp();
        Scanner in = new Scanner(System.in);
        String comm = "Started";
        newf.out();
        
        newf.sortABC();
        System.out.println("----------------------------------------------------");
        newf.out();
        /*for(int i = 0; i<1  ; ){
            System.out.print("ВВедите команду: "); 
         comm = in.next();
        
        
        switch(comm){
        case "Exit": i = 1; break;
        case "OpenFile":  
        break;
        case "Started": System.out.println("Ждем комманду"); break;
        case "SortABC": newf.sortABC(); break;
        default: System.out.println("Такой команды нет!"); break;
        }}*/
        System.out.println("Завершение работы программы");
    }
 
}
OpFile.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
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
package zcode.oper;
 
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
 
public class OpFile {
private static ArrayList<String> id = new ArrayList<>();
private static ArrayList<String> name = new ArrayList<>();
private static ArrayList<String> surname = new ArrayList<>();
private static ArrayList<String> age = new ArrayList<>();
private static ArrayList<String> phone = new ArrayList<>();
private ArrayList<String> word = new ArrayList<>();
private ArrayList<Integer> inte = new ArrayList<>();
private int counter;
 
 
 private static Scanner scn;
 public static boolean create = false;
 
 public OpFile(String file){
     
     open(file);
     read();
     create = true;
 }
 
 public OpFile(){
     open("res//database.txt");
     read();
 }
 
 
 public  void open(String pf){
     try {
        scn = new Scanner(new File(pf));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}
 
 public void read(){
     while(scn.hasNext()){
      id.add(scn.next());
      name.add(scn.next());
      surname.add(scn.next());
      age.add(scn.next());
      phone.add(scn.next());
     }
 }
 
 public void out(){
     for(int i = 0; i < id.size(); i++){
         System.out.println(id.get(i) + " " + name.get(i) + " " + surname.get(i) + " " + age.get(i) + " " + phone.get(i));
     }
 }
 
 
 
 
 
 
 
/**
 * Сортировка по алфовиту. 
 * Сначала программа, получает все первые буквы каждого имиени, потом меняет букву на порядковый номер в алфавите, сравнивает цифры и расставлет имена по порядку
 */
 public void sortABC(){
    
word.clear();
inte.clear();
     
 for(int i = 0; i < name.size(); i++){
     word.add(name.get(i).substring(0, 1));
 }
 
 for(int i = 0; i < word.size(); i++){
      word.set(i, String.valueOf(ABC.valueOf(word.get(i)).ordinal()));
      inte.add(Integer.parseInt(word.get(i)));
 
 }
 
 
 for(int i = word.size()-1; i > 0; i--){
     for(int j = 0; j < i; j++){
         if(inte.get(j) == inte.get(j+1)){
             int r = 1;  
             counter = j;
 
             for( counter = j ; inte.add(Integer.parseInt(word.get(counter))) == prov(); counter++){
             
             word.add(name.get(j).substring(r, r+1));
             word.add(name.get(j+1).substring(r, r+1));
             inte.add(Integer.parseInt(word.get(counter)));
             inte.add(Integer.parseInt(word.get(counter+1)));
             
         }}
             String oid = id.get(j);
                String oname = name.get(j);
                String osurname = surname.get(j);
                String oage = age.get(j);
                String ophone = phone.get(j);
                id.set(j, id.get(j+1));
                name.set(j, name.get(j+1));
                surname.set(j, surname.get(j+1));
                age.set(j, age.get(j+1));
                phone.set(j, phone.get(j+1));
                
                id.set(j+1, oid);
                name.set(j+1, oname);
                surname.set(j+1, osurname);
                age.set(j+1, oage);
                phone.set(j+1, ophone);
         
         if(inte.get(j) > inte.get(j+1)){
            String oid1 = id.get(j);
            String oname1 = name.get(j);
            String osurname1 = surname.get(j);
            String oage1 = age.get(j);
            String ophone1 = phone.get(j);
            id.set(j, id.get(j+1));
            name.set(j, name.get(j+1));
            surname.set(j, surname.get(j+1));
            age.set(j, age.get(j+1));
            phone.set(j, phone.get(j+1));
            
            id.set(j+1, oid1);
            name.set(j+1, oname1);
            surname.set(j+1, osurname1);
            age.set(j+1, oage1);
            phone.set(j+1, ophone1);
            
         }
     }
 }
 
 }
 
 private Integer prov(){
 if(inte.size() < counter+1 ){
 return (Integer) (counter +1);
 }else{
 return (Integer) 1000;
 }
 }
 
}
ABC.java
Java
1
2
3
4
5
package zcode.oper;
 
public enum ABC {
    А, Б, В, Г, Д, Е, Ё, Ж, З, И, Й, К, Л, М, Н, О, П, Р, С, Т, У, Ф, Х, Ц, Ч, Ш, Щ, Ъ, Ы, Ь, Э, Ю, Я, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, X, Y, Z;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2016, 19:58
Ответы с готовыми решениями:

Как отобразить два Integer в один Integer используя HashMap?
Имею ввиду, как ввести два ключа, по которым получается третий ключ такого же...

Сравнение Integer
Почему данный код выводит false true: public class A{ public static void...

Получить нецелое число (2.44 и тд), при делении двух чисел типа Integer
При делении двух чисел (200 и 150) я получаю результат 1, если делю наоборот то...

ArrayList<Integer>
Вопрос в следующем, как записать ArrayList&lt;Integer&gt; в файл, чтобы он весил по...

Переполнение Integer
Есть метод перемножающий элементы вот этого массива int array =...

4
Pablito
23.02.2016, 20:02
  #2

Не по теме:

алфовиту
это печально

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

0
NRX
21 / 19 / 9
Регистрация: 22.09.2015
Сообщений: 149
Завершенные тесты: 1
23.02.2016, 20:13  [ТС] 3
Цитата Сообщение от Паблито Посмотреть сообщение
алфовиту
это печально
мда...

Цитата Сообщение от Паблито Посмотреть сообщение
и код ужасен, нечитаем, нерационален
можно было написать в 10 раз короче даже без использования коллекций и готовых утилитарных классов
уж звените что я такой криворукий, если бы таким бы не был я бы не задавал, наверное, таких глупых вопросов.

К сожалению это действительность и я не могу более красиво и проще написать, как в голову пришло так и сделал. Что вы хотите от человека, который только начал изучать программирование. Да и не кому подсказать.

Спасибо за критику, буду думать как сделать в 10 раз короче

Добавлено через 4 минуты
Цитата Сообщение от Паблито Посмотреть сообщение
без использования коллекций и готовых утилитарных классов
подскажите пожалуйста, как мне действовать, если не известно количество записей в файле, и куда записывать данные из файла?
0
Pablito
23.02.2016, 20:21
  #4

Не по теме:

да не нужно извиняться )
я говорил про метод sortABC() там очень все как-то мудрено

0
NRX
21 / 19 / 9
Регистрация: 22.09.2015
Сообщений: 149
Завершенные тесты: 1
23.02.2016, 20:31  [ТС] 5
Ну это точно. просто как-то по другому не придумал
0
23.02.2016, 20:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2016, 20:31

Integer.parseInt()
Integer.parseInt() - зачем нужна эта функция и как ней пользоваться. Мне нужно...

32 битный Integer
Посчитать произведения в типе Integer (32 битном) и учитывать только те из них,...

Не отправляет integer
Проблема вот в чем. Когда клиент пытается отослать серверу цифру 1 (для того...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru