Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
 Аватар для Amet13
1362 / 1074 / 110
Регистрация: 16.03.2012
Сообщений: 4,543

Ввод char вместо int

21.03.2013, 02:48. Показов 4081. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Реализовываю потихоньку стек в java.
Дело в том, что в стек я могу заносить только int-значения, а мне хотелось бы еще и символы вносить.
Перелопатил весь код, изменял многое, но не получается все равно.
29-я строка, интовская переменная, именно ее значение вносится в стек (37-я строка).

И еще вопрос, как очистить полностью список?
Вот код:
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
import java.io.*;
import java.util.*;
public class LinkStack {
  LinkList list;
  LinkStack() {
    list = new LinkList();
  }
  void push(long j) {
    list.insertFirst(j);
  }
  long pop() { //извлечение первого элемента стека
    return list.deleteFirst();
  }
  boolean isEmpty() { //пуст ли стек?
    return(list.isEmpty());
  }
  void displayStack() { //вывод содержимого стека
    System.out.print("Stack: [ ");
    list.displayList();
    System.out.print(" ]\n");
  }
  public static void main(String[] args) { //действия
    LinkStack theStack = new LinkStack();
    System.out.println("Перед вами консоль управления стеком.\nИнструкции:");
    System.out.println("push - добавить элемент в стек\npop - извлечь элемент из стека\ndisplay - вывод содержимого стека\nquit - выход их программы\nhelp - помощь\n");
    System.out.println("Сейчас стек пуст. Действуйте:");
    while (true) {
        Scanner in = new Scanner(System.in);
        int value;
        String var;
        System.out.print("> ");
        var = in.next();
        if (var.equals("push")) {
            System.out.print("Введите значение элемента: ");
            Scanner in_push = new Scanner(System.in);
            value = in_push.nextInt();
            theStack.push(value);
        }
        else if (var.equals("pop")) {
            theStack.pop();
        }
        else if (var.equals("display")) {
            theStack.displayStack();
        }
        else if (var.equals("quit")) {
            System.exit(0);
        }
        else if (var.equals("help")) {
            System.out.println("\npush - добавить элемент в стек\npop - извлечь элемент из стека\ndisplay - вывод содержимого стека\nquit - выход их программы\nhelp - помощь\n");
        }
        else
            System.out.println("\nВы ввели неверную команду!");
    }
  }
  class LinkList {
    Link first;
    LinkList() {
      first = null;
    }
    boolean isEmpty() { //пуст ли список?
      return (first == null);
    }
    void insertFirst(long d) { //извлечение первого элеменат списка
      Link newLink = new Link(d);
      newLink.next = first;
      first = newLink;
    }
    long deleteFirst() { //удаление первого элемента списка
      Link buf = first;
      first = first.next;
      return buf.data;
    }
    void displayList() { //вывод списка
      Link current = first;
      while (current != null) {
        current.displayLink();
        current = current.next;
      }
    }
    class Link {
      long data;
      Link next;
      Link(long d) {
        data = d;
      }
      void displayLink() {
        System.out.print(data + " ");
      }
    }
  }
}
Добавлено через 2 часа 17 минут
и еще один вопрос, если у меня стек пуст, то выбрасывается исключение
выловить не получается, мне нужно чтобы вывелось сообщение о том что стек пустой, и программа продолжила свое выполнение
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.03.2013, 02:48
Ответы с готовыми решениями:

Конвернтация char в int
Добрый день! Пытаюсь разобраться с преобразованием типов в Java. Пытаюсь конвертировать полученное значение в char в int, но получаю лишь...

