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

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

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

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

Q&A

解決済

4回答

1678閲覧

Javaで入力した数字で雛祭りの各段の並びを表示させたのですが

jason

総合スコア15

Java

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

0グッド

0クリップ

投稿2017/07/21 04:37

編集2017/07/21 04:57

Javaで入力した数字で雛祭りの各段の並びを表示させたのですが
例えば、1321と入力すると
a
bcd
ef
g
表示させたいのですが色々コード打って試しましたが、分かりませんでした。

自分が打ったコードの中で一番近そうなものが下記のコードになります。
ですが、このコードだと1回1回入力しての表示になります。
一度に1321と入力して表示されるにはこのコードでいうと、どう変えたら可能になりますか?
Javaを始めて二週間目なので知識がそれほどありません。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Hinadan {

public static void main(String[] args)throws IOException { // TODO 自動生成されたメソッド・スタブ BufferedReader b = new BufferedReader(new InputStreamReader(System.in)); int num[] = new int[5]; for(int i=0; i<num.length; i++){ String str = b.readLine(); int tmp = Integer.parseInt(str); num[i] = tmp; } for(int i = 0; i<num.length; i++){ if(num[i]==1){ System.out.println("a"); } if(num[i]==2){ System.out.println("ab"); } if(num[i]==3){ System.out.println("abc"); } if(num[i]==4){ System.out.println("abcd"); } if(num[i]==5){ System.out.println("abcde"); } } }

}

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

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

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

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

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

guest

回答4

0

substringが個人的に嫌いなだけのひねくれものですが
こんなコード書いてみました

Java

1char[] ALPHABETs = "abcdefghijklmnopqrstuvwxyz".toCharArray(); 2try (BufferedReader b = new BufferedReader(new InputStreamReader(System.in));) { 3 char[] inputs = b.readLine().toCharArray(); 4 5 int index = 0; 6 for (char c : inputs) { 7 int num = (int) c - 0x30; 8 if (num < 0 || 9 < num || ALPHABETs.length < index + num) { 9 break; 10 } 11 12 System.out.println(Arrays.copyOfRange(ALPHABETs, index, index + num)); 13 14 index += num; 15 } 16}

投稿2017/07/21 05:56

Tomohiro12

総合スコア112

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

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

jason

2017/07/21 06:02

そのような方法もあるのですね。ありがとうございました。
guest

0

”ちんぷんかん状態”は、よくないですね。
なので、ソースくださいっていうのは、誰も回答しないのですよね・・・(あなたのことではないです)

やはり、自分で実装するのが理解が早いかと思います。

ある程度できてるので、考慮するものは

  • 1文字でなく複数文字の解析。ある程度理解していると思われます。

substringとかcharAtとで1文字づつ処理すればよいです。StringのJavadocを見ましょう

  • 数字変換(すでにされています)
  • 提示された実装ではつねにaから始まっていますが、実際は続きからはじめる必要があるので

場所を保持する変数(posとかidx)が必要です。

  • 入力された数字の合計が26を超える場合の考慮についての見当が必要です。

たとえば8765の場合、どう表示するか?

投稿2017/07/21 05:45

編集2017/07/21 05:47
momon-ga

総合スコア4820

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

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

jason

2017/07/21 06:09 編集

これからは、実装しながら理解していくように心がけます。ありがとうございました。
guest

0

ベストアンサー

入力文字された文字をsubstringを使い1文字ずつ取得することで、1回の入力で済みます。

Java

1int num[] = new int[5]; 2for(int i=0; i<num.length; i++){ 3 String str = b.readLine(); 4 int tmp = Integer.parseInt(str); 5 num[i] = tmp; 6} 78int num[] = new int[5]; 9String str = b.readLine(); 10for(int i=0; i < num.length; i++){ 11 num[i] = Integer.parseInt(str.substring(i,i+1)); // 1文字ずつ取り出す 12}

参考までに、以下のソースは、a〜zまで全て使用するまで出力できます。

Java

1 private static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz"; 2 3 public static void main(String[] args) throws IOException { 4 5 BufferedReader b = new BufferedReader(new InputStreamReader(System.in)); 6 7 String input = b.readLine(); 8 9 int pos = 0; // substringの開始位置 10 11 for (int i = 0; i < input.length(); i++) { 12 13 // 使用できる文字がなくなったら、出力をやめる 14 if(pos == ALPHABET.length()) break; 15 16 // 1文字ずつ取り出す 17 int num = Integer.parseInt(input.substring(i, i + 1)); 18 19 // substring()終了位置設定 20 int endPos = pos + num; 21 22 if (endPos > ALPHABET.length()) { 23 // 文字を取り出す際に取り出す終了位置がALPHABETの文字数を超える場合(z以降を取得しようとする場合)は、最後のzまでを取得する 24 endPos = ALPHABET.length(); 25 } 26 27 // 定数ALPHABETから、開始位置と終了位置で文字を抽出し出力する 28 System.out.println(ALPHABET.substring(pos, endPos)); 29 30 // 次の開始位置を設定 31 pos = endPos; 32 } 33 34 } 35}

投稿2017/07/21 05:12

編集2017/07/21 05:41
mr-hisa-child

総合スコア294

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

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

jason

2017/07/21 05:31 編集

大変申し訳ないのですが、コードのここの部分の1文字ずつ取り出す以外が、ちんぷんかん状態です。 もしよろしければ、解説をお願いしたいです。 if(pos == ALPHABET.length()) break; // 1文字ずつ取り出す int num = Integer.parseInt(input.substring(i, i + 1)); int endPos = pos + num; if (endPos > ALPHABET.length()) { endPos = ALPHABET.length(); } System.out.println(ALPHABET.substring(pos, endPos)); pos = endPos; }
mr-hisa-child

2017/07/21 05:42

ソースにコメントを追記しました。わからなかったら、また聞いてください。
jason

2017/07/21 06:05

ようやく理解できました。 わがままにお付き合いくださりありがとうございました。
guest

0

考え方としては、"abcdef..."っていう文字列を用意しておいて、そこから表示したい部分を切り出す感じでしょうか。
とりあえず書いてみましたので参考にしてください。
解説はしません。

Java

1public static void main(String[] args)throws IOException { 2 BufferedReader b = new BufferedReader(new InputStreamReader(System.in)); 3 String num = b.readLine(); 4 String abc = "abcdefghijklmnopqrstuvwxyz"; 5 int idx = 0; 6 for(int i = 0; i < num.length(); i++){ 7 int len = Integer.parseInt(num.substring(i, i + 1)); 8 System.out.println(abc.substring(idx, idx + len)); 9 idx = idx + len; 10 } 11}

#当然ながらzを超えるような場合はおかしくなりますが、エラー処理は入れてません。

投稿2017/07/21 05:05

ttyp03

総合スコア16998

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

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

jason

2017/07/21 06:06

ありがとうございました。参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問