Java, Suma ciągu liczba

0

robie sobie zadania Jana Kozaka i mam błąd w 2 zadaniu z 2 zestawu.
w pętli for zamiast wyniku 60 wyskakuje mi 40, nie mam pojecia czemu

pomoze ktos

//2. Napisać program pobierający od użytkownika dwie liczby całkowite A oraz B,
// A < B, a następnie wyznaczający sumę ciągu liczb od A do B, czyli sumę ciągu
// (A, A + 1, . . . , B). Obliczenia należy wykonać trzykrotnie stosując kolejno pętle:
// while, do-while, for.
// Przykład:
// Dla A = 4 i B = 11 program powinien wyświetlić:
// 60
// 60
// 60

import java.util.Scanner;

public class Ćwiczenie2_2 {
    public static void main(String[] args) {

                   System.out.print("Podaj pierwsza liczbe");
                   int liczba;
                   Scanner odczyt = new Scanner(System.in);
                   liczba = odczyt.nextInt();

                      int liczba1 = 0;
     do{

         System.out.print("Podaj druga liczbe, musi być większa od 1 ");

         Scanner odczyt2 = new Scanner(System.in);
         liczba1 = odczyt2.nextInt();
     }
         while(liczba1<liczba);



         int suma = 0;
          int a = 0;
      for(a=0;liczba<=liczba1;a++)
          {
              liczba = liczba+a;
              suma =  suma + liczba;


      }
        
                 System.out.print(suma);

    }
}
0

@ JMarcin - pętla będzie się wykonywać, dopóki nie dostanie prawidłowej liczby.

Parę linijek niżej napiszę Ci rozwiązanie, ale póki co tam nie patrz i spróbuj skorzystać z podpowiedzi: Dodaj w pętli for wypisywanie zmiennej liczba i zobacz co się wypisuje na ekran.

Rozwiązanie:

Zwiększając w każdym obiegu pętli for licznik a, dodajesz do sumy kolejno: liczba, (liczba)+1, (liczba+1) +2, (liczba+1+2)+3 itd... (4+5+7+10+14 = Twoje 40)

Po drugie, zwiększając liczbę, zanim dodasz ją do sumy, robisz błąd przy ostatniej iteracji:
Gdy dojdziesz już do obiegu pętli gdzie dodasz do sumy 11, pętla sprawdzi twój warunek liczba<=liczba1 i wykona jeszcze jedną iterację dodając 12!

Prawidłowa pętla for:

 
for(a=0;liczba<=liczba1;a++) {
     suma =  suma + liczba;
     liczba++;
} 

Jak widzisz licznik a jest tu zbędny, lecz jeśli zadanie wymaga użycia pętli for, można zrobić to bardziej elegancko w ogóle go nie używając.

 
for(;liczba<=liczba1;) {
     suma =  suma + liczba;
     liczba++;
} 

Edit: "suma = suma + liczba;" możesz zastąpić "suma += liczba;" :)

 
for(;liczba<=liczba1;) {
     suma += liczba;
     liczba++;
} 

Pozdrawiam
Johnny_

0

Może mi ktoś powiedzieć jak jest u mnie z czytelnością kodu, można to napisać krócej (szybciej)?

0

@ >> Również należy kolegę poinformować że rozwiązanie takiego zadania za pomocą pętli jest świadectwem kiepskiego programisty

robię tak jak kazali w zadaniu

  1. Napisać program pobierający od użytkownika dwie liczby całkowite A oraz B,
    A < B, a następnie wyznaczający sumę ciągu liczb od A do B, czyli sumę ciągu
    (A, A + 1, . . . , B). Obliczenia należy wykonać trzykrotnie stosując kolejno pętle:
    while, do-while, for.
    Przykład:
    Dla A = 4 i B = 11 program powinien wyświetlić:
    60
    60
    60
0

skończyłem, może ktoś napisać czy ten kod jest logiczny i czytelny, co mogę poprawić?

od razu mówię ze nie jest to kod na zaliczenie czy coś takiego, tylko dla mnie do nauki , pozdrawiam

import java.util.Scanner;

public class Ćwiczenie2_2 {
    public static void main(String[] args) {

                   System.out.print("Podaj pierwsza liczbe");
                   int liczba;
                   Scanner odczyt = new Scanner(System.in);
                   liczba = odczyt.nextInt();

                      int liczba1 = 0;
     do{

         System.out.print("Podaj druga liczbe, musi być większa od 1 ");

         Scanner odczyt2 = new Scanner(System.in);
         liczba1 = odczyt2.nextInt();
     }
         while(liczba1<liczba);
        int suma = 0;
        int a = 0;
        int liczba3 = liczba;
        int liczba4 = liczba;

     while(liczba3<=liczba1)
      {
             suma = suma + liczba3;
             liczba3++;

      }
        System.out.println(suma);
        suma = 0;
         a = 0;

      do{
          suma = suma + liczba4;
          liczba4++;
      }
      while(liczba4<=liczba1);
        System.out.println(suma);

        suma = 0;


        for(a=0;liczba<=liczba1;a++) {
            suma =  suma + liczba;
            liczba++;
        }

        System.out.print(suma);

    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1