2012-06-10 68 views
5

Đôi khi chúng ta viết mã không cần thiết. Câu hỏi của tôi là khá đơn giản: có một phương pháp như sau?Chức năng phạm vi (min, max, value) trong Java

/** @return true if a given value is inside the range. */ 
public static boolean range(min, max, value) 

Tôi không tìm thấy nó trên Google. Có phải vì nó không tồn tại?

+4

Đừng đặt tên nó là 'rangeCheck()', Oracle sẽ kiện bạn. –

Trả lời

3

Bạn có thể tạo một lớp gõ Range rằng có một phương pháp within:

public class Range<T extends Comparable<T>> { 

    private final T min; 
    private final T max; 

    public Range(T min, T max) { 
     this.min = min; 
     this.max = max; 
    } 

    public boolean within(T value) { 
     return min.compareTo(value) <= 0 && max.compareTo(value) >= 0; 
    } 
} 

Nếu min và max là như nhau cho một nhóm các bài kiểm tra, bạn có thể tái sử dụng đối tượng range của bạn cho tất cả các bài kiểm tra.

FWIW, điều này có vẻ tiện lợi!

+0

Làm thế nào '> =' và '<=' làm việc với so sánh? –

+0

@OpDeCirkel Cảm ơn bạn đã chọn điều đó. Tôi chỉ cần gõ nó mà không có một IDE và không suy nghĩ! Đã sửa lỗi ngay bây giờ - Chúc mừng – Bohemian

2

um ...

value >= min && value <= max 

chắc chắn nếu bạn thực sự cần một chức năng cho rằng bạn có thể dễ dàng viết nó cho mình?

+2

Mặt khác, 'Math.abs()' tồn tại, và nó thậm chí còn đơn giản hơn giá trị – Bohemian

+0

> = min && value <= max là những gì tôi luôn sử dụng ... Đó là vì tôi sẽ sử dụng nó như: 35 lần ... và sẽ gây khó chịu khi làm điều đó cho mọi mệnh đề ... Cảm ơn! –

+0

@Ivan Seidel: có 29 ký tự. Các cuộc gọi chức năng sẽ có 23. Tôi đặt cược bạn có xa, phiền toái lớn hơn nhiều bạn có thể dành nhiều thời gian của bạn trên. –

2

Nó không tồn tại.

Một nơi 'nhạy cảm' cho nó sẽ là trong module Toán, nhưng vì nó khá đơn giản thể hiện trong biểu thức

min < value && value < max 

có vẻ như một chút quá mức.

+0

Tôi biết nó đơn giản, vì Math.abs() rất đơn giản, nhưng tốt hơn (val <0? Val * -1: val) –

+0

Vâng, 'abs' là một phương thức Java với một phép toán tương đương. Ngoài ra, nó trả về một số nguyên. 'range' là một phép thử boolean trả về true hoặc false và không có tương đương toán học thực. Thật vậy, trong một tình huống thế giới thực, thử nghiệm rằng một giá trị nằm trong phạm vi số có thể sẽ có tên hữu ích hơn từ miền vấn đề, chẳng hạn như 'isAValidChoice (min, max, value)' ... thực sự là 'min' và 'max' có thể là các trường thuộc bất kỳ lớp nào cung cấp phương thức' isAValidChoice'. – Dancrumb

Các vấn đề liên quan