Dừng nhập khi gặp "end"

Hi mọi người,
Tình hình là em muốn nó dừng loop nếu người dùng nhập vào “end” ạ. Em thử nhiều cách rồi mà vẫn không hiểu sao code lại không chạy ><. Mong mọi người giúp đỡ em với ạ.

/**
 * Auto Generated Java Class.
 */
import java.util.*;
public class BaiTap {
  public static void main(String[] args) { 
    Scanner input = new Scanner(System.in);
    
    // create 3 arrays to store information
    String [] items = new String[100];
    String [] quantity = new String [100];
    String [] price = new String [100];
    String [] end = {"end"};
     
    // create for loop ask user the needed information
    for (int i = 0; i < items.length; i++){
    System.out.println("What is your item?");
    items[i] = input.nextLine();
    
    // if user input "end", stop looping
    if(items.contains(end)){
      break;
    }
    else{
      System.out.println("How many do you want?");
      quantity [i] = input.nextLine();
      System.out.println("How much for that item?");
      price [i] = input.nextLine();
    } 
    }
  }
  }

Sai bét, và không tối ưu.

  • Điều gì khiến bạn dùng phương thức contains() để dò phần tử của 1 mảng với 1 mảng vậy?
  • Mỗi lần nhập đều kiểm tra nên các phần tử trước đó không cần kiểm tra lại. Dùng contains() là không tối ưu, dư thừa.

Thế này thì sao?

//...
if("end".equals(items[i]))
//...

Chỉ cần so sánh phần tử cuối cùng mình nhập thôi.

Nhưng điều này vẫn chưa tối ưu, vì giá trị "end"vẫn được lưu vào mảng, đáng lẽ ra nó không được lưu vào. Dùng trường tạm để lưu chuỗi nhập, so sánh sau đó gán vào mảng.

//...
String temp;
// for
//...
temp = input.nextLine();
if("end".equals(temp))
//...
else{
items[i] = temp;
//...
}
//...

Tóm lại:

import java.util.*;
public class BaiTap {
  public static void main(String[] args) { 
    Scanner input = new Scanner(System.in);
    
    // create 3 arrays to store information
    String [] items = new String[100];
    String [] quantity = new String [100];
    String [] price = new String [100];
    String temp; // Dùng lưu tạm
    String end = "end"; // Không phải mảng nhé.
    int i = 0; // Nên lưu i bên ngoài for, sẽ lấy được số phần tử đã nhập.
     
    // create for loop ask user the needed information
    for (; i < items.length; i++){
    System.out.println("What is your item?");
    temp = input.nextLine(); // Lưu vào trường tạm
    
    // if user input "end", stop looping
    if(end.equals(temp)){ // So sánh
      break;
    }
    else{
      items[i] = temp; // Gán chính thức
      System.out.println("How many do you want?");
      quantity [i] = input.nextLine();
      System.out.println("How much for that item?");
      price [i] = input.nextLine();
    } 
    }
  }
  }

Có thể bạn chưa học đến:

  • Thông tin lưu trữ đang bị “phân mảnh”, mỗi thông tin lại lưu 1 mảng khác nhau. Tạo lớp mới chứa thông tin.
  • Nếu người dùng nhập lớn hơn 100 phần tử thì sao? java.util.ArrayLists.
7 Likes

Cảm ơn bạn rất nhiều. Mình mới bắt đầu học java còn nhiều thiếu sót

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