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

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

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

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

Q&A

解決済

4回答

3334閲覧

java:+と-を交互に二個ずつ表示する

phantom

総合スコア9

Java

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

0グッド

1クリップ

投稿2018/06/26 17:13

javaの問題で分からないものがあります。
以下問題文です。
変数valにキーボードから整数を入力し、実行結果のとおり「+」を2個と「-」を2個を交互に使って長さvalの直線を表示するプログラムを作成しなさい。

入力値
・5
実行結果
長さ:5
++--+

+と-を交互に出すには偶数と奇数で判定すれば良いと分かるのですが、二個ずつとなると分かりません。
int i, val;
System.out.print("長さ:");
val = Integer.parseInt(br.readLine());
for(i=1;i<=val;i=i+val){
if(
このように書いたのですが、if文の条件をどのように書けば良いか分かりません。

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

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

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

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

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

guest

回答4

0

ベストアンサー

iを2で割った数の偶奇を利用すれば良いです。
int 割る int は int になりますので。(5/2 ⇒ 2)

この場合、ループはfor(int i = 0; i < val; ++i)で行うと良いでしょう。

投稿2018/06/26 17:17

編集2018/06/26 17:20
LouiS0616

総合スコア35660

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

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

LouiS0616

2018/06/27 07:56

なぜマイナス...? 思い当たる点が全くありませんので、問題点をご指摘いただけると幸いです。
phantom

2018/06/27 08:47

すみません低評価押したつもりはありませんでした。高評価です!
LouiS0616

2018/06/27 08:53

phantomさんがうっかり低評価を押したわけではないようです。 ユーザ登録していればどなたでも高/低評価可能なのです。 マイナス自体はぜんぜん構わないのですが、理由が分からないとなんとなくもやもや。 あれ、私間違ったこと書いちゃってるかな?と。
退会済みユーザー

退会済みユーザー

2018/06/28 13:35

@LouiS0616さんへ LouiS0616さんがおっしゃっているのをまとめると以下のコードであっているでしょうか? 回答の方は正しいうえ、コードが短く書けると思うので高評価しておきます。 (+1) String []text = {"+","-"}; int val = 5; int num = 2; for(int i = 0; i < val; i++){ System.out.print(text[(i / num) % text.length]); }
LouiS0616

2018/06/28 13:48

@Stars1024 さん 回答時点では、もっと愚直な方法を考えていました。 実装の方法は 分かりやすいもの/簡潔なもの/拡張性の高いもの などいろいろあるでしょうね。 int width = 10; for(int i = 0; i < width; ++i) {   if((i / 2) % 2 == 0) {     System.out.print("+");   }   else {     System.out.print("-");   } } System.out.println(); 註:成形のため、全角空白を使用しています。
guest

0

こんにちは、
既に、解決済みですが、他の書き方が思いついたのでそれを書きたいと思います。

今回は+と-を2個ずつ出力するので、まず最初に+と- 2つセットのものが何個現れるか求めます。
イメージ説明

上の図のように四角で囲んだ塊が合計で何個あるか求めましょう。
今回は計5個なので 5 / 2 の商の2が答えとなります。
(緑で囲ったところは余りです。あとで使います。)
イメージ説明

あとは、これをもとにfor文で書けばいいです。

java

1for(int i = 0; i < val / num; i++){ 2 for(int j = 0; j < num; j++){ 3 System.out.print(text[i % text.length]); 4 } 5}

外側のfor文は塊の個数だけループさせています。
内側のfor文で同じ符号を2個出力しています。

このあとに、あまりの部分をfor文で出力すればいいです。

java

1public class Main { 2 public static void main(String[] args) { 3 4 String []text = {"+","-"}; 5 int val = 5; 6 int num = 2; 7 //塊の部分 8 for(int i = 0; i < val / num; i++){ 9 for(int j = 0; j < num; j++){ 10 System.out.print(text[i % text.length]); 11 } 12 } 13 //余りの部分 14 for(int i = 0; i < val % num; i++){ 15 System.out.print(text[(val / num) % text.length]); 16 } 17 } 18}

投稿2018/06/28 13:25

編集2018/06/28 13:37
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

LouiS0616

2018/06/28 13:42

拡張性が合って良い実装だと思います。
phantom

2018/06/28 13:43

回答ありがとうございます。 塊として考えるのは思いつきませんでした。
退会済みユーザー

退会済みユーザー

2018/06/28 13:51 編集

LouiS0616さんへ ありがとうございます。
退会済みユーザー

退会済みユーザー

2018/06/28 13:53

@phantomさんへ 少しコードが長くなり、あまり参考にならないかもしれませんが、少しでも役に立ったら幸いです。
guest

0

0 1 2 3 4 5 6 7 ...

0 0 1 1 0 0 1 1 ...

になるものを考えてみると‥そう、それはbit1

java

1if ((i & 2) == 0) { 2 //+ 3} else { 4 //- 5}

個人的には

こんなのが好きです。

java

1int val = 5; 2String[] pattern= {"+", "+", "-", "-"}; 3for(int i = 0; i < val; i+=1) { 4 System.out.print(pattern[i % pattern.length]); 5} 6//=> ++--+

投稿2018/06/27 08:35

fuzzball

総合スコア16731

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

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

phantom

2018/06/27 08:50

回答ありがとうございます。 このような考え方もあるんですね! 参考になります!
guest

0

とりあえずネタ

/* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; import java.io.*; /* Name of the class has to be "Main" only if the class is public. */ class Ideone { public static void main (String[] args) throws java.lang.Exception { try (Scanner sc = new Scanner(System.in)) { while (sc.hasNextInt()) { int x = sc.nextInt(); for (int i = 0; i < x; i++) { System.out.print(i % 4 < 2 ? "+" : "-"); } System.out.println(); } } } }

投稿2018/06/28 14:00

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問