Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перевод дробного числа из 4-ричной в 12-ричную 
:(
    Опции темы
ArniLand
Дата 8.3.2011, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 17.8.2008

Репутация: нет
Всего: нет



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

Код программы:
Код


package laba12_architecture_drob;
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public void fromFourToTwelve() {
        Scanner in = new Scanner(System.in);
        String x;
        x = in.toString(); //введённое число
        char[] mas = x.toCharArray();
        for(int i=0;i<=x.length();i++)
        {
            if(mas[i]!='0' || mas[i]!='1' || mas[i]!='2' || mas[i]!='3' || mas[i]!='.') {System.out.println("Wrong input"); break;}
        }
        double x_dbl = Double.parseDouble(x); //конверт в double
        int cel_ch = (int)x_dbl; // выделение целой части
        String s = Integer.toString(cel_ch); //целая часть в строку
        int r = Integer.parseInt(s, 4); //из 4-ричной в десятичную
        int l = x.length()-s.length()-1; // длинна дробной части (общая - целая - ".")
        double drob_ch = x_dbl-cel_ch; //дробная часть числа
        BigDecimal bd = new BigDecimal(drob_ch);
        bd = bd.setScale(l, BigDecimal.ROUND_HALF_UP);
        drob_ch = bd.doubleValue();
                // Перевод дробной части в десятичную систему счисления
        drob_ch = drob_ch * Math.pow(10, l); //получим только дробную часть. Число после 0.
        int drob = (int)drob_ch;
        double des=0;
        for(int i=l;i>0;i--)
        {
            des += ((drob/Math.pow(10,i))%Math.pow(10,l-i))*Math.pow(3,-(l-i+1)); //определяем след число и умножаем его на 3^-(l-i+1) . Где -(l-i+1) будет -1, -2 и т.д.
        }

        String dr = "";
        int a;
        for(int i=0;i<20;i++)
        {
            drob_ch = drob_ch * 12;//12
            a = (int)(drob_ch);
            drob_ch = drob_ch - a;
        }
        System.out.println(String.valueOf(Integer.toString(r, 12) +  + des));//12
    }
    public static void main(String[] args) {
        Main obj = new Main();
        obj.fromFourToTwelve();
    }

}



Ошибки:
Цитата
Wrong input
Exception in thread "main" java.lang.NumberFormatException: For input string: "java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][match valid=false][need input=false][source closed=false][skipped=false][group separator=\.][decimal separator=\,][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\Q�\E][infinity string=\Q∞\E]"
        at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
        at java.lang.Double.parseDouble(Double.java:510)
        at laba12_architecture_drob.Main.fromFourToTwelve(Main.java:19)
        at laba12_architecture_drob.Main.main(Main.java:49)
Java Result: 1


PM MAIL   Вверх
jk1
Дата 9.3.2011, 04:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Код

x = in.toString(); //введённое число


Меняем на 

Код

x = in.nextLine(); //введённое число


Условие заменяем на правильное

Код

 if(mas[i]!='0' && mas[i]!='1' && mas[i]!='2' && mas[i]!='3' && mas[i]!='.')


Циклу выставляем правильную границу

Код

 for(int i=0;i<x.length();i++)


Исправляем вывод результата

Код

String desString =String.valueOf(des).substring(1);
System.out.println(String.valueOf(Integer.toString(r, 12) + desString));//12


В итоге

Код

public class Convert {
public void fromFourToTwelve() {
        Scanner in = new Scanner(System.in);
        String x;
        x = in.nextLine(); //введённое число
        char[] mas = x.toCharArray();
        for(int i=0;i<x.length();i++)
        {
            if(mas[i]!='0' && mas[i]!='1' && mas[i]!='2' && mas[i]!='3' && mas[i]!='.') {System.out.println("Wrong input"); break;}
        }
        double x_dbl = Double.parseDouble(x); //конверт в double
        int cel_ch = (int)x_dbl; // выделение целой части
        String s = Integer.toString(cel_ch); //целая часть в строку
        int r = Integer.parseInt(s, 4); //из 4-ричной в десятичную
        int l = x.length()-s.length()-1; // длинна дробной части (общая - целая - ".")
        double drob_ch = x_dbl-cel_ch; //дробная часть числа
        BigDecimal bd = new BigDecimal(drob_ch);
        bd = bd.setScale(l, BigDecimal.ROUND_HALF_UP);
        drob_ch = bd.doubleValue();
        // Перевод дробной части в десятичную систему счисления
        drob_ch = drob_ch * Math.pow(10, l); //получим только дробную часть. Число после 0.
        int drob = (int)drob_ch;
        double des=0;
        for(int i=l;i>0;i--)
        {
            des += ((drob/Math.pow(10,i))%Math.pow(10,l-i))*Math.pow(3,-(l-i+1)); 
        }
        int a;
        for(int i=0;i<20;i++)
        {
            drob_ch = drob_ch * 12;//12
            a = (int)(drob_ch);
            drob_ch = drob_ch - a;
        }
        String desString =String.valueOf(des).substring(1);
        System.out.println(String.valueOf(Integer.toString(r, 12) + desString));//12
    }
    public static void main(String[] args) {
        Convert obj = new Convert();
        obj.fromFourToTwelve();
    }
}




--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.