@iaojfkojgpakm (ai ueo)

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!

javaの配列のエラーについて

解決したいこと

javaを用いてボールのゲームを作っています。
runメソッドでエラーが出てしまいました。
初心者なので見にくいかもしれませんが解決方法を教えていただきたいです。
お願いいたします。

発生している問題・エラー

rects を変数に解決できません

または、問題・エラーが起きている画像をここにドラッグアンドドロップ
image.png

image.png

image.png

おそらくrectsという配列がrule60というメソッド内で定義していることからスコープの関係でエラーになっていると考えました。ローカル変数とかにすればできるのでしょうか?何か解決方法を教えていただきたいです。

0 likes

3Answer

rule60からrectsをreturnしてもらうようにしましょう。

public Rect[] rule60(MyFrame2 frame, Ball ball) {
    ...
    Rect[] rects = new Rect[n * (2 * n + 1) + 1];
    ...
    return rects;
}

public void run() {
    ...
    Rects rects = rule60(this, ball);
    ...
}

あるいは、rule60メソッドのrects変数をローカル変数ではなくインスタンス変数にする方法もありますが、値を代入するまでは値がnullなので注意が必要です。

1Like

Comments

  1. @iaojfkojgpakm

    Questioner

    回答ありがとうございます。
    public void rule60(MyFrame2 frame, Ball ball)から
    public Rect[] rule60(MyFrame2 frame, Ball ball)に変更し、
    image.png
    最後にreturn rects;を加えました。
    image.png
    そしてrunメソッドでRect[] rects = rule60(this, ball);を加えるとまた赤線が引かれてしまいました。エラーの内容は「型 PingPongGame のメソッド RectBound(Ball, Player, Rect) は引数 (Ball, Player, Rect[]) に適用できません」です。image.png
    何か解決策はありますでしょうか?
    何度もすみません。お願いいたします。

    RectBoundの内容です。↓
    image.png

  2. 先に「コードは画像を貼るのでなく、テキスト形式にしてください」とお願いしましたが無視ですか?

  3. @iaojfkojgpakm

    Questioner

    すみません。
    ある特定の規格を使っているのですべて公開するのは難しいです。
    わかる範囲でお願いいたします。
    すみません。

  4. 話が通じてないようです。「すべて公開」と言ってるわけではなく「コードは画像を貼るのでなく、テキスト形式にしてください」と言っているのですが・・・

    例えば、下のような画像ではなくて、

    image.jpg

    ↓ こうしてほしいと言っているのです。

    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    using System.Security.Claims;
    
    namespace WebApi.Controllers
    {
        [ApiController]
        [Route("[controller]")]
        public class WeatherForecastController : ControllerBase
        {
            private static readonly string[] Summaries = new[]
            {
                "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
            };
    
            private readonly ILogger<WeatherForecastController> _logger;
    
            public WeatherForecastController(ILogger<WeatherForecastController> logger)
            {
                _logger = logger;
            }
    
    
            // Authorize 属性を追加
            //[Authorize]
            [Authorize(Roles = "Admin")]
            [HttpGet(Name = "GetWeatherForecast")]
            public IEnumerable<WeatherForecast> Get()
            {
                // 2024/8/20
                // JWT の claim 情報は以下のようにして取得できる
                string? role = User.FindFirst(ClaimTypes.Role)?.Value;
                string? userId = User.FindFirst("UserId")?.Value;
                string? exp = User.FindFirst("exp")?.Value;
                if (exp != null)
                {
                    var ticks = long.Parse(exp) * 1000L * 1000L * 10L + 
                                DateTime.UnixEpoch.Ticks;
                    var expDateTime = new DateTime(ticks, DateTimeKind.Utc);
                    var dateTimeUtcNow = DateTime.UtcNow;
                    bool isBeforeExp = expDateTime > dateTimeUtcNow;
                }
    
                return Enumerable.Range(1, 5).Select(index => new WeatherForecast
                {
                    Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                    TemperatureC = Random.Shared.Next(-20, 55),
                    Summary = Summaries[Random.Shared.Next(Summaries.Length)]
                })
                .ToArray();
            }
        }
    }
    

コードは画像を貼るのでなく、テキスト形式にしてください。でないと、エラーメッセージの rects がどこにあるか検索するとか、コピペして試すということができません。なお、その際は Markdown 記法で書いてください。

0Like

エラーの原因は、runメソッド内のローカル変数、あるいは、PingPongGameクラス?のフィールドとして、rectsが見つからないからですね。
ここから先はRectBoundsメソッドに渡すrectsが何を意味しているのかによります。
rule60メソッドでRectの配列を作成して、それをRectBoundsメソッドでも参照したいとかであれば、rectsを戻り値として返すか、クラスのフィールドに変更するか、という形になると思います。

0Like

Your answer might help someone💌