Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Taras_lebdyk
1 / 1 / 0
Регистрация: 17.09.2013
Сообщений: 246
#1

Перевод чисел в разные системы счисления - Программирование Android

24.12.2015, 15:34. Просмотров 298. Ответов 12
Метки нет (Все метки)

Добрый день, когда то нашел код для перевода чисел в разные системы, но он на С# я его там для своей программы использовал, сейчас решим сделать чтобы и на андроид работало, но так как я понял я неправильно переделал код, так как программа работает некорректно, посмотрите оригинальный код пожалуйста:

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
/// <summary>
        /// Переводит из деятичной системы счисления в систему счисления с основанием N
        /// </summary>
        /// <param name="number">Число, которое переводим </param>
        /// <param name="sys">Система счисления, в которую переводим</param>
        /// <returns>Возвращает переведенное число в строковом формате</returns>
        private string ToN(string number, string sys)
        {
            string newNum = "";
            int num = Convert.ToInt32(number);
            int chast = Convert.ToInt32(number);
            ArrayList numTemp = new ArrayList();
            while(chast>0)
            {
                chast = chast / Convert.ToInt32(sys);
                numTemp.Add(num - chast * Convert.ToInt32(sys));
                num = chast;
            }
            int j;
            for (j=numTemp.Count-1; j >= 0; j--)
                newNum += newCh(numTemp[j].ToString(),"to");
            return newNum;
        }
        /// <summary>
        /// Функция, заменяет буквы на числа и наоборот
        /// </summary>
        /// <param name="sym">Число, над которым нужно работать</param>
        /// <param name="otk">В какую сторону осуществляется действие относительно десятичной системы счисления</param>
        /// <returns>Возвращает букву, если числу соответствует буква и наоборот, иначе число</returns>
        string newCh(string sym,string otk)
        {
            string s = "";
            if (otk == "to")
            {
                if (Convert.ToInt32(sym) > 10)
                    s += bukv.Substring(Convert.ToInt32(sym) - 10, 1);
                else
                    s += sym;
            }
            else if (otk == "from")
            {
                if (bukv.IndexOf(sym)==-1)
                    s += sym;
                else
                    s += (bukv.IndexOf(sym) + 10).ToString();
            }
            return s;
        }
 
 
        /// <summary>
        /// Переводит системы счисления с основанием N в деятичную систему счисления 
        /// </summary>
        /// <param name="number">Число, которое переводим </param>
        /// <param name="sys">Система счисления, из которой переводим</param>
        /// <returns>Возвращает переведенное число в строковом формате</returns>
        private string FromN(string number, string sys)
        {
            int newNum = 0;
            string temp = "";
            int t;
            int i;
            for (i = 0; i < number.Length; i++)
            {
                temp = "";
                temp += newCh(number.Substring(i, 1), "from");
                t=(int)Math.Pow(Convert.ToDouble(sys),Convert.ToDouble(number.Length-(i+1)));
                newNum += Convert.ToInt32(temp) * t;
            }
            return newNum.ToString();
        }
        private string FromTo(string number, string sysN, string sysK)
        {
            string temp="";
            temp=FromN(number, sysN);
            temp = ToN(temp, sysK);
            return temp;
        }
