2014-11-16 1 views
1

Я работаю с простой программой цикла beginner, где я пытаюсь получить целочисленный ввод от пользователя и вычислить сумму. У меня есть простое меню, в котором пользователь может выбрать один из вариантов, первый из которых вводит число и второе, показывая сумму последних двух введенных чисел. Поэтому мне нужна программа, чтобы добавить предыдущие два введенных числа вместе. поэтому, если пользователь выбирает вариант 1, они могут ввести число, а затем возвращаться в меню, где они должны снова выбрать вариант 1 для ввода другого. опция 2 должна затем рассчитать сумму и вернуть значение. Теперь можно сказать, что пользователь вводит число после этого, последние два числа должны быть суммированы. Например.Введена сумма предыдущих двух чисел

Вход Выход второй вход (только для опции меню 1)
1 Пожалуйста, введите число от 0 до 20: 12
1 Пожалуйста, введите число от 0 до 20: 16
2 Сумма двух последних номер составляет 28
-Пожалуйста, введите число от 0 до 20: 15
2 суммы последних двух чисел 31.

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

import java.lang.*; 
import java.util.*; 
import java.text.*; 

class test { 

    public static void menu() { 
     System.out.print(" Select one of the option below\n" + 
       " 1 -  Enter a new number\n " + 
       " 2 - Show the sum of the last two number\n" + 
       " 3 - Show the current number as pluses\n" + 
       " 4 - Show the current number as centred pluses\n"); 
    } 

    public static void main(String[] args) { 
     int no = 0; 
     int sum = 0; 
     int option; 

     Scanner input = new Scanner(System.in); 

     do { 
      menu(); 
      option = input.nextInt(); 
      switch (option) { 
       case 1: 
        System.out.print("Please enter a number between 0 and 20 : "); 
        no = input.nextInt(); 
        break; 
       case 2: 
        sum += no; 
        System.out.println("The Sum of the Numbers is : " + sum); 
       default: 
        System.out.print("Invalid option"); 
      } 
     } while (option != 5); 
    } 
} 
+0

Могу ли я спросить, почему вы импортируете java.lang * и java.text *.? Потому что ни один из ваших кодов не использует их. – Charlie

+0

@Charlie Его код не использует 'java.lang. *'? Как насчет 'System' и' String'? Но нет необходимости явно импортировать эти классы. – Tom

+0

привет, я использовал те, что были в предыдущей программе, над которой я работал, я просто удалил методы класса и сохранил оттуда. – ProfessorChaos

ответ

0

sum+=no; накопится сумма всех чисел, когда-либо введенных. Вы должны сохранить последние два числа, введенные двумя переменными, и только суммировать эти два.

 int last = 0; 
    int beforeLast = 0; 
    do { 
     menu(); 
     option=input.nextInt(); 

     switch (option) { 

     case 1: 

      System.out.print("Please enter a number between 0 and 20 : " ); 
      no=input.nextInt(); 
      beforeLast = last; 
      last = no; 
      break; 
     case 2: 
      System.out.println("The Sum of the Numbers is : " + (last+beforeLast)); 

     default : 
      System.out.print("Invalid option"); 


     } 
    } while (option !=5); 
+0

Просто быстрая работа с этим кодом, итоговая сумма возвращает значение последнего введенного числа. Я напечатаю результаты на разных этапах кода, чтобы узнать, могу ли я найти ошибку. – ProfessorChaos

+0

@ProfessorChaos Я только заметил, что это было сложнее, чем нужно. Я немного упростил код. – Eran

+0

Это работает !. Спасибо. глядя на это сейчас, это выглядит просто. – ProfessorChaos

0

Вы должны сделать «нет» array с 2 номерами в нем. Когда сумма добавляется, добавьте эти 2 числа, при настройке числа проверяют количество чисел в этом массиве и в зависимости от того, где хранить номер.

Кроме того, помните, чтобы заметить «секретный» вариант 5 для выхода из программы в menu()

Нечто подобное должно работать:

int[] no=new int[2]; 

... 

case 1: 

    System.out.print("Please enter a number between 0 and 20 : " ); 
    int inNo=input.nextInt(); 
    no[0]=no[1]; 
    no[1]=inNo; 
    break; 
case 2: 
    sum=no[0]+no[1]; 
    System.out.println("The Sum of the Numbers is : " + sum); 

Позвольте мне знать, если он работает.
Счастливый кодирования :) -Charlie

+0

Ваш блок 'if/else' в' case 1' не имеет смысла. Вы инициализируете массив 'no' с размером' 2' (т. Е. 'Int [] no = new int [2];'). Как это должно быть? If (no.length == 0) 'или this' else if (no.length == 1) 'когда-либо? Часть 'else' - это все, что вам нужно. – Tom

+0

@Tom Без if-утверждения он попытается получить 'no [1]' и дать NPE, поэтому я проверил размер. Но, согласно тому, что вы сказали, размер всегда равен 2. Я исправил это, используя '== null'. Спасибо – Charlie

+0

«NullPointerException»? Можете ли вы объяснить, как инициализированный массив 'int' (а не' Integer') должен вызывать NPE? – Tom

0
case 2: 
    sum += no; 
    System.out.println("The Sum of the Numbers is : " + sum); 
    sum = no; 

assigning the value of second input in the sum variable after printing. 
0

Этот код должен работать:.

import java.util.Scanner; 
public class test { 
    public static void menu() { 
     System.out.print("Select one of the option below\n" + 
      " 1 - Enter a new number\n" + 
      " 2 - Show the sum of the last two number\n" + 
      " 3 - Show the current number as pluses\n" + 
      " 4 - Show the current number as centred pluses\n"); 
      //I cleaned this up a little bit so it looks a little better 
} 

public static void main(String[] args) { 
    int no1 = 0; //since we are only dealing with the last two digits, we don't need an array but two different number variables 
    int no2 = 0; 
    int sum = 0; 
    int count1 = 0; // counts the number of times case 1 is executed 
    int option; 

    Scanner input = new Scanner(System.in); 

    do { 
     menu(); 
     option = input.nextInt(); 
     switch (option) { 
      case 1: 
       count1 += 1; //counts the number of case 1 executed 
       System.out.print("Please enter a number between 0 and 20 : "); 
       if (count1 % 2 == 0) //if count1 is even, the input will be stored in no1... 
        no1 = input.nextInt(); 
       else 
        no2 = input.nextInt();//...else it will be stored in no2 
       sum = no1 + no2; // this is the sum of the last two numbers entered 
       break; 
      case 2: 
       System.out.println("The Sum of the Numbers is : " + sum); 
       break; // don;t forget to break the case so the default won't be reached if option = 2 
      default: 
       System.out.print("Invalid option"); 
     } 
    } while (option != 5); 
} 

}