2016-10-11 3 views
1

У меня есть задача заполнить массив, используя контрольный цикл whileinel (я должен использовать JOptionPane).Заполнение массива 1D без петли в java

int score[] = new int [10]; 
int x = 0; 
int size = 0; 
x = Integer.parseInt(JOptionPane.showInputDialog("Please enter the score")); 

while (x != -1){ 
score[size]= x ; 
x = Integer.parseInt(JOptionPane.showInputDialog("Please enter the score")); 
size++;  

} 
System.out.println(score[0]+score[1]+score[2]+score[3]+score[4]); 


} 

Это мой текущий код, результат от Println 15, если я вход: 1, 2, 3, 4, 5, -1. Не могли бы вы помочь мне найти то, что я сделал? Я новый пользователь java.

+0

use array.length with for loop –

+0

Вы должны посмотреть здесь. http://stackoverflow.com/questions/576855/how-do-i-fill-arrays-in-java – Redwan

+0

@Redwan Я еще не видел этот вопрос Я не нашел ответа в нем – hDDen

ответ

0

Ваш код может обрабатывать только определенное количество баллов, которое 5. Это даст вам нонсенс менее 5 баллов и неправильный ответ на 6 до 10 баллов, и ArrayIndexOutOfBoundsException более 10 баллов. Поскольку вы используете массив из фиксированной длины из 10 элементов и вручную суммируете первые 5 элементов. Вам лучше использовать динамический список для хранения пользовательского ввода и использовать цикл for для обработки суммирования.

Помимо этой важной проблемы, код, который обрабатывает ввод пользователя, повторяется дважды, и он не обрабатывает нецелые строки. Вы должны поместить этот код в метод и дать ему собственное имя.

import javax.swing.*; 
import java.util.ArrayList; 
import java.util.List; 

public class Filling1DArray { 

    /** 
    * Ask the user to enter an integer 
    * @return The integer the user entered or -1 if the input is not an integer 
    */ 
    private static int nextScore() { 
     try { 
      return Integer.parseInt(JOptionPane.showInputDialog("Please enter the score (or -1 to stop)")); 
     } catch (NumberFormatException e) { 
      return -1; 
     } 
    } 

    public static void main(String [] args) { 

     // Dynamic list to hold the user input 
     List<Integer> scores = new ArrayList<>(); 

     // Get user input until she enters -1 or some non-integer 
     int score; 
     while ((score = nextScore()) != -1) 
      scores.add(score); 

     // Compute the sum using stream API 
     System.out.println(scores.stream().reduce((a, b)->a+b).orElse(-1)); 

     // Or a simple ranged-for 
     int sum = 0; 
     for (int s : scores) sum += s; 
     System.out.println(sum); 
    } 
} 
0
int sent=0; 
while(sent!=1){ 
    //append to array 
    //do something which may change the value of sent 
} 
+0

, поэтому я должен сделать что-то вроде 'double sent = 0 double array [] = новый двойной массив [10] sent = Double.parseDouble (JOptionPane.showInputDialog (" ... "); while (sent! = 1) { отправлено + = массив [ ]; послал = Double.parseDouble (JOptionPane.showInputDialog («...»); } ' – hDDen

+0

Не совсем, я думаю, что это могло бы быть гораздо проще понятие, чем вы предполагаете Подумайте о переменной дозорного в виде?. флаг, единственная цель которого - позволить петле узнать, когда прекратить работу. Например, если (массив содержит все е значения, которые я хочу) {sent = 1}, поэтому условие «while» больше не будет выполнено. – kemika

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