2012-12-18 3 views
0

Может ли кто-нибудь увидеть, что не так с моим кодом? Я получаю 0 от возврата расчета.Передача Java int int/data

Создал небольшой расчет по второму классу и передал данные результата в основной класс, а затем распечатал.

основной класс

package javaapplication3; 

public class JavaApplication3 { 

    public static void main(String[] args) { 

     cal bla = new cal(); 

     bla.getRatio(); 
     String dCount = String.valueOf(bla.getRatio()); 

     System.out.print(dCount); 

    } 
} 

Второй класс

package javaapplication3; 

public class cal { 

    public int total = 11; 
    public int count = 2508; 
    public int calRatio; 

    public void caln() { 

     calRatio = count/total; 

     System.out.print(calRatio); 

    } 

    public int getRatio() { 
     return (calRatio); 
    } 

} 

PS: Изменяя bla.getRatio к bla.caln(); работал. Я думаю, что у меня запутались другие проекты. Спасибо за введение, ребята.

+0

В дополнение к ответу, вы хотите посмотреть на [Java Coding конвенции] (HTTP : //www.oracle.com/technetwork/java/codeconv-138413.html), в частности, как назвать классы/общедоступные методы/и т. д. – NominSim

+0

Убрано '[pass-by-reference]' as a) Java не поддерживает передачу по ссылке, b) это не относится к вопросу. –

+1

Как правило, вы должны * никогда не начинать свой вопрос с «что случилось с кодом?» –

ответ

1

Вы никогда не называют "сеттер" функции caln(), так calRatio не был установлен. Поэтому он возвращает 0 для calRatio.

3

Вы выполняете целочисленное деление, которое усекает результат до целого числа.

Вам необходимо указать либо операнд double.

+2

На самом деле он никогда не называет «caln», который, я думаю, был предназначен как конструктор (может быть?), Поэтому никаких расчетов не происходит. «calRatio» инициализируется как 0 и остается таким. –

+0

изменил int, чтобы удвоить и все еще получить 0.0? – Ket

+0

Пауло у вас все получилось, моя глупая ошибка благодаря чуваку! – Ket

0

Получаю 0 из расчета на возврат.

Как и следовало ожидать. 11/2508 делает целое подразделение, которое является 0

Если вы хотите ненулевой Я предлагаю изменение

public double getAverage() { 
     return (double) total/count; 
    } 

Обычно вы разделите сумму на счет, чтобы получить среднее значение.

+0

OP также никогда не вызывает функцию setter 'caln()', поэтому ему необходимо изменить это в дополнение к двойному делению. – NominSim

+0

@NominSim Я принимаю 'caln()' и набор полей действительно не должен быть там. Этот метод будет работать без вызова другого метода. –

3
bla.getRatio(); 
String dCount = String.valueOf(bla.getRatio()); 

Вы никогда не называете метод caln(), поэтому calRatio равно 0 навсегда.

Может быть, вы имели в виду следующее:

bla.caln(); 
String dCount = String.valueOf(bla.getRatio()); 

Plus, вы пытаетесь разделить целые числа. Попробуйте это:

public class cal { 

    public int total = 11; 
    public int count = 2508; 
    public double calRatio; 

    public void caln() { 

     calRatio = count/total; 

     System.out.print(calRatio); 

    } 

    public double getRatio() { 
     return calRatio; 
    } 

} 
+2

Не только это, но его метод выполняет целочисленное деление. – TimoteeTheCodeMonkee

+1

@TimoteeTheCodeMonkee правильно, но в этом конкретном случае результат count/total равен 228 –

+0

И в случае, если его значения больше не жестко закодированы? Лучше преподавать хорошие методы программирования, чем взломанные решения. :) – TimoteeTheCodeMonkee

-1

Она возвращает 0, всегда, потому что вы возвращаете int типа. Результатом вашего разделения всегда будет некоторое значение с плавающей точкой, поэтому вам нужно сохранить его как таковое и вернуть его.

public class cal { 
    public int total = 11; 
    public int count = 2508; 
    public double calRatio; 
    public void caln() { 
     calRatio = (double)count/(double)total; 
     System.out.print(calRatio); 
    } 
} 
+0

Прошу прощения, потому что деление 2508/11 = 228, а не наоборот –

+0

@downvoters по любой причине? –

+0

Я подозреваю, что у ОП есть счет и общее количество неправильного пути. ;) –

0

Попробуйте это:

public static void main(String[] args) { 

     cal bla = new cal(); 
     bla.caln(); 
     String dCount = String.valueOf(bla.getRatio()); 

     System.out.print(dCount); 

    } 
1

заменить

public void caln() { 

    calRatio = count/total; 

    System.out.print(calRatio); 

} 

этим

public cal() { 

    calRatio = count/total; 

    System.out.print(calRatio); 

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