質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

428閲覧

模範解答のコードの意味がわかりません。

talabagani

総合スコア50

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

2クリップ

投稿2021/06/28 09:59

#[環境]
Java version 16.0.1
VS Code
Mac OS Big Surの環境です。
java -version
java version "16.0.1" 2021-04-20
Java(TM) SE Runtime Environment (build 16.0.1+9-24)
Java HotSpot(TM) 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing)
MacBook:09_MinutesToYearsandDayCalculator $
#[エラー]

[学習状況]
progateを3巡、ドットインストール1巡、スッキリJavaの本を8割読みました。現在、UdemyのJava Programming Masterclass for Software Developersというコースで演習問題に取り組んでいます
この問題はUdemyでの演習24番目なので、まったくの初めてというわけではありません。
まだまだ初心者ですが真面目に取り組んでいるので、何卒、よろしくお願いします。

#[演習問題の内容]
小麦粉のパックを作ろう!という演習問題です。
小麦粉のパックは 5kgのパックの数(bigCount)、1kgのパックの数(smallCount)、そしてゴールのkg(goal)、これがメソッドの引数になります。小麦粉のパックを使ってゴールの重さの小麦粉を集められるかどうかをチェックするメソッドです。使わない小麦粉のパックがあってもよいこととします。小麦粉の袋は開封してはいけません。そのままで使ってください。
メソッドの名前はcanPackです。
(1,0,4)false。5kgのパックひとつから4kgの小麦粉は取り出せません。

(1,0,5)true。 5kgのパックひとつから5kgの小麦粉は取り出せません。

(0,5,4)true 1kgのパック4から4kgの小麦粉は取りだせます。ただし、1kgの小麦粉一袋余りますがそれはよいです。

(2,2,11)true 5kgのパック2つ、1kgのパック1つから11kgの小麦粉が取り出せます。1kgの小麦粉一袋余りますがそれはよいです。

(-3,2,11)false。-3という数がはいっているのでfalseです。

#[わからない事]
模範解答のコードのreturn (goal%5 <= smallCount); // #3 regardless of bigCount, というところがよくわかりません。
もちろん、最低でも この条件が必要なのは理解できます。
必要条件だとは思うのですが、これは十分条件になりますか?

#[ネットで見つけた模範回答コード]

java

1ublic class FlourPacker { 2 public static boolean canPack(int bigCount, int smallCount, int goal){ 3 if(bigCount < 0 || smallCount < 0 || goal < 0) { // #1 validation 4 return false; 5 } 6 if(bigCount*5 + smallCount < goal) { // #2 supply must be greater than demand 7 return false; 8 } 9 return (goal%5 <= smallCount); // #3 regardless of bigCount, remainder of goal has to be less than smallCount 10 } 11}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

必要条件だというのが、わかっている=コードの意味がわかってると思います。
ですので、十分条件でないのもわかると思います。

バリデーションは無視して・・・

java

1if(bigCount*5 + smallCount < goal) { // #2 supply must be greater than demand 2 return false; 3} 4return (goal%5 <= smallCount); // #3 regardless of bigCount, remainder of goal has to be less than smallCount

は、

java

1return (goal <= bigCount*5 + smallCount) && (goal%5 <= smallCount);

です。

実際に、(0,4,11)は、goal%5 が1、smallCountは4なので、(goal%5 <= smallCount)は満たしますが
4kgから11kgは取り出せません。

投稿2021/06/28 10:46

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

goal%5
の意味はわかりますか?
そして、
<=
の演算子の意味はわかるでしょうか

それを組み合わせるだけです

投稿2021/06/28 10:04

編集2021/06/28 10:05
y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

talabagani

2021/06/28 10:43

goal%5は goal を5で割ったあまりなので、5kgの袋で詰めて行ったあとのあまり。 したがって最低でもこの数だけは1kgの袋がないといけないということだと思います。最低でもこの数はないといけない。だからといってこの数の1kgのパックがあるからといってtrueだと言い切れないと思うんです。
y_waiwai

2021/06/28 10:47

そのまえに、 if(bigCount*5 + smallCount < goal) がありますよ
dodox86

2021/06/28 12:11

@質問者さん 3つ目、最後のチェックポイント > return (goal%5 <= smallCount); だけを見て判断するからいけないのです。全体をみて、最初の2つのチェックポイントでのfalseを返す早期returnで後段の「考えなければいけない残りの」条件に注力する作りなのです。こんなケースは良くあります。
talabagani

2021/06/28 19:34

時間をおいて考えてみたのですが、わかりました。 goal%5を使って端数になる1kgのパックの数を確保しておけば、残りは5の倍数のkgだから、5kgのパックだろうが1kgのパックだろうがどちらでもいいんですよね。 お騒がせしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問