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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

804閲覧

Java 配列 挿入

ladyinredjes

総合スコア12

Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/01/17 17:52

前提・実現したいこと

Java の既存の配列への挿入(not差し替え)
入力した値を入力した場所へ挿入するためのコードがどうしても分かりません。

発生している問題・エラーメッセージ

出力が以下の様に、値が入っていない状態になります。

run:
Array items before Insertion [11, 22, 33, 44, 55, 66, 77]
Enter an integer to insert 99
Enter an Index : 2
Array items after Insertion [0, 0, 0, 0, 0, 0, 0, 0]

該当のソースコード

import java.util.Arrays;
import java.util.Scanner;

public class ArrayInEx {
private int index,InValue;

public ArrayInEx(){} public int [] Insertion(int[] arr,int index,int InValue) { if (index == 0|| index >= arr.length) { throw new NumberFormatException ("\nEroor - Index number is Wrong.Check again!!!"); } int[] NewArray = new int[arr.length + 1]; for (int i = 0; i > arr.length-1;i--) { ****この部分のコードが分かりません**** NewArray[i--]=arr[i]; } return NewArray; }

class TestArray{
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
ArrayInEx myarray=new ArrayInEx();

int[] arr ={11,22,33,44,55,66,77};//Set the array items //Insertion System.out.println("Array items before Insertion "+Arrays.toString(arr)); System.out.print("Enter an integer to insert "); int InValue=sc.nextInt(); System.out.print("Enter an Index : "); int index= sc.nextInt(); arr = myarray.Insertion(arr,index,InValue); System.out.print("Array items after Insertion "+Arrays.toString(arr));

}

試したこと

Insertionメソッドのループの部分に修正が必要なのはわかりますが
様々な方法を試してみても分かりません。

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

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

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

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

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

azuapricot

2019/01/18 00:34

コードはマークダウン <code> をつかってかいてくださ~~~~~~~い
guest

回答2

0

ベストアンサー

動作確認済みです。

Java

1public class ArrayInEx { 2 private int index,InValue; 3 public ArrayInEx(){} 4 public int [] Insertion(int[] arr,int index,int InValue) { 5 if (index == 0|| index >= arr.length) { 6 throw new NumberFormatException ("\nEroor - Index number is Wrong.Check again!!!"); 7 } 8 9 int[] NewArray = new int[arr.length + 1]; //新配列は元の配列の長さ + 1 10 boolean check = false; //要素に入力値を代入したかどうかのチェック 11 12 for (int i=0; i < arr.length + 1; i++) { 13 14 if (check) { //既に入力値を新配列に代入済みの場合 15 16 NewArray[i] = arr[i - 1]; //indexを考えながら代入 17 18 } else { //まだ代入されてない場合 19 20 if (i == index) { //新配列のindexが入力したindexと同じになった場合 21 22 NewArray[i] = InValue; //入力値を代入 23 check = true; //フラグをONにする 24 25 } else { //まだ入力値のindexと同じでない場合 26 27 NewArray[i] = arr[i]; //何も考えず代入 28 } 29 } 30 } 31 return NewArray; 32 } 33} 34

超簡単にやるために要素に値を代入したかどうかのチェックを入れました。
(あまりチェックを多用するのはおすすめされてませんが・・・。)

よく考えなければいけないのは代入した後のindexの処理ですね。
恐らくここで躓いていたのではないでしょうか。
それ以前でしたら、残念ながらfor文と配列を1から勉強してくださいとしか言えません。

質問者さんにお願いですが、『コピーしてはい!できた~おわり!』ではなく、
System.out.println()などを駆使してどんな動きになっているかきちんと理解してください。

投稿2019/01/18 00:58

編集2019/01/18 01:32
azuapricot

総合スコア2341

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

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

swordone

2019/01/18 01:03

これだと差し替えになります。
azuapricot

2019/01/18 01:35 編集

なので編集中です~ 編集完了です~(10:34)
ladyinredjes

2019/01/18 11:38

的確なアドバイスありがとうございます。
guest

0

java

1for (int i = 0; i > arr.length-1;i--)

こんなfor文では、(arrが長さ0の配列でない限り)1回も実行されません。

いきなりコードを書く前に、何がどうなればいいのか、イメージを書いてみてください。

plain

11 2 3 4 5 2| | \ \ \ 31 2 A 3 4 5

投稿2019/01/17 18:08

swordone

総合スコア20651

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

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

ladyinredjes

2019/01/17 18:16

回答ありがとうございます。 Array items before Insertion [11, 22, 33, 44, 55, 66, 77] Enter an integer to insert 99 Enter an Index : 2 Array items after Insertion [11, 22, 99, 33, 44 ,55 66, 77] と出力したいのですが、、、
swordone

2019/01/17 19:26

うん、だからそれを実現するために、どういう順番で何をするの?
退会済みユーザー

退会済みユーザー

2019/01/17 22:05

i=0 だから 0>0 は false じゃね(ぼそっ length == 0
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問