2017-09-28 3 views
-2

So ist der Fehler, ich bin immer ist Division durch 0Accesssing Zähler außerhalb while-Schleife java

I'ts aufgrund des Wertes von totDrivers. Ich bin mir nicht sicher, ob es ist, weil der Zähler nicht aktualisiert, wie die while Schleife durchläuft. Oder wenn es so ist, weil ich totDrivers falsch auf die Variable von außerhalb der Schleife zugreifen.

Andere Posts, die ich gelesen habe, um auf eine Variable außerhalb einer Schleife zuzugreifen, müssen Sie sie außerhalb der Schleife initialisieren. Aber es gibt nicht an, wenn dadurch der aktualisierte Wert eines Zählers ausgegeben wird.

[Exception in thread "main" java.lang.ArithmeticException:/by zero 
at Statistics.main(Statistics.java:84)] 

import java.util.Scanner; 

public class Statistics 
{ 

    public static void main (String [] args) 
    { 

     Scanner in=new Scanner(System.in); 

     //counters initilization 
     int f=0; //female 
     int m=0;//male 
     int u=0;//unspecified 
     int u25=0;//less than 25 in age 
     int mu=0;//male and under 25 
     int bt=0;//between 25 and 75 
     int ab=0;//above 75 
     int y=0;//res 
     int n=0;//non res 

     int age=0; 
     String gender="U"; 
     String nlRes="Y"; 
     int totDrivers=0; 

     while (age !=0) 
     { 

      totDrivers++; 
      System.out.print("Please enter age\\(Enter 0 if theres no more input\\): "); 
      age= in.nextInt(); 
      System.out.print("Please enter gender(M,F,or U): "); 
      gender= in.next(); 
      System.out.print("Please enter gender: "); 
      nlRes= in.next();  


      if (age<25) 
      { 
       u25++; 
      } 
      if(gender.equals("M")) 
      { 
       mu++; 
      } 
      else if(age>=25&&age<=75) 
      { 
       bt++; 
      } 
      else if(age>75) 
      { 
       ab++; 
      } 


      if(gender.equals("M")) 
      { 
       m++; 
      } 
      else if(gender.equals("F")) 
      { 
       f++; 
      } 
      else if(gender.equals("U")) 
      { 
       u++; 
      } 


      if(nlRes.equals("Y")) 
      { 
       y++; 
      } 
      else if(nlRes.equals("N")) 
      { 
       n++; 
      } 
      System.out.println("totd"+totDrivers); 
     } 
     //output 

     double perU25=(u25/totDrivers)*100; 
     double perMU25=(mu/m)*100; 
     double perF=(f/totDrivers)*100; 
     double perNonNL=(n/totDrivers)*100; 
     double perAbove=(ab/totDrivers)*100; 

     System.out.println("The % of drivers under 25 is : %"+perU25); 
     System.out.println("The % of male drivers under 25 is : %"+perMU25); 
     System.out.println("The % of female drives is : %"+perF); 
     System.out.println("The % of out of province drivers is : %"+perNonNL); 
     System.out.println("The % of drivers over the age of 75 is : %"+perAbove); 
    } 
} 
+0

Welche Linie tun ausfällt? Ich glaube nicht, dass Zeile 84 durch "totDrivers" geteilt wird. –

+0

Ein einfaches 'if (totDrivers> 0 && m> 0) {// mach deine Mathematik hier}' wird dein Problem beheben. Haben Sie gedacht, dass der Code vielleicht nie in Ihre Schleife kommt? – bated

Antwort

0

Überprüfen Sie einfach, ob Ihr counter = 0, bevor Sie Ihre Abteilung

if(m != 0) 
{ 
double perMU25=(mu/m)*100; 
} 
+0

Wenn das erledigt ist, dann gibt es einen Fehler, der besagt, dass die Variable nicht gefunden werden kann, weil sie nicht in die Schleife eintritt. Das bedeutet, dass totDrivers nicht aktualisiert wird und ich kann nicht herausfinden, warum – DinoMeme

+0

Es ist, weil Sie Alter auf 0 gesetzt haben und Ihre Schleife ausgeführt wird, wenn Alter! = 0 – user2023608