2015-09-04 2 views
-3

Я работаю над домашним заданием для моего вступления в класс информатики, и мы вводим основные команды, чтобы получить процент людей, которые пьют определенный энергетический напиток. Мы использовали JOptionPane для создания текстовых полей, и вы можете ввести количество людей, и компьютер имеет заданный процент, чтобы получить результат. Моя проблема заключается в том, что я задал свои переменные как удвоенные, а мои ответы - очень длинными десятичными знаками. Я хочу преобразовать ответы в Ints, чтобы получить целые числа. Я попытался сделать это с помощью кастинга, но я продолжаю получать сообщение об ошибке «EnergyDrink.java:14: ошибка: переменная citrusEnergyDrinkers, возможно, не была инициализирована». Что я могу сделать?Изменение парных разрядов

+2

Можете ли вы опубликовать код, который вы пробовали? –

+1

Пожалуйста, разместите свой код, как будто это не проблема кастинга, но проблема с инициализацией I для меня – carloabelli

+0

import javax.swing.JOptionPane; общественный класс EnergyDrink { public static void main (String [] args) { String amountOfPeople; двойной суммаOfPeopleFinal; double percentWhoPurchaseEnergyDrinks = .14; double PercentageWhoPreferCitrusDrink = .64; двойной энергииDrinkers; двойные цитрусовыеИнтерьерДрикеры; int energyDrinkersFinal = (int) energyDrinkers; int citrusEnergyDrinkersFinal = (int) citrusEnergyDrinkers; amountOfPeople = JOptionPane.showInputDialog («Сколько людей было опрошено?»); количествоOfPeopleFinal = Double.parseDouble (количествоOfPeople); –

ответ

0

Это не может быть разрешено без кода. Ошибка не из-за каких-либо проблем с переводом, а просто как компилятор ошибок говорит:

variable citrusEnergyDrinkers might not have been initialized

Это означает, что переменная не может содержать значение в то время, когда вы пытаетесь преобразовать его, что приводит к неопределенное поведение, которое java-дизайнеры не допустили по причине.
Проблема заключается в том, что сообщение об ошибке сообщает: citrusEnergyDrinkers получает свое значение внутри некоторого блока try-catch или блока, который запускается только при определенных условиях, например if. Одним из способов обойти это было бы просто инициализировать citrusEnergyDrinkers как 0:
double citrusEnergyDrinkers = 0;.
Обратите внимание, что это может привести к неправильным результатам в зависимости от того, что происходит, когда значение не установлено, если вышеупомянутый блок кода не вводится/не прерывается перед установкой значения.

Для преобразования:
Math.round(citrusEnergyDrinkers) наиболее вероятно, предпочтительнее простого бросок к int, так как double большой части времени имеют некоторую неточность в связи с тем, как она хранится в памяти и round будет на самом деле вокруг значения, в то время как гипс просто удалит фрикционную часть. Например:

(int) 0.75 //produces 0 
Math.round(0.75) //produces 1 
0

Вы могли бы умножить дважды на 100 и затем приводится к междунар:

double d = .77583495; 
int perc = (int) Math.round(d); 

Я предпочитаю, чтобы не отбрасывать, как это, но это работает.

Удачи.

Смежные вопросы