2017-04-25 12 views
0

現在、私はこのsellメソッドを持っています。ユーザーによって入力された名前がリンクリストにあるかどうかを確認します。ユーザーはペンの値を入力した場合(大文字と小文字を区別しません)、それは発見されたマッチを一覧表示し、次に言う「複数のマッチた」となるように リンクリストにすべての一致を表示しようとしています

private void sell() { 
    int sellthis = -1; 
    System.out.print("Name: "); 
    String selloutput = In.nextLine(); 
    for (int y = 0; y < products.size(); y++){ 
    if (selloutput.equalsIgnoreCase(products.get(y).getName())){ 
     sellthis = y; 
    } 
    } 
    if (sellthis < 0) { 
     System.out.println("No such product"); 
    } 
    else { 

    System.out.println("Selling "+products.get(sellthis).getName()); 
    System.out.print("Number: "); 
    int sellamount = In.nextInt(); 
    if (products.get(sellthis).has(sellamount)){ 
     cash.add(products.get(sellthis).sell(sellamount)); 
    } 
    else { 
    System.out.println("Not enough stock"); 
    } 
} 
} 

は、今私はそれを修正しようとしています。私はそのため申し訳ありませんが、私の販売方法が少し中世のようだ知っている:P

申し訳ありませんが

products.add(new Product("Whiteboard Marker", 85, 1.50)); 
    products.add(new Product("Whiteboard Eraser", 45, 5.00)); 
    products.add(new Product("Black Pen", 100, 1.50)); 
    products.add(new Product("Red Pen", 100, 1.50)); 
    products.add(new Product("Blue Pen", 100, 1.50)); 
+2

どうしますか? – vlaxmi

+0

商品の一部を入力すると、その商品を選択するか、一致する商品名のリストを表示するように売り上げを変更するにはどうすればいいですか – Dan

+0

最新の編集に商品を追加しました – Dan

答えて

1

あなたの目標を達成するためにあなたがすべきである:あなたがあなたの現在のコードで行うよう

  1. 平等をテストします。
  2. それは1がOKであれば2がOKであれば、その後の製品compteurをインクリメントし、製品候補リストに現在の製品を追加する他に、この製品を返し、それは部分一致かどう

を参照するには含まれている方法を試してみてください失敗した場合。

for (int y = 0; y < products.size(); y++) { 
     if (selloutput.equalsIgnoreCase(products.get(y).getName())) { 
      sellthis += 1; 
      candidates.add(products.get(y)); 
      break; 
     }else if(products.get(y).getName().toUpperCase().contains(selloutput.toUpperCase())){ 
      sellthis += 1; 
      candidates.add(products.get(y)); 
     } 
    } 
+0

を選択する複数の方法が共存することができます。3つのペンすべてでうまく動作しますが、「ホワイトボード」を使用しようとすると、最初のインスタンス(ホワイトボードマーカー)を即座に受け取ります。私は何を間違えたのですか? – Dan

+0

私のコードはちょっと変わったので私の答えは編集しました;-) – Nemesis

0
を次のように私が使用している製品はこれらの

public Product(String name, int stock, double price) { 
    this.name = name; 
    this.stock = stock; 
    this.price = price; 
} 

が含まれている製品を追加するのを忘れ

各製品にString#matches()を使用して、入力された断片が部分的に一致するかどうかを調べることができます。このような何か:

System.out.print("Name: "); 
List<Product> matches = new ArrayList<>(); 
String selloutput = In.nextLine().toLowerCase(); 
for (int y=0; y < products.size(); y++) { 
    String product = products.get(y).getName().toLowerCase(); 
    String pattern = ".*" + selloutput + ".*"; 
    if (product.matches(pattern)) { 
     matches.add(products.get(y)); 
    } 
} 
2

製品のクラスはそのように見えると仮定:

public static class Product { 

    private final String name; 
    private final int stock; 
    private final double price; 

    public Product(String name, int stock, double price) { 
    this.name = name; 
    this.stock = stock; 
    this.price = price; 
    } 

    public String getName() { 
    return name; 
    } 
} 

あなたはマッチした製品を見つけ、それらを印刷するには、次のコードを使用することができます。

@Test 
public void test() { 
    List<Product> products = Arrays.asList(new Product("Pen", 10, 1.0), 
             new Product("Super Pen", 10, 2.0), 
             new Product("Something Else", 10, 1.0)); 
    String userInput = "Pen"; 
    List<Product> matchingProducts = products.stream() 
             .filter(p -> p.getName().toLowerCase() 
                 .contains(userInput.toLowerCase())) 
             .collect(Collectors.toList()); 

    System.out.println("Multiple matched found:"); 
    matchingProducts.stream().forEach(p -> System.out.println(p.getName())); 
} 

もちろん、これはちょうどあなたにアイデアを与える必要があります。たとえば、それから方法を抽出する。


このコードでは、Java 8 Streamsを使用して一致する製品を除外しています。

+0

さらなる改善として、あなたはマッチングの手段を抽象化することができます。この方法では、これを実装しようとした後で製品 – dvberkel

関連する問題