Viết chương trình cộng hai số nguyên và in tổng của chúng chỉ in ra tổng mà không có chuỗi nào khác

Bộ xử lý của máy tính, chuyên thực hiện các lệnh, có khả năng thực thi — trong một máy tính hiện đại — hơn một tỷ lệnh [mã máy] trong một giây

Trong phần này, chúng ta sẽ làm quen với việc viết mã chương trình thường lặp lại với sự trợ giúp của vòng lặp

Hãy thúc đẩy bản thân sử dụng các vòng lặp. Dưới đây, bạn sẽ tìm thấy một ví dụ về chương trình yêu cầu người dùng nhập năm số và tính tổng của chúng

Scanner scanner = new Scanner[System.in];
int sum = 0;

System.out.println["Input a number: "];
sum = sum + Integer.valueOf[scanner.nextLine[]];

System.out.println["Input a number: "];
sum = sum + Integer.valueOf[scanner.nextLine[]];

System.out.println["Input a number: "];
sum = sum + Integer.valueOf[scanner.nextLine[]];

System.out.println["Input a number: "];
sum = sum + Integer.valueOf[scanner.nextLine[]];

System.out.println["Input a number: "];
sum = sum + Integer.valueOf[scanner.nextLine[]];

System.out.println["The sum of the numbers is " + sum];

Nó thực hiện công việc, nhưng không thanh lịch. Điều gì sẽ xảy ra nếu chương trình phải đọc một trăm, hoặc có lẽ là một nghìn số và in ra tổng của chúng?

Vấn đề có thể được giải quyết bằng một vòng lặp theo dõi cả tổng và số lần đầu vào đã được đọc. Chương trình in tổng của năm số bây giờ trông như sau

Scanner scanner = new Scanner[System.in];

int numbersRead = 0;
int sum = 0;

while [true] {
    if [numbersRead == 5] {
        break;
    }

    System.out.println["Input number"];
    sum = sum + Integer.valueOf[scanner.nextLine[]];
    numbersRead = numbersRead + 1;
}

System.out.println["The sum of the numbers is " + sum];

Tiếp theo chúng ta sẽ làm quen với vòng lặp

Vòng lặp và Vòng lặp vô hạn

Một vòng lặp bao gồm một biểu thức xác định xem có nên lặp lại mã trong vòng lặp hay không, cùng với một khối chứa mã nguồn sẽ được lặp lại. Một vòng lặp có dạng sau

while [_expression_] {
    // The content of the block wrapped in curly brackets
    // The block can have an unlimited amount of content
}

Bây giờ chúng ta sẽ sử dụng giá trị

while [_expression_] {
    // The content of the block wrapped in curly brackets
    // The block can have an unlimited amount of content
}
1 làm biểu thức của vòng lặp. Bằng cách này, quá trình thực thi của vòng lặp luôn được tiếp tục khi chương trình đến điểm quyết định có nên lặp lại hay không. Điều này xảy ra khi việc thực thi chương trình lần đầu tiên đến biểu thức vòng lặp và cả khi nó đến cuối khối của vòng lặp

Việc thực hiện vòng lặp tiến hành từng dòng một. Kết quả chương trình sau tôi có thể lập trình vô số lần

while [true] {
    System.out.println["I can program!"];
}

Một chương trình chạy vô tận không tự kết thúc. Trong NetBeans, có thể tắt nó bằng cách nhấp vào nút màu đỏ nằm ở bên trái của cửa sổ đầu ra

kết thúc một vòng lặp

Vòng lặp có thể bị phá vỡ bằng lệnh 'break'. Khi một máy tính thực thi lệnh 'break', quá trình thực thi chương trình sẽ chuyển sang lệnh tiếp theo sau khối vòng lặp

Ví dụ dưới đây là một chương trình in các số từ một đến năm. Lưu ý cách biến được sử dụng trong vòng lặp được xác định trước vòng lặp. Bằng cách này, biến có thể được tăng lên bên trong vòng lặp và thay đổi sẽ tồn tại giữa nhiều lần lặp lại của vòng lặp