а это то, что я писал в 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
/// <summary>
    /// Переводит из деятичной системы счисления в систему счисления с основанием N
    /// </summary>
    /// <param name="number">Число, которое переводим </param>
    /// <param name="sys">Система счисления, в которую переводим</param>
    /// <returns>Возвращает переведенное число в строковом формате</returns>
    private String ToN(String number, String sys)
    {
        String newNum = "";
        int num = Integer.valueOf(number);
        int chast = Integer.valueOf(number);
        ArrayList numTemp = new ArrayList();
        while (chast > 0)
        {
            chast = chast / Integer.valueOf(sys);
            numTemp.add(num - chast * Integer.valueOf(sys));
            num = chast;
        }
        int j;
        for (j = numTemp.size() - 1; j >= 0; j--)
            newNum += newCh((numTemp.get(j).toString()), "to");
        return newNum;
    }
 
    /// <summary>
    /// Функция, заменяет буквы на числа и наоборот
    /// </summary>
    /// <param name="sym">Число, над которым нужно работать</param>
    /// <param name="otk">В какую сторону осуществляется действие относительно десятичной системы счисления</param>
    /// <returns>Возвращает букву, если числу соответствует буква и наоборот, иначе число</returns>
    String newCh(String sym, String otk)
    {
        String s = "";
        if (otk == "to")
        {
            if (Integer.valueOf(sym) > 9)
                s += bukv.substring(Integer.valueOf(sym) - 10, 1);
            else
                s += sym;
        }
        else if (otk == "from")
        {
            if (bukv.indexOf(sym) == -1)
                s += sym;
            else
                s += Integer.toString(bukv.indexOf(sym) + 10);
        }
        return s;
    }
 
    /// <summary>
    /// Переводит системы счисления с основанием N в деятичную систему счисления
    /// </summary>
    /// <param name="number">Число, которое переводим </param>
    /// <param name="sys">Система счисления, из которой переводим</param>
    /// <returns>Возвращает переведенное число в строковом формате</returns>
    private String FromN(String number, String sys)
    {
        int newNum = 0;
        String temp = "";
        int t;
        int i;
        for (i = 0; i < number.length(); i++)
        {
            temp = "";
            temp += newCh(number.substring(i, 1), "from");
            t = (int)Math.pow(Double.valueOf(sys), Double.valueOf(number.length() - (i + 1)));
            newNum += Integer.valueOf(temp) * t;
        }
        return Integer.toString(newNum);
    }
 
    private String FromTo(String number, String sysN, String sysK)
    {
        String temp = "";
        temp = FromN(number, sysN);
        temp = ToN(temp, sysK);
        return temp;
    }