Int to char кастинг
public class Main { public static void main (String args) throws java.lang.Exception { int a = -1; char b = (char) a; ...

Перевод переменной int в char
Подскажите пожалуйста как перевести переменную int в char? я в своей программе изначально в int использую цифры таблицы ASCII. я просто не...

22
10 / 36 / 7
Регистрация: 04.03.2013
Сообщений: 184
21.03.2013, 19:12
Java
1
2
    List list = new LinkedList();
    list.clear();
Желательно конечно типизировать
Java
1
 List<String> list = new LinkedList();
0
любитель покушать
 Аватар для Севак
687 / 641 / 248
Регистрация: 25.09.2011
Сообщений: 1,313
21.03.2013, 19:19
Freeman666, тогда уж
Java
1
List<String> list = new LinkedList<>();
0
 Аватар для Amet13
1362 / 1074 / 110
Регистрация: 16.03.2012
Сообщений: 4,543
21.03.2013, 19:50  [ТС]
спасибо, для меня это не приоритетный вопрос.
мне сейчас главное придумать что-то с вводом char
а есть соображения насчет вывода сообщения о том, что стек пуст?
думаю загвоздка кроется где-то в методе isEmpthy() (строка 14 и 60)
вылов исключений не получается

Добавлено через 21 минуту
Цитата Сообщение от Amet13 Посмотреть сообщение
и еще один вопрос, если у меня стек пуст, то выбрасывается исключение
выловить не получается, мне нужно чтобы вывелось сообщение о том что стек пустой, и программа продолжила свое выполнение
значит с этим я разобрался
может кому пригодится
строка 40
Java
1
2
3
try {
                theStack.pop();}
                catch (NullPointerException e) {System.out.println("Stack is null");}
буду думать дальше, буду благодарен за подсказки
0
 Аватар для Antenka
56 / 56 / 0
Регистрация: 15.03.2013
Сообщений: 88
21.03.2013, 19:55
2Freeman666, а я за ТС! Считаю не зазорным разбираться в том как организованы разного рода структуры данных. А уж потом, к библиотечным структурам, любой дурак обратиться сможет

2Amet13,
Цитата Сообщение от Amet13 Посмотреть сообщение
а мне хотелось бы еще и символы вносить.
Вы хотите, чтобы и числа и буквы били вперемешку? Или отдельно? Или <Ваш_вариант> ...

Цитата Сообщение от Amet13 Посмотреть сообщение
как очистить полностью список?
У Вас есть 2 полезных метода: проверка на пустой список и удаление первого элемента. Что Вас останавливает? Удаляем пока у нас не пустой список.

Цитата Сообщение от Amet13 Посмотреть сообщение
и еще один вопрос, если у меня стек пуст, то выбрасывается исключение
выловить не получается, мне нужно чтобы вывелось сообщение о том что стек пустой, и программа продолжила свое выполнение
Увы, нет возможности нормально поглядеть в Ваш код, но уже есть вопрос. Зачем создавать 2й сканер:
Java
1
Scanner in_push = new Scanner(System.in);
Вы можете так же успешно пользоваться уже существующим.

А это:
Java
1
2
3
try {
theStack.pop();}
catch (NullPointerException e) {System.out.println("Stack is null");}
называется "лечение симптомов вместо болезни". Сделайте проверку в методе удаления. И просто не удаляйте элементы, если удалять нечего.
1
10 / 36 / 7
Регистрация: 04.03.2013
Сообщений: 184
21.03.2013, 19:59
2Antenka, а я за использование велосипедов, а не за их изобретение.
0
 Аватар для Amet13
1362 / 1074 / 110
Регистрация: 16.03.2012
Сообщений: 4,543
21.03.2013, 20:06  [ТС]
Цитата Сообщение от Antenka Посмотреть сообщение
Зачем создавать 2й сканер:
насчет этого, наверное из-за незнания, всегда делал 2 сканера если они в разных циклах, ветках итд, постараюсь исправить

Цитата Сообщение от Antenka Посмотреть сообщение
Вы хотите, чтобы и числа и буквы били вперемешку? Или отдельно? Или <Ваш_вариант> ...
хмм... вот тут я затрудняюсь ответить, мне например кажется, что цифра(число) это не символ, то есть думаю ввод (a,u,*,z,/,) сгодится

Цитата Сообщение от Antenka Посмотреть сообщение
У Вас есть 2 полезных метода: проверка на пустой список и удаление первого элемента. Что Вас останавливает? Удаляем пока у нас не пустой список.
тут тоже я немного не докупил, я не уверен, что стек вообще можно за раз почистить, а ели и можно, то пытался зациклить deleteStack(), но опять же выбрасывало исключение NullPointerException
но мне кажется я уже близко к финалу

Добавлено через 3 минуты
ага, как очистить список, я сделал
Java
1
2
3
4
5
6
7
else if (var.equals("clear"))
                try {
                    while (true) {
                        theStack.pop();
                    }
                }
                catch (NullPointerException e) {}
осталось пожалуй разобраться с вводом char
а дальше по мелочи (например, вместе с push вводить сразу же аргумент, например push 23)

Scanner поправил
0
 Аватар для Antenka
56 / 56 / 0
Регистрация: 15.03.2013
Сообщений: 88
21.03.2013, 20:30
Цитата Сообщение от Freeman666 Посмотреть сообщение
а я за использование велосипедов, а не за их изобретение.
Я тоже, но тут на лицо учебный пример. Вот Вы, например, понимаете что такое LinkedList и с чем его едят? Думаю, да. А вот ТС только разбирается. И да, соглашусь если скажете, что, далеко не везде вработе требуется знание подобных структур.

Java
1
2
3
4
5
6
try{
while (true) {
theStack.pop();
}
}
catch (NullPointerException e) {}
Это ... это очень интересный вариант реализации цикла
Давайте прочитаем что у нас получилось:
1. "while (true)" - запускаем бесконечный цикл.
2. theStack.pop(); - вытаскиваем 1 элемент.
3. Если при вытаскивании случился эксепшн, выпригиваем из него.

Признаюсь честно, это самая оригинальная реализация из тех, что я видела! А теперь давайте перепишем по-человечески:
Java
1
while (/*тут мы должны проверять, не пуст ли список*/)
Т.е. логика следующая:
1. Пока список не пустой (isEmpty), продолжаем циклить.
2. В теле цикла все так же выпиливаем 1 элемент.
3. Выходим из цикла, когда условие перестает выполяться, т.е. список очистился.

И сделайте-таки проверку на пустоту списка в "deleteFirst".
1
 Аватар для Amet13
1362 / 1074 / 110
Регистрация: 16.03.2012
Сообщений: 4,543
21.03.2013, 20:35  [ТС]
работает - не трогай =)

Добавлено через 1 минуту
Цитата Сообщение от Antenka Посмотреть сообщение
Т.е. логика следующая:
1. Пока список не пустой (isEmpty), продолжаем циклить.
2. В теле цикла все так же выпиливаем 1 элемент.
3. Выходим из цикла, когда условие перестает выполяться, т.е. список очистился.
И сделайте-таки проверку на пустоту списка в "deleteFirst".
кстати я так пробовал делать, у меня были проблемы с вызовом isEmpty()
0
 Аватар для Antenka
56 / 56 / 0
Регистрация: 15.03.2013
Сообщений: 88
21.03.2013, 20:36
Цитата Сообщение от Amet13 Посмотреть сообщение
работает - не трогай =)
Так зачастую говорят о коде из разряда "write once, read never" Имхо, мягко говоря, не самая лучшая практика для написания.

