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);
}
}
Welche Linie tun ausfällt? Ich glaube nicht, dass Zeile 84 durch "totDrivers" geteilt wird. –
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