2015-10-10 9 views
2

Таким образом, этот код запрашивает ввод либо 1 для прохода, либо 2 для отказа для десяти учеников, и он показывает ошибку, если пользователь вводит неверный номер. Логическая ошибка в этом случае, например, все 10 студентов проходят, выход должен быть «принят: 10 Failed: 0». Однако, если я введу ошибку только один раз, появится сообщение об ошибке, но выход будет " прошло: 9 не удалось: 0 «даже думал, что все 10 студентов прошли.Проект Java: количество студентов, которые прошли или не прошли? Логическая ошибка

import javax.swing.JOptionPane; 

public class pass { 

    public static void main(String[] args) { 
     int passes = 0; 
     int failures = 0; 
     int result; 

     for (int studentCounter = 1; studentCounter <= 10; studentCounter++) { 
      String input = JOptionPane.showInputDialog("Enter (1=pass, 2= fail)"); 
      result = Integer.parseInt(input); 
      if (result == 1) { 
       passes = passes + 1; 
      } else if (result == 2) { 
       failures = failures + 1; 
      } else if ((result != 1) && (result != 2)) { 
       JOptionPane.showMessageDialog(null, "Error input 1 or 2"); 

      } 
     } 

     JOptionPane.showMessageDialog(null, "Passed:" + passes + "Failed:" + failures); 
     System.exit(0); 

    } 
} 
+0

При возникновении ошибки вы не должны увеличивать значение 'studentCounter'. Самый простой способ добиться этого - сделать «studentCounter -» после диалога с ошибкой. – Thilo

+0

, поэтому ошибка должна быть вне цикла? –

+0

Прежде всего, вы должны использовать соглашения Oracle Java Code Console http: //www.oracle.com/technetwork/articles/javase/codeconvtoc-136057.html ... failures ++; проходит ++; –

ответ

0

Цикл выполнен ровно 10 раз. Но если возникает ошибка, код ни увеличивает passes ни failures, и поэтому passes + failures всегда является количество входов без сбоев и всегда < = 10.

Если вы хотите иметь ровно 10 результатов вы должны убедиться, что имеется ровно 10 правильных входных данных. Вы можете достичь этого путем увеличения счетчика результатов на правильные входы, пока он не достигнет 10:

int studentCounter = 0; 
while(studentCounter < 10){ 
    String input = JOptionPane.showInputDialog("Enter (1=pass, 2= fail)"); 
    result = Integer.parseInt(input); 
    if(result==1){ 
      passes++; 
      studentCounter++; 
    }else if(result==2){ 
      failures++; 
      studentCounter++; 
    } else { 
     JOptionPane.showMessageDialog(null,"Error input 1 or 2"); 
    } 
} 
+0

Хмм, должно быть правильно с начальным значением 0. Вы проверяли 'while (studentCounter <= 10)' в своей реализации (помните '=')? – flo

+0

Я не использовал знак равенства, и я инициализировал ноль не одну мою ошибку –

2

Правильно, поскольку 9 прошли и 0 не смогли. Ошибка не учитывается ни в одной из групп.

1

Вы можете обновить свой код, как показано ниже, чтобы удалить логическую ошибку:

import javax.swing.JOptionPane; 
public class pass{ 
public static void main(String [] args){ 
int passes=0; 
int failures=0; 
int result; 


for(int studentCounter = 1; studentCounter<=10;){ 
    String input = JOptionPane.showInputDialog("Enter (1=pass, 2= fail)"); 
    result = Integer.parseInt(input); 
    if(result==1){ 
      passes = passes + 1; 
      studentCounter++ 
    }else if(result==2){ 
      failures = failures +1; 
      studentCounter++ 
    } else { 
     JOptionPane.showMessageDialog(null,"Error input 1 or 2"); 

    } 
} 
    JOptionPane.showMessageDialog(null,"Passed:"+passes+"Failed:"+failures); 
      System.exit(0); 
} 
} 
+0

не работает –

+0

У меня есть обновленный код, он работает. – proudandhonour

1

проблема в вашей, если еще логика: увеличивает Ваш For цикл целое число в состоянии else if((result!=1)&&(result!=2)), что означает, что, например, если вы сделаете 10-кратный ввод, отличный от 1 или 2, вы получите результат, равный 0 проходам, а 0 не удалось ... но ваша петля закончилась.

Предлагаю вам дополнительно использовать Oracle Java Code Conventions. .. отказы ++; проходит ++;

1

Вы можете попробовать с ниже код. Уменьшает счетчик учащихся при недопустимом вводе.

import javax.swing.JOptionPane; 
public class pass{ 
    public static void main(String [] args){ 
int passes=0; 
int failures=0; 
int result; 

for(int studentCounter = 1; studentCounter<=10; studentCounter++){ 
    String input = JOptionPane.showInputDialog("Enter (1=pass, 2= fail)"); 
    result = Integer.parseInt(input); 
    if(result==1){ 
      passes++; 
    }else if(result==2){ 
      failures++; 
    } else if((result!=1)&&(result!=2)) { 
     studentCounter--; 
     JOptionPane.showMessageDialog(null,"Error input 1 or 2"); 

    } 
} 

    JOptionPane.showMessageDialog(null,"Passed:"+passes+" Failed:"+failures); 
      System.exit(0); 
} 
} 
Смежные вопросы