int number = 1;

while [true] {
    System.out.println[number];
    if [number >= 5] {
        break;
    }

    number = number + 1;
}

System.out.println["Ready!"];

đầu ra mẫu

1 2 3 4 5 Sẵn sàng

Thoát khỏi vòng lặp xảy ra khi người dùng nhập một đầu vào được chỉ định hoặc bất cứ khi nào một phép tính được thực hiện trong vòng lặp kết thúc với kết quả mong muốn. Các loại chương trình này chứa cả một vòng lặp được sử dụng để xác định một phần sẽ được lặp lại và cũng là một biểu thức điều kiện được sử dụng để kiểm tra xem điều kiện để thoát khỏi vòng lặp đã được đáp ứng hay chưa.

Người dùng cũng có thể được yêu cầu nhập liệu trong một vòng lặp. Các biến thường được sử dụng trong vòng lặp [chẳng hạn như Trình đọc máy quét] được xác định trước vòng lặp, trong khi các biến [chẳng hạn như giá trị được đọc từ người dùng] dành riêng cho vòng lặp được xác định bên trong vòng lặp.

Trong ví dụ bên dưới, chương trình hỏi người dùng có thoát khỏi vòng lặp hay không. Nếu người dùng nhập chuỗi "y", việc thực thi chương trình sẽ chuyển sang lệnh sau khối vòng lặp, sau đó quá trình thực hiện chương trình kết thúc

Scanner scanner = new Scanner[System.in];

while [true] {
    System.out.println["Exit? [y exits]"];
    String input = scanner.nextLine[];
    if [input.equals["y"]] {
        break;
    }

    System.out.println["Ok! Let's carry on!"];
}

System.out.println["Ready!"];

Chương trình trong ví dụ hoạt động như sau. Đầu vào của người dùng được đánh dấu màu đỏ

đầu ra mẫu

Lối ra? . Hãy tiếp tục. Lối ra? . Hãy tiếp tục. Lối ra?

Đang tải

Trong ví dụ trước, chương trình đọc đầu vào kiểu chuỗi từ người dùng. Chương trình cũng có thể được thực hiện với các loại biến khác. Chương trình dưới đây yêu cầu số từ người dùng cho đến khi người dùng nhập số không

Scanner scanner = new Scanner[System.in];

while [true] {
    System.out.println["Input a number, 0 to quit"];
    int command = Integer.valueOf[scanner.nextLine[]];
    if [command == 0] {
        break;
    }

    System.out.println["You input " + command];
}

System.out.println["Done, thank you!"];

Đầu ra của chương trình có thể như sau

đầu ra mẫu

Nhập một số, 0 để thoát 5 Bạn nhập 5 Nhập một số, 0 để thoát -2 Bạn nhập -2 Nhập một số, 0 để thoát 0 Xong, cảm ơn bạn

Đang tải

Quay lại Bắt đầu Vòng lặp

Khi quá trình thực thi kết thúc vòng lặp, quá trình thực thi sẽ bắt đầu lại từ đầu vòng lặp. Điều này có nghĩa là tất cả các lệnh trong vòng lặp đã được thực hiện. Bạn cũng có thể quay lại phần đầu từ những vị trí khác ngoài phần cuối bằng lệnh

while [_expression_] {
    // The content of the block wrapped in curly brackets
    // The block can have an unlimited amount of content
}
0. Khi máy tính thực hiện lệnh
while [_expression_] {
    // The content of the block wrapped in curly brackets
    // The block can have an unlimited amount of content
}
0, quá trình thực thi chương trình chuyển sang đầu vòng lặp

Ví dụ dưới đây minh họa việc sử dụng lệnh