Цитата Сообщение от Amet13 Посмотреть сообщение
кстати я так пробовал делать, у меня были проблемы с вызовом isEmpty()
Какие? Покажите код, будем разбираться.
0
 Аватар для Amet13
1362 / 1074 / 110
Регистрация: 16.03.2012
Сообщений: 4,543
21.03.2013, 20:40  [ТС]
Java
1
2
3
4
5
6
7
8
9
10
11
12
static LinkList list;
    LinkStack() {
        list = new LinkList();
    }
...
else if (var.equals("clear"))
                try {
                    while (isEmpty()==true) {
                        theStack.pop();
                    }
                }
                catch (NullPointerException e) {}
как-то так

и тут я решил, сделал метод isEmpthy статическим, работает
0
 Аватар для Antenka
56 / 56 / 0
Регистрация: 15.03.2013
Сообщений: 88
21.03.2013, 20:45
Java
1
while (isEmpty()==true) {...}
Читаем внимательно то, что у нас получилось в этой строке: "Пока проверка на пустоту списка возвращает true" или, другими словами, "Пока список пустой". И только при этом условии будет выполняться тело цикла ... только когда список пустой ... понимаете что нужно изменить?

... и никаких try/catch не надо будет.
0
 Аватар для Amet13
1362 / 1074 / 110
Регистрация: 16.03.2012
Сообщений: 4,543
21.03.2013, 20:47  [ТС]
Цитата Сообщение от Antenka Посмотреть сообщение
Java
1
while (isEmpty()==true) {...}
Читаем внимательно то, что у нас получилось в этой строке: "Пока проверка на пустоту списка возвращает true" или, другими словами, "Пока список пустой". И только при этом условии будет выполняться тело цикла ... только когда список пустой ... понимаете что нужно изменить?

... и никаких try/catch не надо будет.
прошу прощения, опечатка, у меня там вместо true - false записан
true у меня в другом месте записан, там где извлечение одного элемента из стека
0
 Аватар для Antenka
56 / 56 / 0
Регистрация: 15.03.2013
Сообщений: 88
21.03.2013, 20:56
Цитата Сообщение от Amet13 Посмотреть сообщение
я решил, сделал метод isEmpthy статическим
Метод работает с полями экземпляра. Т. е. мы находимся на уровне объекта, не класса. Не место ему в статических

Цитата Сообщение от Amet13 Посмотреть сообщение
у меня там вместо true - false записан
Это хорошо, но я по ошибке тоже не туда глянула. Не на то нужно было обратить Ваше внимание ..

