2013-11-18 9 views
-2

Я получил этот массив значенийJava деление возвращает 0,0

float Guy_A [] = {194,180,221,432,820,200,312,177,190, 70}; 

И я написал это «за» на общую сумму значений

for (int i=0; i < Guy_A.length;i++) 
    { A += Guy_A[i];} 

И после того, что я хочу сделать в середине точку divition с помощью это

float pcnt_a = A * 100 /vt; 
//the vt is declared above as a float and it value is 10489 

После этого я запустить файл с помощью этой команды:

System.out.println("Guy A has "+A+" votes"); 
System.out.println("His Average is"+df.format(pcnt_a)+" %\n"); 

Проблема заключается в том, что первая строке возвращает «2796.0» (фактические общие) но второй один только возвращает 0,00 «%» // df.format является 0,00, для пропуска других чисел 6 десятичных.

Я попытался с двойным и int, но он все еще показывает 0.0. Может кто-нибудь, пожалуйста, объясните мне, что я могу сделать с этой вещью ...

// Полный код:

public class Estadisticas { //float A = 2796; 

    float Candidato_A [] = {194,180,221,432,820,200,312,177,190, 70}; 
    float Candidato_B [] = { 48, 20, 90, 50, 61,100, 99, 87, 77,122}; 
    float Candidato_C [] = {206,320,140,821,946,155,501,075,005,12}; 
    float Candidato_D [] = { 45, 16, 20, 14, 18,355,122,178,501,117}; 
    float Candidato_E [] = {155,501,075,178,501,117,700,55,78,12}; 
    float vt = 10489; 
    boolean no_win; 

    public void totalVotos(){ 
     for (int i=0; i<Candidato_A.length;i++){ 
      A += Candidato_A[i]; } 
     for (int i=0; i<Candidato_B.length;i++){ 
      B += Candidato_B[i]; } 
     for (int i=0; i<Candidato_C.length;i++){ 
      C += Candidato_C[i]; } 
     for (int i=0; i<Candidato_D.length;i++){ 
      D += Candidato_D[i]; } 
     for (int i=0; i<Candidato_E.length;i++){ 
      E += Candidato_E[i]; 
     } 
    } 

    float A; float B; float C; float D; float E; 

    float pcnt_a = A * 100 /vt; 
    float pcnt_b = B * 100 /vt; 
    float pcnt_c = C * 100 /vt; 
    float pcnt_d = D * 100 /vt; 
    float pcnt_e = E * 100 /vt; 

    public void imprimeDatos(){ 
     DecimalFormat df= new DecimalFormat("0.00"); 
     System.out.println("\n\n -- Estadisticas de las elecciones --\n"); 
     System.out.println("El Candidato A obtuvo "+A+" votos"); 
     System.out.println("Su Porcentaje de votos fue de "+df.format(pcnt_a)+" %\n");  System.out.println("El Candidato B obtuvo "+B+" votos"); 
     System.out.println("Su Porcentaje de votos fue de"+df.format(pcnt_b)+" %\n"); 
     System.out.println("El Candidato C obtuvo"+C+" votos"); 
     System.out.println("Su Porcentaje de votos fue de"+df.format(pcnt_c)+" %\n"); 
     System.out.println("El Candidato D obtuvo"+D+" votos"); 
     System.out.println("Su Porcentaje de votos fue de"+df.format(pcnt_d)+" %\n"); 
     System.out.println("El Candidato E obtuvo"+E+" votos"); 
     System.out.println("Su Porcentaje de votos fue de"+df.format(pcnt_e)+" %\n"); 

     if(A>B && A>C && A>D && A>E){ 
      System.out.println("-- El Candidato A obtuvo la mayor cantidad de votos --\n"); 
     } else{ 
      if(B>A && B>C && B>D && B>E){ 
       System.out.println("-- El Candidato B obtuvo la mayor cantidad de votos --\n"); 
      } else{ 
       if(C>B && C>A && C>D && C>E){ 
        System.out.println("-- El Candidato C obtuvo la mayor cantidad de votos --\n"); 
       } else{ 
        if(D>B && D>C && D>A && D>E){ 
         System.out.println("-- El Candidato D obtuvo la mayor cantidad de votos --\n"); 
        } else{ 
         if(E>B && E>C && E>D && E>A){ 
          System.out.println("-- El Candidato E obtuvo la mayor cantidad de votos --\n"); 
         } 
        } 
       } 
      } 
     } 
    } 

Извините за испанский, прямо сейчас я это нужно для университета proyect.

+2

Вам удалось оставить самую важную деталь. Что такое 'df'? –

+0

Я вижу ваше редактирование, но, пожалуйста, покажите нам конкретный код, где вы фактически создаете экземпляр и устанавливаете 'df'. –

+0

Можете ли вы показать, как вы объявили все переменные, которые вы использовали? – latenightcode

ответ

1

Похоже, что A и pcnt_a оба поля. A равно 0 в то время pcnt_a установлено как A * 100 /vt. Вам необходимо вычислить pcnt_a после выполнения цикла сумм, в котором вычисляется A.

public void totalVotos() { 
    for (int i = 0; i < Candidato_A.length; i++) { 
     A += Candidato_A[i]; 
    } 
    for (int i = 0; i < Candidato_B.length; i++) { 
     B += Candidato_B[i]; 
    } 
    for (int i = 0; i < Candidato_C.length; i++) { 
     C += Candidato_C[i]; 
    } 
    for (int i = 0; i < Candidato_D.length; i++) { 
     D += Candidato_D[i]; 
    } 
    for (int i = 0; i < Candidato_E.length; i++) { 
     E += Candidato_E[i]; 
    } 
    pcnt_a = A * 100/vt; 
    pcnt_b = B * 100/vt; 
    pcnt_c = C * 100/vt; 
    pcnt_d = D * 100/vt; 
    pcnt_e = E * 100/vt; 
} 
+0

Ударьте меня на редактирование и ошибку.Хорошая работа :) –

+0

Также как примечание, OP, я надеюсь, что ваш реальный код не похож на кошмар форматирования, который был вашим кодом, когда он был первоначально опубликован. Если это не просто проблема с копированием и вставкой, то неудивительно, что у вас мало таких проблем. Считываемое форматирование кода серьезно относится к одной из самых важных вещей. И @DennisMeng спасибо. – Radiodef

+0

Если я переведу pcnt_ltr к другому методу, он будет работать ?. – user3002972

0

Вы не указали значение, которое вы назначаете при создании экземпляра df. Попробуйте следующее: DecimalFormat df = new DecimalFormat ("####. 00");

+0

мой плохой, я пропустил его, но он находится в коде 0.00 – user3002972

0

Является ли ваш форматтер неправильным? Убедитесь, что ваша строка формата в вашем форматировании (я полагаю, что df означает десятичный форматтер) фактически указывает количество нулей, а не только строку «0.0». Я не знаю, что такое DF.

+0

OP действительно сказал, что A - 2796.0, если напечатан, поэтому A может не быть int. –

+0

Не пытался ли ДП удвоить, как упоминалось в его сообщении? хотя он не упомянул, какую переменную он попробовал ... – latenightcode

+0

Ну, я пробовал использовать контекст. – awiebe

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