2013-03-26 4 views
-2

Я работаю над этим несколько дней, и я очень расстроен. Это мой первый курс на Java, поэтому, пожалуйста, несите меня по незнанию. Я должен написать программу, содержащую массив из 10 классов, введенный пользователем, и я вычисляю среднее значение. В частности, у меня проблемы с тем, что ниже.Идентификация, если пользователь нажимает <enter>

Вы не должны читать удвоенные числа от пользователя, вы должны прочитать строку. Вот процесс:

Чтение строки от пользователя обрезать строку и получить длину , если длина < 1, то пользователь попал, и вы получите из если длина> 0, то вы преобразовать строку в a double using

d =Double.parseDouble(S); 

До сих пор у меня только это. На прошлой неделе я добавлял и удалял много кодирования. И я все еще не могу заставить его работать. Любая помощь приветствуется!

import java.util.*; 
import java.io.*; 

public class Arrays { 

    public static void main(String[] args) { 

     double d = 0; 
     final int SIZE = 10; 
     Scanner reader = new Scanner(System.in); 
     String[ ] grades = new String[SIZE]; 

     System.out.println("Please enter up to 10 grades."); 

     for (int i = 0; i < grades.length; i++){ 
      System.out.print("Grade " + (i + 1) + ": "); 
      grades[i] = reader.nextLine(); 
     } 

     System.out.println("\nNumber of valid grades entered: " + grades.length); 
    } 
} 
+3

Можете ли вы рассказать нам, каков ваш точный вопрос? Вы получаете сообщение об ошибке? Если да, то на какой строке? –

+0

Ваш код работает для меня - после ввода 10 значений, он печатает «Количество введенных значений: 10» –

+1

Вы не столько обнаруживаете нажатие enter, сколько ожидаете определенные виды токенов, используя ваш сканер, а nextLine, nextInt, nextDouble, и т. д., которые будут ограничены нажатием клавиши ввода. – Patashu

ответ

0

Вы можете попробовать его следующим способом

int correctGrades=0; 
double[] grades=new double[SIZE]; //Create array of double instead of String 
for (int i = 0; i < SIZE; i++){ 
    System.out.print("Grade " + (i + 1) + ": "); 
    String str=reader.nextLine(); 
    if(str.length() > 0){ // If length is greater than 0 then its correct grade 
     grades[i]=Double.parseDouble(str); 
     correctGrades++; 
    } 
} 
System.out.println("\nNumber of valid grades entered: " + correctGrades); 
2

Попробуйте

for (int i = 0; i < grades.length;){ 
    System.out.print("Grade " + (i + 1) + ": "); 
    String str = reader.nextLine(); 
    if(str.trim().length() > 0){ 
     try{ 
      grades[i] = Double.parseDouble(str); 
      i++; 
     }catch(NumberFormatException e){ 
      e.printStackTrace(); 
     } 
    } 
} 
System.out.println("\nNumber of valid grades entered: " + i); 

ИМХО я думаю, что классы должны быть массивом double т.е.

double[] grades=new double[SIZE]; 
+1

+1 для добавления исключения NumberFormatException – Lakshmi

0

В соответствии с я понимаю, это должно быть для вас петля

for (int i = 0; true; i++) { 
     System.out.print("Grade " + (i + 1) + ": "); 
     grades[i] = reader.nextLine(); 
     if (grades[i].equals("")) { 
     break; 
     } 
     //check for number format exception if user enters invalid input 
     try { 
     d = Double.parseDouble(grades[i]); 
     } 
     catch (NumberFormatException exception) { 
     exception.printStackTrace(); 
     } 
    } 
    System.out.println("The value of double entered is : " + d); 
    } 

Здесь вы запускаете цикл для бесконечного количества раз, но с каждым циклом вы проверяете ввод пользователя. Теперь, если пользователь вводит пустую строку, вы выходите из цикла, используя оператор break.

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