2016-05-12 13 views
1

Ich habe 2 Klassen, DigitMath.java und DigitMathRunner.java, das Setup das Labor erfordert verwendet die DigitMathRunner als Starter für DigitMath.0.0 ist aus meinem Normal/Output zurück

Zweck meines Codes ist es, den Durchschnitt der Zahl anzuzeigen und dann in einen Satz auszugeben. Der Compiler gibt keinen Fehler, aber die Ausgabe ist unter. Hier

> > 

run DigitMathRunner 

234 has a digit average of 0.0 

10000 has a digit average of 0.0 

111 has a digit average of 0.0 

9005 has a digit average of 0.0 

84645 has a digit average of 0.0 

8547 has a digit average of 0.0 

123456789 has a digit average of 0.0 
> 

ist der Code für DigitMath.java

import static java.lang.System.*; 

public class DigitMath 
{ 
    private int number; 
    private int count; 
    private int s; 
    private int sum; 
    private int input; 
    private double average; 



    public DigitMath() 
{ 
    number = 0; 
    sum=0; 
    count = 0; 
    input = 0; 
} 


    public DigitMath(int s) 
    { 
    number = s; 
    input = s; 
    } 


    public void setNums(int s) 
    { 
    number = s; 
    input = s; 
    } 


    public int sumDigits() 
    { 
    int sum=0; 
    while(input > 0) 
    { 
    sum += input % 10; 
    input /= 10; 
    } 
    return sum; 
    } 


public int countDigits() 
{ 
    count = (int)(Math.log10(number)+1); 
    return count; 
} 


public double averageDigits() 
{ 
    double average = sum/count; 
    return average; 
} 


public int output() 
{ 
    System.out.println(""+number +" has a digit average of "+""+average); 
    return number; 
} 

} 

und der nächste Block von Code ist der Runner.

//Name - Seth Garcia 
//Date - 5/12/16 
//Class - 3rd Period Monaghan 
//Lab - DigitMath 

import static java.lang.System.*; 

public class DigitMathRunner 
{ 
public static void main(String args[]) 
{ 
    DigitMath test = new DigitMath(); 

     test.setNums(234); 
     test.sumDigits(); 
     test.countDigits(); 
     test.averageDigits(); 
     test.output(); 

     test.setNums(10000); 
     test.sumDigits(); 
     test.countDigits(); 
     test.averageDigits(); 
     test.output(); 

     test.setNums(111); 
     test.sumDigits(); 
     test.countDigits(); 
     test.averageDigits(); 
     test.output(); 

     test.setNums(9005); 
     test.sumDigits(); 
     test.countDigits(); 
     test.averageDigits(); 
     test.output(); 

     test.setNums(84645); 
     test.sumDigits(); 
     test.countDigits(); 
     test.averageDigits(); 
     test.output(); 

     test.setNums(8547); 
     test.sumDigits(); 
     test.countDigits(); 
     test.averageDigits(); 
     test.output(); 

     test.setNums(123456789); 
     test.sumDigits(); 
     test.countDigits(); 
     test.averageDigits(); 
     test.output(); 
} 
} 

auch ich bin in Informatik 1 in der Highschool, wenn mein Code schlecht ist, sag mir bitte, wie ich mich verbessern kann, danke.

Antwort

6

Variables Shadowing ist Ihr Problem.

double average = sum/count; 

Entfernen Sie bitte double.

Und Kraft Gleitkommadivision

average = sum/(double)count; 

ähnliches Problem ist in sumDigits()

Zusätzlich können Sie die private double average vollständig entfernt werden, da es ein berechneter Wert ist.

public double averageDigits() 
{ 
    return sum/(double)count; 
} 

und verwenden Sie diese Methode in der output Methode anstelle von average

+4

'Summe/(1,0) * zählen;' - 'besser sum/(double) zählen;' – Thomas

+0

ich einige Klammern vergessen haben, so dass sauberere sieht –

2

Sie müssen die Klasse Mitglieder in sumDigits() und averageDigits() anstelle der Verwendung von lokalen Variablen verwenden:

public int sumDigits() 
    { 
    sum=0; 
    while(input > 0) 
    { 
    sum += input % 10; 
    input /= 10; 
    } 
    return sum; 
    } 

public double averageDigits() 
{ 
    average = (double)sum/count; 
    return average; 
} 
0

Sie könnte auch ändern Ihr Code und die Verwendung Streams für diese. (nur zu erwähnen, dass Sie ein Problem auf verschiedene Arten lösen können)

.

String.valueOf(number) 

macht ein String Ihrer Nummer

.chars() 

einen Strom von den Zeichen der Zeichenfolge (als int-Wert)

.map(i -> i - '0') 

subtrahieren die intValue von '0'

macht
.summaryStatistics() 

gibt Ihnen eine IntSummar yStatistics Objekt