while [_expression_] {
    // The content of the block wrapped in curly brackets
    // The block can have an unlimited amount of content
}
0. Chương trình yêu cầu người dùng nhập số dương. Nếu người dùng nhập số âm hoặc số 0, chương trình sẽ in thông báo "Số không phù hợp, thử lại", sau đó quá trình thực thi quay lại đầu vòng lặp. Trong ví dụ trước, chương trình đọc đầu vào kiểu chuỗi từ người dùng. Các chương trình tương tự với các loại đầu vào khác nhau cũng có thể. Trong ví dụ bên dưới, người dùng được yêu cầu nhập số cho đến khi họ nhập số không

Scanner scanner = new Scanner[System.in];

int numbersRead = 0;
int sum = 0;

while [true] {
    if [numbersRead == 5] {
        break;
    }

    System.out.println["Input number"];
    sum = sum + Integer.valueOf[scanner.nextLine[]];
    numbersRead = numbersRead + 1;
}

System.out.println["The sum of the numbers is " + sum];
1

Chương trình trong ví dụ trên được lặp lại vô tận do lệnh

Scanner scanner = new Scanner[System.in];

int numbersRead = 0;
int sum = 0;

while [true] {
    if [numbersRead == 5] {
        break;
    }

    System.out.println["Input number"];
    sum = sum + Integer.valueOf[scanner.nextLine[]];
    numbersRead = numbersRead + 1;
}

System.out.println["The sum of the numbers is " + sum];
9 được sử dụng để thoát khỏi vòng lặp không được sử dụng. Để thoát khỏi vòng lặp, phải thêm lệnh
Scanner scanner = new Scanner[System.in];

int numbersRead = 0;
int sum = 0;

while [true] {
    if [numbersRead == 5] {
        break;
    }

    System.out.println["Input number"];
    sum = sum + Integer.valueOf[scanner.nextLine[]];
    numbersRead = numbersRead + 1;
}

System.out.println["The sum of the numbers is " + sum];
9 vào nó

Trong ví dụ bên dưới, chương trình được sửa đổi theo cách mà người dùng được yêu cầu nhập số dương. Nếu người dùng nhập một số âm, chương trình sẽ thông báo cho họ rằng số đó không phù hợp và quay lại đầu vòng lặp. Nếu số bằng 0, chương trình thoát khỏi vòng lặp

Scanner scanner = new Scanner[System.in];

int numbersRead = 0;
int sum = 0;

while [true] {
    if [numbersRead == 5] {
        break;
    }

    System.out.println["Input number"];
    sum = sum + Integer.valueOf[scanner.nextLine[]];
    numbersRead = numbersRead + 1;
}

System.out.println["The sum of the numbers is " + sum];
4

Đang tải giao diện

:

Đang tải giao diện

Đăng nhập để xem bài kiểm tra

Đang tải

Trong bài tập trước, bạn đã tạo một chương trình yêu cầu người dùng nhập các số. Nếu người dùng nhập số âm, chương trình sẽ thông báo cho họ rằng số đó không phù hợp và nếu người dùng nhập số 0, chương trình sẽ thoát. Một giải pháp khả thi cho bài tập là như sau

Scanner scanner = new Scanner[System.in];

int numbersRead = 0;
int sum = 0;

while [true] {
    if [numbersRead == 5] {
        break;
    }

    System.out.println["Input number"];
    sum = sum + Integer.valueOf[scanner.nextLine[]];
    numbersRead = numbersRead + 1;
}

System.out.println["The sum of the numbers is " + sum];
5

Chương trình có thể được thực hiện bằng cách sửa đổi câu lệnh if thành một dạng khác. Trong ví dụ bên dưới, các điều kiện đã được kết hợp để thay thế các câu lệnh if riêng biệt

Scanner scanner = new Scanner[System.in];

int numbersRead = 0;
int sum = 0;

while [true] {
    if [numbersRead == 5] {
        break;
    }

    System.out.println["Input number"];
    sum = sum + Integer.valueOf[scanner.nextLine[]];
    numbersRead = numbersRead + 1;
}

System.out.println["The sum of the numbers is " + sum];
0

Ví dụ nào trước đây rõ ràng hơn?

