01/10/2018, 17:18

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);
}
Đoàn Trọng Hiếu viết 19:27 ngày 01/10/2018

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

Nguyễn Văn Vương viết 19:22 ngày 01/10/2018

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

vuanh0105 viết 19:19 ngày 01/10/2018

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

Đoàn Trọng Hiếu viết 19:25 ngày 01/10/2018

ý 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
Nguyễn Đình Anh viết 19:28 ngày 01/10/2018

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 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é

vuanh0105 viết 19:27 ngày 01/10/2018

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

vuanh0105 viết 19:30 ngày 01/10/2018

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

Anh chàng Doggo viết 19:31 ngày 01/10/2018
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.

vuanh0105 viết 19:19 ngày 01/10/2018

enter unlimited numbers (one number at a time) until you enter 0

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

vuanh0105 viết 19:27 ngày 01/10/2018

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

Nguyễn Đình Anh viết 19:20 ngày 01/10/2018

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.
vuanh0105 viết 19:33 ngày 01/10/2018

ầ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 ?

Trương Tấn Phát viết 19:22 ngày 01/10/2018

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ố.

vuanh0105 viết 19:27 ngày 01/10/2018

oh thanks bác nhiều nhé !

vuanh0105 viết 19:26 ngày 01/10/2018

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

Hung viết 19:34 ngày 01/10/2018

Close topic theo yêu cầu

Bài liên quan
0