Code tính tổng của các số nhập vào không ra kết quả

ĐỀ BÀI : Write a program that allows you to enter unlimited numbers (one number at a time) until you enter 0. Then print out the total value of the enter numbers.

void bm8(){
    boolean h = true;
    int i = 0;
    int sum = 0;
    int q;

    ArrayList<Integer> s = new ArrayList<Integer>();
    
    while (h) {
        Scanner t = new Scanner(System.in);
    
        q = t.nextInt();
        if (q < 10){ 
            s.add(q);
        }
    
        i++;
        
        if (q == 0) {
            h = false;
            for(int j = 0; j < i; j++) {
                sum = sum + s.get(j);
            }
        }
    }
      
    System.out.println("sum ="+ sum);
}

Cảm ơn bài viết của bạn :joy::joy:

1 Like

Sao lúc mà nhập số ấy , bạn k cộng nó vô luôn , đỡ phải chạy vòng lặp tính sum :stuck_out_tongue:

mình cũng thử rồi và không được bạn ạ

ý tưởng là:

  • Chạy vòng lặp while khi số nhập vào khác 0
  • Nhập vào phát cộng vào tổng luôn
  • In tổng ngoài vòng while
    => Không cần : ArrayList, biến boolean h, biến chạy i, câu if check = 0, vòng for tính tổng
  • Bạn lưu ý cách đặt tên biến

Hazzz, sao bạn cứ phải làm to vấn đề lên vậy @@ Với bài này thì chỉ cần theo Logic sau :

  • Chạy hàm while() đến khi số nhập vào == 0
  • Mỗi lần nhập vào thì cộng tổng luôn, khỏi cần cho vào ArrayList
  • Khi nào nhập vào bằng không thì in ra tổng

Việc bạn làm bài toán này trở nên khó khăn khiến cho code dễ gặp phải bug và người khác đọc rất khó hiểu. Với lại cũng nên xem lại cách mà bạn fomart code thì nó hơi lung tung :wink: Cố sửa nhé !


Còn về bug trong đoạn code kia thì là do đoạn

if (q < 10) 
{
   s.add(q);
}

Tức là khi số nhập vào >= 10 thì sẽ không được add vào ArrayList nhưng mà lúc đó đoạn i++; vẫn được chạy. Nên là sẽ bị quá giới bạn của ArrayList ==> Sinh ra lỗi: java.lang.IndexOutOfBoundsException. Với cả bạn hoàn toàn có thể dùng hàm .size() của ArrayList để lấy ra số lượng phần tử trong ArrayList nhé :wink:

2 Likes

những đề bài nó bắt nhập 0 ra luôn kết quả mà b ?

giả sử nhập 12350 thì làm sao để nó biết mình nhập 0 vào ? bạn có thể code sơ qua cho mình hiểu được không

Void bm8()
{
    Scanner t = new Scanner(System.in);
    int p = 0, Sum = 0;
    do {
        p = t.nextInt();
        Sum+= p;
    } while (p != 0);
    System.out.println("Sum = " + Sum);
}

Đoạn do while sẽ thực hiện đến khi người dùng nhập số 0 như bạn nói.

1 Like

nếu làm như bạn thì bạn hiểu sai ý của mình rồi ! ý của mình khi mình nhập số 12530 ấy thì chỉ nhập 1 lần khi đến số 0 thì nó sẽ tự sum = 1+2+5+3+0 chứ không phải là nhập lần lượt các số vào

Bài này mình rối ở chỗ khi nhập vào thì đến lúc nhập số 0 nó tự động dừng kiểu như giới nhập từ bàn phím vậy nên mình mới dùng arraylist nhưng không được

Bạn có bị hiểu nhầm đề bài không ?? Đề dịch ra là:

Nhập các số liên tiếp đến khi bạn nhập "0"
tính tổng các số đã nhập.
1 Like

ầy dà chắc mình dịch nhầm đề rồi @@ nhưng bạn có thể giúp mình các khúc mắc trên được không ?

Thế thì dùng nextInt là không ổn. Khi dùng nextInt thì nó lấy các chữ số liên tiếp thành 1 số. 123450 sẽ thành 123450 chứ không phải từng số 1, 2, 3, 4, 5, 0.
Nên dùng next để lấy chuỗi rồi tách từng chữ số.

2 Likes

oh thanks bác nhiều nhé !

Cảm ơn mọi người nhiều nhé em giải quyết được rồi xin đóng topic ạ !

Close topic theo yêu cầu

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?