2013-10-26 6 views
-1

Мое задание - читать текстовые файлы, содержащие комбинации для семьи с возможным исходом детей. GG = two girls, GB и BG = one boy one girl, BB = two boys. Я должен найти размер выборки, а затем напечатать коэффициенты каждого из трех возможных результатов. Я не могу заставить переменные увеличиваться по всему циклу, они появляются как 0 каждый раз. Я проверил отладчик, и он показывает, что каждый файл читается правильно, но приращения не работают по какой-либо причине.Java приращение целого числа в цикле

Это мой код:

import java.util.Scanner; 
import java.io.File; 
import java.io.IOException; 
public class Family 
{ 
    public static void main(String[] args) throws IOException 
{ 
    String token = ""; 
    int girlGirl = 0; 
    int boyBoy = 0; 
    int girlBoy = 0; 
    int sampleSize = 0; 
    File fileName = new File("test2.txt"); 
    Scanner inFile = new Scanner(fileName); 

    //read file and get data 
    while (inFile.hasNext()) 
    { 
    token = inFile.next(); 
    if(token == "GG") 
    { 
     girlGirl++; 
     sampleSize++; 
    } 
    else if(token == "BB") 
    { 
     boyBoy++; 
     sampleSize++; 
    } 
    else if(token == "GB") 
    { 
     girlBoy++; 
     sampleSize++; 
    } 
    else if(token == "BG") 
    { 
     girlBoy++; 
     sampleSize++; 
    } 
    } 
    inFile.close(); 

    int percentBoyBoy = (boyBoy/sampleSize) * 100; 
    int percentGirlGirl = (girlGirl/sampleSize) * 100; 
    int percentGirlBoy = (girlBoy/sampleSize) * 100; 
    //print results of sample 
    System.out.println("Sample Size: " + sampleSize); 
    System.out.println("Two Boys: " + percentBoyBoy + "%"); 
    System.out.println("One Boy One Girl: " + percentGirlBoy + "%"); 
    System.out.println("Two Girls: " + percentGirlGirl + "%"); 
}//end of main method 
}//end of class 

ответ

0

вы должны использовать

token.equals("GG"); 

вместо

token == "GG" 
0

Ваша проблема является деление на SampleSize. sampleSize - целое число, большее любого из «boyBoy» или любых других переменных. Разделение двух целых чисел, как в «(BoyBoy/sampleSize)», приведет к результату 0, поскольку целочисленные деления приводят к целочисленным результатам и делению, например (10/100) в целых членах равно 0, (110/100) будет 1 и т.д. Таким образом, лучше делать: двойной percentGirlBoy = (girlBoy/((двойной) SampleSize)) * 100d

0

вы должны использовать переопределяется метод равно в классе Струнный где вы должны передать объект в качестве параметра. Нравится

token.equals ("BB");

Здесь будет сравнить ваше содержание, и если вы используете Equalto (==) Оператор, он просто сравнивает опорное значение как ссылки Струнный и, следовательно, всегда приходят ложные и, следовательно, «SampleSize» никогда не будет увеличиваться, по-прежнему как 0, который отвечает за метание «ArithmeticException:/by zero».

+0

Хорошо, это очень помогает! Спасибо вам за помощь! – user2922247

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