Hãy xem xét sự rõ ràng của các chương trình trước thông qua một ví dụ. Dưới đây, chương trình yêu cầu người dùng nhập một số. Nếu số âm, người dùng được thông báo rằng số đó không phù hợp và việc thực thi chương trình sẽ chuyển sang đầu vòng lặp. Nếu số bằng 0, chương trình thoát khỏi vòng lặp. Trong các trường hợp khác, chương trình in bình phương của số, i. e. , số đó nhân với chính nó

Scanner scanner = new Scanner[System.in];

int numbersRead = 0;
int sum = 0;

while [true] {
    if [numbersRead == 5] {
        break;
    }

    System.out.println["Input number"];
    sum = sum + Integer.valueOf[scanner.nextLine[]];
    numbersRead = numbersRead + 1;
}

System.out.println["The sum of the numbers is " + sum];
1

Chương trình này cũng có thể được thực hiện bằng cách kết hợp các câu lệnh if. Trong trường hợp đó, việc triển khai sẽ như sau

Scanner scanner = new Scanner[System.in];

int numbersRead = 0;
int sum = 0;

while [true] {
    if [numbersRead == 5] {
        break;
    }

    System.out.println["Input number"];
    sum = sum + Integer.valueOf[scanner.nextLine[]];
    numbersRead = numbersRead + 1;
}

System.out.println["The sum of the numbers is " + sum];
2

Hãy kiểm tra các chương trình trước với ý kiến. Trước mỗi câu lệnh đều có chú thích nhằm giải thích những gì đang xảy ra trong chương trình. Dưới đây là một chương trình được viết với các câu lệnh if riêng biệt

Scanner scanner = new Scanner[System.in];

int numbersRead = 0;
int sum = 0;

while [true] {
    if [numbersRead == 5] {
        break;
    }

    System.out.println["Input number"];
    sum = sum + Integer.valueOf[scanner.nextLine[]];
    numbersRead = numbersRead + 1;
}

System.out.println["The sum of the numbers is " + sum];
3

Lưu ý rằng mọi câu lệnh if đều có một nhiệm vụ rõ ràng

Khi chúng tôi nhận xét về một chương trình có chứa các câu lệnh if kết hợp, các nhận xét sẽ có dạng sau

Scanner scanner = new Scanner[System.in];

int numbersRead = 0;
int sum = 0;

while [true] {
    if [numbersRead == 5] {
        break;
    }

    System.out.println["Input number"];
    sum = sum + Integer.valueOf[scanner.nextLine[]];
    numbersRead = numbersRead + 1;
}

System.out.println["The sum of the numbers is " + sum];
4

Chúng tôi nhận thấy rằng rất khó để xác định một nhiệm vụ đơn lẻ, rõ ràng cho khối

while [_expression_] {
    // The content of the block wrapped in curly brackets
    // The block can have an unlimited amount of content
}
7. Trong quá trình thiết kế và thực hiện một chương trình, nên nhắm đến một tình huống trong đó mọi phần của chương trình đều có một nhiệm vụ rõ ràng và duy nhất. Chủ đề này lặp đi lặp lại trong suốt khóa học

Tính toán với vòng lặp

Vòng lặp được sử dụng trong tính toán nhiều thứ khác nhau. Ví dụ: các chương trình xử lý số lượng giá trị do người dùng nhập không xác định sẽ sử dụng các vòng lặp. Các loại chương trình này thường in ra một số loại thống kê về các số đã được đọc hoặc các đầu vào khác sau vòng lặp kết thúc

Để chương trình in ra thông tin từ việc thực hiện vòng lặp sau vòng lặp, thông tin phải được lưu và sửa đổi trong suốt vòng lặp

Nếu biến được sử dụng để lưu trữ dữ liệu được đưa vào trong vòng lặp, thì biến đó chỉ khả dụng trong vòng lặp đó và không có nơi nào khác

Hãy lập chương trình đếm và in ra số đơn vị do người dùng nhập vào. Trước tiên hãy tạo một phiên bản không hoạt động và kiểm tra hoạt động của các khối