скажите пожалуйста что не так, спасибо за помощь)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2015, 15:34     Перевод чисел в разные системы счисления
Посмотрите здесь:
Android Перевод из одной системы счисления в другую
Перевод числа из 10-ной системы счисления в 2-ную Android
Перевод из 10 сс в 2, 8, 16 систему счисления Android
Перевод между системами счисления Android
Перевод чисел в разные системы счисления
Перевод чисел в разные системы счисления C++
Перевод чисел в разные системы счисления C (СИ)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2458 / 1903 / 591
Регистрация: 12.05.2014
Сообщений: 6,711
Завершенные тесты: 1
24.12.2015, 15:54     Перевод чисел в разные системы счисления #2
а не проще делать так?
Java
1
Integer.toString(42, 2)
переводит число 42 в двоичную систему
вместо 42 и 2 можно ставить свои аргументы
Taras_lebdyk
1 / 1 / 0
Регистрация: 17.09.2013
Сообщений: 246
24.12.2015, 15:55  [ТС]     Перевод чисел в разные системы счисления #3
ну просто у меня этот код классно работал) я хотел застусуваты здесь, подскажите что не так?
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
24.12.2015, 17:36     Перевод чисел в разные системы счисления #4
Taras_lebdyk, строки в java не сравниваются посредством "==".
Используй equals
Java
1
if (otk.equals("to"))...
Taras_lebdyk
1 / 1 / 0
Регистрация: 17.09.2013
Сообщений: 246
24.12.2015, 21:35  [ТС]     Перевод чисел в разные системы счисления #5
не помогло (наверное что-то не так переписал еще (может где-то с типами данных напутав (
метод ToN работает хорошо, а проблема мне кажется с newCh а именно во второй части
Java
1
2
3
4
5
6
7
else if (otk.equals("from"))
        {
            if (bukv.indexOf(sym) == -1)
                s += sym;
            else
                s += Integer.toString(bukv.indexOf(sym) + 10);
        }
и в методе FromN наверное тоже ошибка есть

Добавлено через 3 часа 26 минут
ну помогите (что здесь не так (
перевод с 10 системы n работает на отлично а с n в 10 или n в p программа выбивает (

Добавлено через 8 минут
и еще у меня подсвечивает код в этом месте может что-то не так записано ?
Миниатюры
Перевод чисел в разные системы счисления  
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
24.12.2015, 21:55     Перевод чисел в разные системы счисления #6
Цитата Сообщение от Taras_lebdyk Посмотреть сообщение
а с n в 10 или n в p программа выбивает (

Что в logcat??
Taras_lebdyk
1 / 1 / 0
Регистрация: 17.09.2013
Сообщений: 246
24.12.2015, 22:00  [ТС]     Перевод чисел в разные системы счисления #7
что-то такое

Process: com.example.tlp.calculator, PID: 1821
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:275)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270)
at android.view.View.performClick(View.java:4438)*
at android.view.View$PerformClick.run(View.java:18422)*
at android.os.Handler.handleCallback(Handler.java:733)*
at android.os.Handler.dispatchMessage(Handler.java:95)*
at android.os.Looper.loop(Looper.java:136)*
at android.app.ActivityThread.main(ActivityThread.java:5001)*
at java.lang.reflect.Method.invokeNative(Native Method)*
at java.lang.reflect.Method.invoke(Method.java:515)*
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)*
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)*
at dalvik.system.NativeStart.main(Native Method)*
Caused by: java.lang.StringIndexOutOfBoundsException: length=4; regionStart=2; regionLength=-1
at java.lang.String.startEndAndLength(String.java:588)
at java.lang.String.substring(String.java:1475)
at com.example.tlp.calculator.MainActivity.FromN(MainActivity.java:276)
at com.example.tlp.calculator.MainActivity.button_Click(MainActivity.java:122)
at java.lang.reflect.Method.invokeNative(Native Method)*
at java.lang.reflect.Method.invoke(Method.java:515)*
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270)*
at android.view.View.performClick(View.java:4438)*
at android.view.View$PerformClick.run(View.java:18422)*
at android.os.Handler.handleCallback(Handler.java:733)*
at android.os.Handler.dispatchMessage(Handler.java:95)*
at android.os.Looper.loop(Looper.java:136)*
at android.app.ActivityThread.main(ActivityThread.java:5001)*
at java.lang.reflect.Method.invokeNative(Native Method)*
at java.lang.reflect.Method.invoke(Method.java:515)*
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)*
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)*
at dalvik.system.NativeStart.main(Native Method)*
12-24 13:56:38.862 365-409/? E/SoundPool: error loading /system/media/audio/ui/Effect_Tick.ogg
12-24 13:56:38.922 365-409/? E/SoundPool: error loading /system/media/audio/ui/Effect_Tick.ogg
12-24 13:56:38.922 365-409/? E/SoundPool: error loading /system/media/audio/ui/Effect_Tick.ogg
12-24 13:56:38.932 365-409/? E/SoundPool: error loading /system/media/audio/ui/Effect_Tick.ogg
12-24 13:56:38.932 365-409/? E/SoundPool: error loading /system/media/audio/ui/Effect_Tick.ogg
12-24 13:56:38.932 365-409/? E/SoundPool: error loading /system/media/audio/ui/KeypressStandard.ogg
12-24 13:56:38.942 365-409/? E/SoundPool: error loading /system/media/audio/ui/KeypressSpacebar.ogg
12-24 13:56:38.942 365-409/? E/SoundPool: error loading /system/media/audio/ui/KeypressDelete.ogg
12-24 13:56:38.942 365-409/? E/SoundPool: error loading /system/media/audio/ui/KeypressReturn.ogg
12-24 13:56:38.942 365-409/? E/SoundPool: error loading /system/media/audio/ui/KeypressInvalid.ogg
12-24 13:56:39.002 365-393/? E/InputDispatcher: channel 'b40959f0 com.example.tlp.calculator/com.example.tlp.calculator.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
01-01 00:00:00.000 0-0/? E/Internal: Удаленный хост принудительно разорвал существующее подключение
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
24.12.2015, 22:24     Перевод чисел в разные системы счисления #8
Java
1
temp += newCh(number.substring(i, 1), "from");
substring() в C# и substring() в java - это две ПРИНЦИПИАЛЬНО разные (по "алгоритму", а не по результату) вещи - перечитай их описания и сделай как нужно

