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

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

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

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

解決済

Java nullの分岐

oimo0505
oimo0505

総合スコア20

Java

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

1回答

0評価

0クリップ

279閲覧

投稿2022/07/21 06:10

編集2022/07/21 16:58

前提

現在、日付を聞かれたときに対する返答と計算ができるプログラムを作成中です。
現状計算はできるのですが、例えば今日の日付は?と入力するとエラーが出てしまい日付が表示されません。文字列に空白がない場合のコードが不適切のように思うのですがどうにも改善できず、行き詰まっている状況です。

実現したいこと

空白があると計算を、今日の日付は?もしくは昨日の日付は?と聞かれると該当する日付を表示する。

(計算の例)
java b
ご用件は?>3 たす 5 は?
8.0です。
ご用件は?>

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

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 1 at b.main(a.java:73)

該当のソースコード

java

import java.io.*; class a { String todayStr = new java.text.SimpleDateFormat("yyyyMMdd").format(new java.util.Date()); int todayInt = Integer.parseInt(todayStr); static int getYear(int todayInt) { return todayInt / 10000; } static int getMonth(int todayInt) { return (todayInt % 10000) / 100; } static int getDay(int todayInt) { return todayInt % 100; } static void printDate(int todayInt) { int year = a.getYear(todayInt); int month = a.getMonth(todayInt); int day = a.getDay(todayInt); System.out.println(year + "年" + month + "月" + day + "日"); } static boolean isLeapYear(int todayInt){ int year = a.getYear(todayInt); return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); } static int dec1Day(int todayInt) { int year = a.getYear(todayInt); int month = a.getMonth(todayInt); int day = a.getDay(todayInt); day--; if (day == 0) { month--; if (month == 0) { year--; month = 12; day = 31; } else { int[] monthEnds = getMonthEnds(todayInt); day = monthEnds[month - 1]; } } return ((year * 100) + month) * 100 + day; } static int [] getMonthEnds(int todayInt) { if (a.isLeapYear(todayInt)) { return new int[] {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; } else { return new int[] {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; } } } class b { public static void main(String [] args)throws IOException{ String todayStr = new java.text.SimpleDateFormat("yyyyMMdd").format(new java.util.Date()); int todayInt = Integer.parseInt(todayStr); int year = a.getYear(todayInt); int month = a.getMonth(todayInt); int day = a.getDay(todayInt); while (true) { System.out.print("ご用件は?"); BufferedReader br = new BufferedReader (new InputStreamReader (System.in)); String str = br.readLine(); String [] splitInput = str.split(" "); double sum = 0; if (splitInput.length == 1 ) { if (str.equals("今日の日付は?")) { System.out.println(year+"年"+month+"月"+day+"日"); } else if (str.equals("昨日の日付は?")) { a.printDate(a.dec1Day(todayInt)); } } if (splitInput[1].equals("たす")){ double dnum1 = Integer.parseInt(splitInput[0]); double dnum2 = Integer.parseInt(splitInput[2]); sum = dnum1 + dnum2; System.out.println(sum + "です。"); } else if (splitInput[1].equals("ひく")){ double dnum1 = Integer.parseInt(splitInput[0]); double dnum2 = Integer.parseInt(splitInput[2]); sum = dnum1 - dnum2; System.out.println(sum + "です。"); } else if (splitInput[1].equals("かける")){ double dnum1 = Integer.parseInt(splitInput[0]); double dnum2 = Integer.parseInt(splitInput[2]); sum = dnum1 * dnum2; System.out.println(sum + "です。"); } else if (splitInput[1].equals("わる")){ double dnum1 = Integer.parseInt(splitInput[0]); double dnum2 = Integer.parseInt(splitInput[2]); sum = dnum1 / dnum2; System.out.println(sum + "です。"); } } } }

試したこと

if文を用いてsplitInput[1]がnullの場合とちがう場合で分岐させた。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

m.ts10806

2022/07/21 06:13

起きてる問題以前に気になることがあります。 クラスaとクラスbが親子関係(継承)になっているのはどういう意図でしょうか? クラスaは派生クラスでもなんでもない、何も関係ない単体モジュールに見えます。
oimo0505

2022/07/21 07:06

m.ts10806様 確かにextends必要ありませんでした。意図はなかったため修正しておきました。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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