Сумма двух предыдущих введенных чисел

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

Вход Выход 2-й вход (только для пункта меню 1)
1 Введите число от 0 до 20: 12
1 Введите число от 0 до 20: 16
2 Сумма последних двух чисел равно 28.
1 Введите число от 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);
    }
}

person ProfessorChaos    schedule 16.11.2014    source источник
comment
Могу я спросить, почему вы импортируете java.lang.* и java.text.*? Потому что ни один из ваших кодов их не использует.   -  person Charlie    schedule 16.11.2014
comment
@Charlie В его коде не используется java.lang.*? А как насчет System и String? Но нет необходимости явно импортировать эти классы.   -  person Tom    schedule 16.11.2014
comment
привет, я использовал их в предыдущей программе, над которой работал, я просто удалил методы класса и сохранил оттуда.   -  person ProfessorChaos    schedule 16.11.2014


Ответы (3)


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);
person Eran    schedule 16.11.2014
comment
Только что быстро поработав с этим кодом, окончательная сумма возвращает значение последнего введенного числа. Я распечатаю результаты на разных этапах кода, чтобы посмотреть, смогу ли я найти ошибку. - person ProfessorChaos; 16.11.2014
comment
@ProfessorChaos Я только что заметил, что это сложнее, чем должно быть. Я немного упростил код. - person Eran; 16.11.2014

Вы должны сделать «нет» 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);

Дайте мне знать, если это сработает.
Приятного программирования :) -Чарли

person Charlie    schedule 16.11.2014
comment
Ваш блок if/else в case 1 не имеет смысла. Вы инициализируете массив no размером 2 (т.е. int[] no=new int[2];). Как это if(no.length==0) или это else if(no.length==1) должно быть правдой? Часть else — это все, что вам нужно. - person Tom; 16.11.2014
comment
@Tom Без оператора if он попытался бы получить no[1] и дать NPE, поэтому я проверил размер. Но, согласно тому, что вы сказали, размер всегда равен 2. Я исправил это, используя ==null. Спасибо - person Charlie; 16.11.2014
comment
NullPointerException? Можете ли вы объяснить, как инициализированный массив int (а не Integer) должен вызывать NPE? - person Tom; 16.11.2014
comment
@Tom Извините за мою ошибку, я думал, что int[] совпадает с Integer[] и поэтому не имеет значения по умолчанию. Я отредактирую свой код. Спасибо - person Charlie; 16.11.2014
comment
@Charlie Чарли, я еще не изучал массивы в java. Но как только я это сделаю, я дам это назад, спасибо в любом случае. - person ProfessorChaos; 16.11.2014

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

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);
}

}

person ljeabmreosn    schedule 16.11.2014