isEmpty - метод, который нужно вызывать у экземпляра theStack, с которым Вы работаете. Т.е.:
Java
1
while (theStack.isEmpty() == false) {...}
или просто
Java
1
while (!theStack.isEmpty()) {...}
1
10 / 36 / 7
Регистрация: 04.03.2013
Сообщений: 184
21.03.2013, 20:59
Кстати уберите вы уже наконец частицу the из имён переменных. Раздражает...
2Antenka, у вас нет таких же умных подруг? А то мы с ребятами так и останемся холостяками =)
0
 Аватар для Amet13
1362 / 1074 / 110
Регистрация: 16.03.2012
Сообщений: 4,543
21.03.2013, 21:02  [ТС]
Цитата Сообщение от Antenka Посмотреть сообщение
Метод работает с полями экземпляра. Т. е. мы находимся на уровне объекта, не класса. Не место ему в статических


Это хорошо, но я по ошибке тоже не туда глянула. Не на то нужно было обратить Ваше внимание ..

isEmpty - метод, который нужно вызывать у экземпляра theStack, с которым Вы работаете. Т.е.:
Java
1
while (theStack.isEmpty() == false) {...}
или просто
Java
1
while (!theStack.isEmpty()) {...}
да, поправил, все нормально

пожалуй с этим разобрался, далее я хочу вводить в стек не только инт например но и char
что пробовал:
Java
1
2
3
4
5
if (var.equals("push")) {
                System.out.print("Введите значение элемента: ");
                value = in.next().charAt(0);
                theStack.push(value);
            }
заносит в стек, но при отображении стека показывает не s например, а число 155

Добавлено через 2 минуты
Freeman666, а меня ничуть не раздражает, как говорится на вкус и цвет...
0
10 / 36 / 7
Регистрация: 04.03.2013
Сообщений: 184
21.03.2013, 21:06
Не на вкус и цвет, а просто не делайте больше так. А то у вас будет потом theLink, theStack, theString, theValue
0
 Аватар для Amet13
1362 / 1074 / 110
Регистрация: 16.03.2012
Сообщений: 4,543
21.03.2013, 21:09  [ТС]
Freeman666, и все равно не соглашусь с вашим мнением, обычно я так не делаю, но в данном случае и так сгодится, доля меня сейчас приоритетнее несколько другое
0
 Аватар для Antenka
56 / 56 / 0
Регистрация: 15.03.2013
Сообщений: 88
21.03.2013, 21:09
Цитата Сообщение от Amet13 Посмотреть сообщение
заносит в стек, но при отображении стека показывает не s например, а число 155
Все потому, что Вы в стеке храните числа. Char в число умеет преобразовываться без явного преобразования. А вот обратно, извольте его попросить выглядеть как Вам хочется.

Цитата Сообщение от Freeman666 Посмотреть сообщение
2Antenka, у вас нет таких же умных подруг? А то мы с ребятами так и останемся холостяками =)
С подругами сложно. По работе приходится общаться преимущественно с представителями мужского пола. Вы огласите количество друзей, как наберется нужное количество умных подруг - дам знать
2
 Аватар для Amet13
1362 / 1074 / 110
Регистрация: 16.03.2012
Сообщений: 4,543
21.03.2013, 21:15  [ТС]
Цитата Сообщение от Antenka Посмотреть сообщение
А вот обратно, извольте его попросить выглядеть как Вам хочется.
а вот отсюда пожалуйста поподробнее

Добавлено через 4 минуты
и опять же прошу прощения, разобрался, могу заносить char в стек
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.03.2013, 21:15
Помогаю со студенческими работами здесь

Filereader. char, string, int, double
Добрый день. Вчера долго мучался (благо мне на cyberforum помогли), как с помощью scanner прочитать char. Сейчас задача усложнилась. Мне...

Чтение файлов с расширением .int .float .char
Доброго времени суток! Подскажите пожалуйста как осуществить чтение файлов с таким расширением .int .float .char?

ОшибкаThe method convertTemp(int, char) in the type TemperatureConverter is not applicable for the arguments
public class TemperatureConverter { public char convertTemp(int temperature,char convertTo){ int x; x = 55; if...

как сделат чтоб программа не ломалась когда считывает char* вместо int
int a; cin&gt;&gt;a; а ввожу &quot;a3&quot; как сделать чтоб прога ето поняла и попыталась считать ещё раз?

Реализация функции char *padl(const char *string, int len, int c=' ')
Реализовать функцию возвращающую указатель на новую строку длины len, полученную из string либо удалением лишних символов слева , либо...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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