Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Java] Массивы


Автор: Вероника 6.10.2009, 13:29
помогите, пожалуйста :(

пользователю необходимо ввести общее количество дождя за каждый месяц, например, 1. месяц пользователь вводит число, 2. месяц, пользователь вводит число итд. после введения 12ого месяца, программа выводит средний дневной обьем дождя за год и потом, программа у пользоватeля спрашивает, за какой месяц он хотел бы увидет среднюю дневную температуру, пользователь вводит число месяца и получает среднюю дневнуютемпереатуру за выбранный месяц. 

Как изменить этот код, что бы он делал эти функции? 

Код

import java.util.*;
public class Rainfall {
    Scanner in=new Scanner(System.in);    
    public void initRain(double rain[][]) {
        for (int month = 1; month < rain.length; month++)
            for (int day = 1; day < rain[month].length; day++)
                rain[month][day] = Math.random() * 2.0;
    } 
    public double avgDailyRain(double rain[][]) {
        double total = 0;
        for (int month = 1; month < rain.length; month++)
            for (int day = 1; day < rain[month].length; day++)
                total += rain[month][day];
        return total/365;
    } 
    public double avgRainForMonth(double monthRain[], int nDays) {
        double total = 0;
        for (int day = 1; day < monthRain.length; day++)
            total = total + monthRain[day];
        return total/nDays;
    }
    public static void main(String args[]) {
        double rainfall[][] = new double[13][32];
        Rainfall data = new Rainfall();
        data.initRain(rainfall);
        System.out.println("average daily rainfall is " +  data.avgDailyRain(rainfall));
        System.out.println("average daily rainfall for May is " +  data.avgRainForMonth(rainfall[5],31));
    } 
}

Автор: ivanovpv 6.10.2009, 16:39
Цитата(Вероника @  6.10.2009,  13:29 Найти цитируемый пост)
помогите, пожалуйста :(

Добрый я сегодня...
Код

    public static void main(String args[])
    {
        double rainfall[][] = new double[12][31];
        double monthrain[] = new double[12];
        Rainfall data = new Rainfall();
        data.initRain(rainfall);
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String input = "";
        Double tmp_rain;
        try
        {
            for (int i = 0; i < monthrain.length; i++)
            {
                System.out.print("Введите количество осадков за " + (i + 1) + "-й месяц:");
                input = in.readLine();
                tmp_rain = new Double(input);
                monthrain[i] = tmp_rain.doubleValue();
            }
        }
        catch (Throwable th)
        {
            System.err.println("Неверный формат числа!");
            th.printStackTrace();
        }
        System.out.println("average daily rainfall is " + data.avgDailyRain(rainfall));
        System.out.println("average daily rainfall for May is " + data.avgRainForMonth(rainfall[5], 31));
    }


Да, и нумерация индексов в Java начинаются с "0"

Автор: Вероника 6.10.2009, 16:50
ivanovpv, спасибо! А скажите пожалуйста, как правильно изменить эту часть и rain[month][day] = Math.random() * 2.0;, что бы программа читала среднее количество дневных осадков, которые вводит пользователь, и по этому количеству считала среднее за год? :(

Код

    public void initRain(double rain[][]) {
        for (int month = 1; month < rain.length; month++)
            for (int day = 1; day < rain[month].length; day++)
                rain[month][day] = Math.random() * 2.0;
    } 

Автор: ivanovpv 6.10.2009, 17:10
Вероника, 

Math.random() возвращает значение от 0 до 1. То есть код должен быть примерно такой:

Код

public void initRain(double rain[][], monthrain[]) 
   {
    double avgMonth;
        for (int month = 0; month < rain.length; month++)
        {
         avgMonth=0;
            for (int day = 0; day < rain[month].length-1; day++)
               {
                rain[month][day] = 2*Math.random() * monthrain[month]; //пытаемся масштабировать на среднее значение
                avgMonth+=rain[month][day];
               }
            rain[month][rain[month].length-1]=monthrain[month]*rain[month].length-avgMonth; //вычисляем последнее значение так чтобы выйти на среднее
            //правда здесь можно наскочить на отрицательное значение - так что смотрите сами как модифицировать код.
        }
    } 



Автор: Вероника 6.10.2009, 17:24
а как можно заменить Math.random() на то, что пользователь вводит, т.е. убрать из кода и подавать вместо этого данные, которые пользователь вводит? я все сложила таким образом, вводить количество осадков можно, но среднее не считает, пишет 0 :(
Код

import java.util.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Rainfall {
   
    public void initRain(double rain[][], double monthrain[]) 
    {
     double avgMonth;
         for (int month = 0; month < rain.length; month++)
         {
          avgMonth=0;
             for (int day = 0; day < rain[month].length-1; day++)
                {
                 rain[month][day] = 2*Math.random() * monthrain[month]; 
                 avgMonth+=rain[month][day];
                }
             rain[month][rain[month].length-1]=monthrain[month]*rain[month].length-avgMonth;       
         }
     } 
    public double avgDailyRain(double rain[][]) {
        double total = 0;
        for (int month = 1; month < rain.length; month++)
            for (int day = 1; day < rain[month].length; day++)
                total += rain[month][day];
        return total/365;
    } 
    public double avgRainForMonth(double monthRain[], int nDays) {
        double total = 0;
        for (int day = 1; day < monthRain.length; day++)
            total = total + monthRain[day];
        return total/nDays;
    }
    public static void main(String args[])
    {
        double rainfall[][] = new double[12][31];
        double monthrain[] = new double[12];
        Rainfall data = new Rainfall();
        data.initRain(rainfall);
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String input = "";
        Double tmp_rain;
        try
        {
            for (int i = 0; i < monthrain.length; i++)
            {
                System.out.print("enter the amount of rainfall in " + (i + 1) + "month");
                input = in.readLine();
                tmp_rain = new Double(input);
                monthrain[i] = tmp_rain.doubleValue();
            }
        }
        catch (Throwable th)
        {
            System.err.println("wrong format of the number!");
            th.printStackTrace();
        }
        System.out.println("average daily rainfall is " + data.avgDailyRain(rainfall));
        System.out.println("average daily rainfall for May is " + data.avgRainForMonth(rainfall[5], 31));
    }}

Автор: powerOn 6.10.2009, 19:33
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: Вероника 6.10.2009, 20:11
я разобралась, где что надо было писать и что убирать, спасибо за помощь, у меня получилось smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)