2016-01-22 3 views
1

У меня есть проект класса, в котором у нас есть два массива (высокий и низкий), которые мы будем хранить при высоких и низких температурах на каждый день в течение месяца. Нам нужно иметь номер, который необычен, поэтому, если человек, вводящий информацию в массивы, забыли занять временное значение в течение дня, это будет номер по умолчанию (510 - это то, что я выбрал). Так что у меня в настоящее время есть программа, которая печатает день, но все температуры 510. Может кто-нибудь объяснить мне, что мне нужно сделать для цикла while, чтобы информация попала в правильные массивы с высоким и низким? Также есть способ ничего не вводить (если человек, регистрирующий температуру, забыл принять температуру для максимума) и останется ли он на 510 градусов?Как использовать цикл while, чтобы вводить пользовательский ввод в массив, сохраняя неизмененные номера

import java.util.Scanner; 

импорт javax.swing.JOptionPane;

общественного класса Погода {

public static void main(String[] args) { 
    // TODO Auto-generated method stub 



    int [] high = new int[30]; 
    int [] low = new int[30]; 
    //switch to 32 
    Init (high); 
    Init(low); 

    Report(low,high); 
    LoadData(low,high); 
    Report(low, high); 
} 
public static void Init(int A[]) 
{ 
    for(int i = 0; i < A.length; i++) 
    { 
     A[i] = 510; 
    } 
} 

public static void Report(int[] H, int[] L) 
{ 
    System.out.println("Day High Low"); 

    for(int i = 0; i < H.length; i++) 
    { 
     System.out.println(i + "  " + H[i] + "  " + L[i]); 
    } 
} 
public static void LoadData(int[] H, int[] L) 
{ 

    int day = 0; 
    while(day <= 30) 
    { 


     int high = Integer.parseInt(JOptionPane.showInputDialog("please enter the high")); 
     int low = Integer.parseInt(JOptionPane.showInputDialog(" Please enter the low")); 

     H[day] = high; 
     H[day] = low; 
     day++; 
     } 
} 

}

+0

Оно не прыгает на меня, но я могу предложить добавить некоторые отладочные строки после() линий Integer.parseInt? Попробуйте что-то вроде: 'int high = Integer.parseInt (JOptionPane.showInputDialog (« пожалуйста, введите высокий »));' 'int low = Integer.parseInt (JOptionPane.showInputDialog (« Пожалуйста, введите низкий »)); 'System.out.println (« День: »+ день +« высокий: »+ высокий +« низкий: »+ низкий);' И посмотреть, что он распечатывает –

ответ

0

Вы писали

while(day <= 30) 
{ 


    int high = Integer.parseInt(JOptionPane.showInputDialog("please enter the high")); 
    int low = Integer.parseInt(JOptionPane.showInputDialog(" Please enter the low")); 

    H[day] = high; 
    H[day] = low; 
    day++; 
    } 

выглядеть у вас нет Try/уловы для обработки исключений, и вы писали H[day] = high; и H[day] = low; так низко массив останется 510 для всех элементов, все время.
вы можете исправить это просто используя попробовать уловы.

Примечание: если длина вашего массива равна 30, вы можете получить доступ к его элементам с индексами между 0 to 29, поэтому условие вашего цикла while while(day <= 30) неверно.

использовать этот код:

int day = 0; 
    while (day < 30) { 

     try { 
      int high = Integer.parseInt(JOptionPane.showInputDialog("please enter the high")); 
      H[day] = high; 
     } catch (HeadlessException | NumberFormatException | NullPointerException e) { 
     } 

     try { 

      int low = Integer.parseInt(JOptionPane.showInputDialog(" Please enter the low")); 
      L[day] = low; 

     } catch (HeadlessException | NumberFormatException | NullPointerException e) { 
     } 

     day++; 
    } 
+0

Не могли бы вы объяснить, что они делают? HeadlessException | NumberFormatException | NullPointerException e "для моего кода, чтобы я знал в будущем. Благодаря! – Drizzy