Scanner scanner = new Scanner[System.in];

int numbersRead = 0;
int sum = 0;

while [true] {
    if [numbersRead == 5] {
        break;
    }

    System.out.println["Input number"];
    sum = sum + Integer.valueOf[scanner.nextLine[]];
    numbersRead = numbersRead + 1;
}

System.out.println["The sum of the numbers is " + sum];
5

Chương trình trước đó không hoạt động vì biến

while [_expression_] {
    // The content of the block wrapped in curly brackets
    // The block can have an unlimited amount of content
}
8 được đưa vào trong vòng lặp và một nỗ lực được thực hiện để sử dụng nó sau vòng lặp ở cuối chương trình. Biến chỉ tồn tại bên trong vòng lặp. Nếu câu lệnh in
while [_expression_] {
    // The content of the block wrapped in curly brackets
    // The block can have an unlimited amount of content
}
9 nằm trong vòng lặp, chương trình sẽ hoạt động nhưng không theo cách mong muốn. Hãy kiểm tra điều này tiếp theo

Scanner scanner = new Scanner[System.in];

int numbersRead = 0;
int sum = 0;

while [true] {
    if [numbersRead == 5] {
        break;
    }

    System.out.println["Input number"];
    sum = sum + Integer.valueOf[scanner.nextLine[]];
    numbersRead = numbersRead + 1;
}

System.out.println["The sum of the numbers is " + sum];
6

Ví dụ trên hoạt động, nhưng không phải theo cách chúng tôi hy vọng. Dưới đây là đầu ra ví dụ của chương trình

đầu ra mẫu

Chèn một số [0 lần thoát] 5 Tổng số một. 0 Chèn một số [0 lần thoát] 1 Tổng số. 1 Chèn một số [0 lần thoát] 1 Tổng số một. 1 Chèn một số [0 lần thoát] 2 Tổng số một. 0 Chèn một số [0 lần thoát] 0

Nếu bạn muốn sử dụng một biến sau một vòng lặp, thì nó cần được đưa vào trước vòng lặp

Trong ví dụ bên dưới, chương trình tính tổng các số một được nhập vào. Các đầu vào được đọc cho đến khi người dùng nhập số 0, sau đó chương trình in tổng số các số đã nhập. Chương trình sử dụng biến

while [_expression_] {
    // The content of the block wrapped in curly brackets
    // The block can have an unlimited amount of content
}
8 để theo dõi các số

Scanner scanner = new Scanner[System.in];

int numbersRead = 0;
int sum = 0;

while [true] {
    if [numbersRead == 5] {
        break;
    }

    System.out.println["Input number"];
    sum = sum + Integer.valueOf[scanner.nextLine[]];
    numbersRead = numbersRead + 1;
}

System.out.println["The sum of the numbers is " + sum];
7

Dưới đây là một ví dụ đầu ra của chương trình

đầu ra mẫu

Cho một số [kết thúc bằng 0]. 1 Cho một số [kết thúc bằng 0]. 2 Cho một số [kết thúc bằng 0]. 1 Cho một số [kết thúc bằng 0]. -1 Cho một số [kết thúc bằng 0]. 0 Tổng số cái. 2

Đang tải

Đang tải

Các chương trình được viết trong các bài tập trước đã đọc đầu vào từ người dùng và theo dõi số lượng của một số loại số nhất định. Trong bài tập tiếp theo, tổng các số được yêu cầu không khác nhiều — lần này, thay vì theo dõi số lượng giá trị đã nhập, bạn thêm số do người dùng nhập vào tổng

Đang tải

Đôi khi bạn cần sử dụng nhiều biến. Ví dụ dưới đây cho thấy một chương trình đọc số từ người dùng cho đến khi người dùng viết 0. Sau đó, chương trình in số lượng các số dương và số âm đã cho và tỷ lệ phần trăm của các số dương từ tất cả các số đã cho

Chủ Đề