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


Автор: Вероника 5.10.2009, 14:05
Как сделать так, что бы в этой программе пользователь сам мог вводит данные о обьеме дождя в консольном окне? Помогите, пожалуйста, разобраться.. :(

Код

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));
    } 
}

Автор: duk 5.10.2009, 14:53
Код

double rainfall[][] = new double[13][32];


Я так понимаю, что в этой матрице хранятся данные об объеме дождя. Коль так, то я не уверен, что пользователь захочет ввести 416 чисел. На много лучше, читать данные из файла.

Автор: Вероника 5.10.2009, 15:08
duk, пользователю необходимо ввести общее количество дождя за каждый месяц, например, 1. месяц пользователь вводит число, 2. месяц, пользователь вводит число итд. после введения 12ого месяца, программа выводит средний дневной обьем дождя за год и потом, программа у пользоватeля спрашивает, за какой месяц он хотел бы увидет среднюю дневную температуру, пользователь вводит число месяца и получает среднюю темпереатуру за выбранный месяц. с io.console это не работает, как такое сделать с scanner?

Автор: duk 5.10.2009, 15:24
Код

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int i = scan.nextInt();
  }
}

Автор: LSD 5.10.2009, 15:25
Цитата(Вероника @  5.10.2009,  15:08 Найти цитируемый пост)
с io.console это не работает,

Что именно не работает?
Код

String s = console.readLine("Enter month number 1-12: ");
int month = Integer.parseInt(s);


Добавлено через 57 секунд
И кстати где запускаешь? В IDE Console конечно не будет. Для этого надо запускать из командной строки.

Автор: duk 5.10.2009, 15:27
LSD, смотря в какой. В некоторых есть такое окошко (Eclipse, к примеру).

-------------------------
Извиняюсь, ошибся.

Автор: Вероника 5.10.2009, 15:40
запускаю в эклипсе и там io.console нельзя использовать.. как сделать, что бы можно было вводит обьем дождя в каждом месяце и потом выводит обьем за какой то месяц? как правильно изменить 
Код
 rain[month][day] = Math.random() * 2.0;
, что бы не рандомно программа брала, а то что пользователь ввел??

Автор: duk 5.10.2009, 16:11
Вероника, пользуйся тогда Scanner. Eclipse его точно ловит

Автор: Вероника 5.10.2009, 20:02
duk, но, как это реализовать правильно?

Автор: duk 5.10.2009, 22:29
Что конкретно??? Если про ввод данных с клавиатуры, то я пример написал (см. выше). Для того, чтоб ввести необходимые данные, нужно продублировать необходимое количество раз строку scan.nextInt():

Код

  int val1 = scan.nextInt();
  int val2 = scan.nextInt();
  ...
  int valn = scan.nextInt();

Автор: Вероника 6.10.2009, 10:57
duk, а как это сделать:

Цитата

как сделать, что бы можно было вводит обьем дождя в каждом месяце и потом выводит обьем за какой то месяц? как правильно изменить 
Код

rain[month][day] = Math.random() * 2.0;

, что бы не рандомно программа брала, а то что пользователь ввел??
 ?

Автор: duk 6.10.2009, 17:08
Тут одно замечание и один вопрос. 
Замечание: массивы нумеруются начиная с 0. Начинать использовать массив с 1-го элемента, а не с нулевого неправильно хотя бы из соображений экономии ресурсов и корректности представления кода.

Вопрос: взгляни на массив (вернее на его размерность), который передается методу initRain и на то, как он заполняется. Отвечу сразу -- он заполняется полностью (все 372 элемента - нулевые откидываем); будет ли пользователь вводить 372 значения???

Код

 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;
 } 


Код

 double rainfall[][] = new double[13][32];
  Rainfall data = new Rainfall();
  data.initRain(rainfall);


Если все-таки будет вводить то:
Код

import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    double rain[][] = new double[13][32];
    for (int month = 1; month < rain.length; month++)
            for (int day = 1; day < rain[month].length; day++)
                rain[month][day] = scan.nextDouble();
    
  }
}

Автор: Вероника 6.10.2009, 17:44
duk, нет, пользователь не будет вводить так много элементов, и если он не будет, то как изменить код тогда?

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

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

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

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