Редактиране на изключение e за улавяне на букви, а не на десетични знаци

Пиша програма, която приема 10 числа с плаваща запетая като вход. Въпреки това, когато въвеждам десетичен знак, програмата ми изпраща грешка. Въпросът ми е: как бих редактирал моето текущо изключение за опит за улавяне, за да хващам само букви и т.н., и да разреша въвеждането на десетични знаци (и след това да ги съхранявам в масив). Освен това, независимо от този проблем, моята програма също извежда средната стойност много пъти и винаги казва, че тя е равна на 0.

По-долу е програмата:

import java.util.Scanner;

публичен клас Средно {

public static void main(String[] args) {

    new Average().average(new double[10]);
}

public double average(double[] number) {
    Scanner scanner = new Scanner(System.in);

    int x = 0;
    double sum = 0;
    double[] numberList = new double[10]; //array to hold all numbers
    double[] largerList = new double[10]; //array to hold numbers greater than the average


    int numberIndex = 0;
    int largerIndex = 0;



    System.out.printf("Please enter 10 floating-point numberes.\nIf more than 10 values are entered, the numbers following 10 are ignored.\nIf less than 10 numbers are entered, the program will wait for you to enter 10.\n");

    for (int i = 0; i < 10; i++) {


        try { //try catch exception to catch decimal inputs as well as more /less than 10 integers
            x = scanner.nextInt();
            sum += numberList[x]; //add up all inputs to find sum
        } catch (Exception e) {
            System.out.println("Invalid input! Please reenter 10 integer values.");
            scanner = new Scanner(System.in);
            i = -1;
            numberIndex = 0;
            largerIndex = 0;
            numberList = new double[10];
            largerList = new double[10];
            continue;
        }
    }

    for (int i = 0; i < number.length; i++) {
        sum = sum + number[i];
        double average = sum / number.length;

        //return average;

        if (x > average) {
            largerList[largerIndex] = x; //add negative input to negativeList array
            largerIndex = largerIndex + 1;

        }
        System.out.println("Average value of your input is: " + average);
        System.out.println();

    }



    for (int i = 0; i < largerIndex; i++) {
        System.out.println(largerList[i]);
    }
    return 0;





}

}


person user3053348    schedule 10.01.2014    source източник
comment
Вие не посочвате кои стойности catch, вие посочвате само типа изключение. Ако искате изключения да бъдат хвърлени (или да не бъдат хвърлени) при определени обстоятелства, трябва да подредите кода за предварително тестване, ако е необходимо, преди изключението да бъде хвърлено.   -  person Hot Licks    schedule 10.01.2014


Отговори (2)


Използвате функцията nextInt(), която връща само int. Ints не могат да съдържат десетични знаци. Консултирайте се с API и вместо това разгледайте методите nextFloat() и nextDouble().

person Kevin Workman    schedule 10.01.2014

За вашия проблем със средната стойност, вашият израз за печат е във for цикъл, така че ще бъде изпълнен number.length пъти. Преместете операторите за печат извън цикъла. Ще ви трябва също така декларацията на средната променлива да бъде извън цикъла. Освен това трябва да имате нужда само от цикъла, за да изчислите сумата, не е необходимо да изчислявате средната стойност всеки път

double average;
for(/*loop conditions*/)
{
    sum = sum + number[i];
}
average = sum / number.length;
System.out.println("Average value of your input is: " + average);
System.out.println();
person Java Devil    schedule 10.01.2014