@yo810

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

要素数20の配列を宣言し、要素に0から5ずつ加算して代入させる。 [0]~[10]の値の奇数のみカンマ区切りで、 [11]~[19]の値は偶数をカンマ区切りで表示させる

Discussion

始めに

独学でjavaの学習を行っています。

要素数20の配列を宣言し、要素に0から5ずつ加算して代入させる。
[0]~[10]の値の奇数のみカンマ区切りで、
[11]~[19]の値は偶数をカンマ区切りで表示させる

上記内容を行っています。
発生している問題やエラーは出ておりませんが
より簡潔化できればと思い投稿いたします。
皆様のご意見いただければ幸いです。

該当するソースコード

public class Sample006 {
	public static void main (String[] args) {
		int number[] = new int[20]; //20の要素を作成
		String str ="";
		number[0] = 0;
		for(int i = 1; i < number.length; i++) { 
			number[i] = number[i - 1] + 5; //0から5ずつnumber[i]に加算
		}
		
		System.out.print("¥n奇数 : ");
		for (int i = 0; i < 11; i++) {
			if (number[i] % 2 != 0) {
				str += String.valueOf(number[i]) + ",";
			}
		}
		
		System.out.print(str.substring(0, str.length() - 1));
		System.out.print("¥n偶数 : ");
		str = "";
		for (int i = 11; i < 20; i++) {
			if (number[i] % 2 == 0) {
				str += String.valueOf(number[i]) + ",";
			}
		}
		System.out.print(str.substring(0, str.length() - 1));
		System.out.print("¥n");
		
	}
}

出力結果

奇数 : 5,15,25,35,45
偶数 : 60,70,80,90

開発環境

eclipse

0 likes

類似質問が点在しているのが気になります。

for(int i = 1; i < number.length; i++) { 
   number[i] = i * 5;
   x = i * 5;
   mod = x % 2;
   str1 += i < 11 && mod == 1 : x + "," : "";
   str0 += i > 10 && mod == 0 : x + "," : "";
}
System.out.print("奇数 : " + str1.substring(0, str1.length() - 1) + "¥n"));
System.out.print("偶数 : " + str0.substring(0, str0.length() - 1) + "¥n"));

何故、[0]~[9]奇数,[10]~[19]偶数でないのか疑問です。

尚、私はchatGTPでないので、5加算をx = i * 5; mod = x % 2;に変更してます。
最後にはnumber要らないような気がしてます。

0Like

(お節介失礼します)
@HalHarada さんのコードはループを1から回しているため、偶奇が逆になると正しい答えが得られませんので、0からにしてみました。

int number[] = new int[20];
number[0] = 0;
for(int i = 1; i < number.length; i++) { 
   number[i] = number[i - 1] + 5;
}
String str0 ="";
String str1 ="";
for(int i = 0; i < number.length; i++) { 
   int x = number[i];
   int mod = x % 2;
   str1 += i < 11 && mod == 1 ? x + "," : "";
   str0 += i > 10 && mod == 0 ? x + "," : "";
}
System.out.print("奇数 : " + str1.substring(0, str1.length() - 1) + "\n");
System.out.print("偶数 : " + str0.substring(0, str0.length() - 1) + "\n");
1Like

机上の空論ですので、ご指摘、検証、大変たすかります。有り難うございます。

一回のループで出来ないですかね?

0Like

Stream APIとラムダ式を使った例です。
最後のカンマ出力をサボっていますが・・・

import java.util.*;
import java.util.stream.IntStream;
 
public class Main {
    public static void main(String[] args) {
        int n = 20;
        int[] number = IntStream.range(0, n).map(index -> index * 5).toArray();
        int[] odd = IntStream.range(0, n)
            .filter(index -> index < 11 && number[index] % 2 == 1)
            .map(index -> number[index])
            .toArray();
        int[] even = IntStream.range(0, n)
            .filter(index -> index > 10 && number[index] % 2 == 0)
            .map(index -> number[index])
            .toArray();
        System.out.println("奇数 : " + Arrays.toString(odd));
        System.out.println("偶数 : " + Arrays.toString(even));
    }
}
奇数 : [5, 15, 25, 35, 45]
偶数 : [60, 70, 80, 90]
0Like

@HalHarada さんへ

一回のループで出来ないですかね?

最初のループのnumber[i] = number[i - 1] + 5number[i] = i * 5に変えれば、0から始まる1回のループで出来ます。

1Like

既に本題からズレた蛇足の蛇足ですみません。

int last = 20;
int half = 11;
int number[] = new int[last];
int oe = 1;
String str = "奇数 : ";
for(int i = 0; i < last; i++) { 
   int x = i * 5;
   if (x == half) {
      str +=  "¥n偶数 : ";
      oe = 0;
   }
   str +=  (x % 2) == oe ? x + "," : "";
   number[i] = x;
}
System.out.print(str.substring(0, str.length() - 1) + "¥n");

int half = 11;半分ではないけど
number[i] = x;は本当に蛇足にしちゃいました。

0Like

Your answer might help someone💌