+0

, когда вы используете 'parseInt (string)' it throws 'NumberFormatException', поэтому вы должны поймать его, чтобы избежать сбоев в вашем приложении, когда вы используете' JOptionPane.showInputDialog (...) 'он выдает' HeadlessException', поэтому вы должны поймать Это .в это время 'NullPointerException' будет неточно в вашем коде, вы можете удалить его. –

+0

Код по-прежнему работает, когда я избавляюсь от «HeadlessException», почему мне это нужно для «JOptionPane.showIputDialog()»? Когда я посмотрел документацию оракула, я не совсем понял, что это значит. – Drizzy

0

Я попробовал ваш код и он почти работает отлично.

У вас есть две ошибки здесь:

int day = 0; 
while(day <= 30) 
{ 
    int high = Integer.parseInt(JOptionPane.showInputDialog("please enter the high")); 
    int low = Integer.parseInt(JOptionPane.showInputDialog(" Please enter the low")); 

    H[day] = high; 
    L[day] = low; 
    day++; 
} 

ИНТ [] массив был инициализирован как int[30] поэтому содержит только 30 элементов, поскольку состояние Вашего цикла является день < = 30, это будет на самом деле пытаются введите 31-й элемент, который будет увеличивать и исключать. Если я изменю условие на day < 30, ваша программа сообщит о температуре должным образом.

Ваша другая ошибка состоит в том, что вы назначаете низкие и высокие в том же массив, просто измените H[day] = low; на L[day] = low;

Для требования «пустой вход», я рекомендую изменение цикла к для цикла:

for(int day = 0; day < H.length; day++) { 
    String low, high; 

    high = JOptionPane.showInputDialog("please enter the high"); 
    low = JOptionPane.showInputDialog(" Please enter the low"); 

    if(high.equals("") || low.equals("")) 
    continue; 

    H[day] = Integer.parseInt(high); 
    L[day] = Integer.parseInt(low); 

} 

Что делает этот код, если пользователь вводит пустую строку, он пропускает остальную часть цикла и переходит к следующему циклу, фактически оставляя значение по умолчанию нетронутым.

0

Использование попытаться поймать, вот пример того, что вы можете сделать:

while(day < 30) 
{ 
    int highTemp = 0; 
    int lowTemp = 0; 
    String high = JOptionPane.showInputDialog("please enter the high"); 
    String low = JOptionPane.showInputDialog(" Please enter the low"); 
    try { 
     highTemp = Integer.parseInt(high); 
    } catch(NumberFormatException e){ 
     highTemp = 510; 
    } 
    try { 
     lowTemp = Integer.parseInt(low); 
    } catch(NumberFormatException e){ 
     lowTemp = 510; 
    } 
    H[day] = highTemp; 
    L[day] = lowTemp; 
    day++; 
} 

В основном то, что происходит здесь вход первого берется в виде строки, то программа пытается разобрать его. Если произошел сбой (например, пустой ввод), то он по умолчанию сделает значение 510.

Пожалуйста, обратите внимание на ошибки в коде условия в то время:

До:

while(day <= 30) 

После

while(day < 30) 

Если вы сделаете это '< =», то будет исключение из массива за пределы, так как ваши температурные массивы имеют длину 30 (это означает, что последнее индексированное значение имеет индекс 29)

Кроме того, вы не изменили массив значений температуры назначенные здесь:

Перед:

H[day] = highTemp; 
H[day] = lowTemp; 

После:

H[day] = highTemp; 
L[day] = lowTemp; 

Вы только наиважнейшая свой массив присвоение значения, если вы назначаете низкий и высокий темп как для массива с высокими темпами.

Кроме того, в вашем 'государственной статической силы основных (String [] арг) {}'

До:

Report(low, high); 
LoadData(low, high); 
Report(low, high); 

После:

Report(high, low); 
LoadData(high, low); 
Report(high, low); 

Ваши методы требуют высокой сначала, а не низкий. В вашем коде вы назначаете низкую температуру к высокой температуре.

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