Цитата Сообщение от Taras_lebdyk Посмотреть сообщение
и еще у меня подсвечивает код в этом месте может что-то не так записано ?
Не особо вникая предположу, что ноги растут отсюда

java.lang.Math.pow(double a, double b)
и
static Double valueOf(double d)
Returns a Double instance representing the specified double value.
Функция pow просит примитив double, а не объект Double и система видит, что ей все эти лишние телодвижения с "переводом" объекта в примитив по итогу можно и не делать, если код подправить на
Java
1
 t = (int)Math.pow(Double.valueOf(sys), (double) (number.length() - (i + 1)));
Taras_lebdyk
1 / 1 / 0
Регистрация: 17.09.2013
Сообщений: 246
24.12.2015, 22:36  [ТС]     Перевод чисел в разные системы счисления #9
спасибо но substring используется для перевода с 10 системы в n систему и это работает правильно,но я посмотрю потом и переделаю
сделал это
Java
1
t = (int)Math.pow(Double.valueOf(sys), (double) (number.length() - (i + 1)));
но к сожалению все то же (в чом может быть ошибка (
Taras_lebdyk
1 / 1 / 0
Регистрация: 17.09.2013
Сообщений: 246
24.12.2015, 22:40  [ТС]     Перевод чисел в разные системы счисления #10
я пересмотрел все и еще заметил что здесь тоже подсвечивается,
Java
1
if (bukv.indexOf(sym) == -1)
и это тоже отвечает за перевод с n системы в 10 может здесь корень зла? потому что больше я не знаю в чем может быть проблема (
Миниатюры
Перевод чисел в разные системы счисления  
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
24.12.2015, 22:50     Перевод чисел в разные системы счисления #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Taras_lebdyk Посмотреть сообщение
и это работает правильно

Ню-ню...
Мы с системой дураки, а вы - самый умный

Система вам говорит
Caused by: java.lang.StringIndexOutOfBoundsException: length=4; regionStart=2; regionLength=-1
at java.lang.String.startEndAndLength(String.java:588)
at java.lang.String.substring(String.java:1475)
at com.example.tlp.calculator.MainActivity.FromN(MainActivity.java:276)
что есть выход за границы массива.

Я же вам к тому же говорю, что логика работы указанных функций - совершенно разная - в то время как в C# "вырезается" количество символов со стартовой позиции, то в Java выреается между стартовой и конечной позициями.

Впрочем, если вы и дальше не намерены читать и анализировать, то на этом сеанс и закончим
Taras_lebdyk
1 / 1 / 0
Регистрация: 17.09.2013
Сообщений: 246
25.12.2015, 09:08  [ТС]     Перевод чисел в разные системы счисления #12
Простите меня, действительно я не разобрался в сути проблемы, ошибка была там где Вы говорили, благодарю Вас за помощь!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2015, 10:01     Перевод чисел в разные системы счисления
Еще ссылки по теме:
Pascal ABC Перевод в разные системы счисления и сложение чисел
Перевод действительный чисел в разные системы счисления C++
Перевод дробных чисел в разные системы счисления с заданной точностью Pascal
Перевод в разные системы счисления Visual Basic .NET
Assembler Перевод числа в разные системы счисления

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

Или воспользуйтесь поиском по форуму:
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
25.12.2015, 10:01     Перевод чисел в разные системы счисления #13
Бывает
Yandex
Объявления
25.12.2015, 10:01     Перевод чисел в разные системы счисления
Ответ Создать тему
Опции темы

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