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

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

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

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

Q&A

解決済

5回答

1676閲覧

javaで入力された文字列に該当文字が含まれていれば結果を出力するプログラムの際に出る警告文

yuki8

総合スコア11

Java

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

1グッド

0クリップ

投稿2018/04/11 00:25

編集2018/04/11 02:21

先ほどのコードはこちらの思い違いだったので(通常通り動くのに間違った結果を記載しておりました。)こちらのエラーについて質問させていただきます。

import java.util.*; import java.util.Scanner; import java.math.BigDecimal; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //入力個数 String line1 = sc.nextLine(); int n = Integer.parseInt(line1); //初期値 Double [] ipaper; ipaper = new Double[2]; String [] paper; paper = new String[2]; int answer = 0; BigDecimal sum; sum = BigDecimal.ZERO; // valueOfメソッドを使用して初期化 sum = BigDecimal.valueOf(0.0); // コンストラクタで初期化 sum = new BigDecimal(0.0); //入力個数まで for(int i = 0; i < n; i++){ String line2 = sc.nextLine(); paper = line2.split(" "); for(int j = 0; j < 2; j++) { ipaper [j] = Double.parseDouble(paper[j]); } //初期化 int result = 0; double zyosu = 0.01; //3のつく場合 result = paper[0].indexOf("3"); if (result != -1) { zyosu = 0.03; } //5のつく場合 result = paper[0].indexOf("5"); if (result != -1) { zyosu = 0.05; } //System.out.println(result); BigDecimal rate = new BigDecimal(zyosu); BigDecimal unit = new BigDecimal(ipaper[1]); //System.out.println(rate); unit = unit.multiply(rate); sum = sum.add(unit); sum = sum.setScale(0, BigDecimal.ROUND_DOWN); } System.out.println(sum); } }

こちらの実行時に
こちらの警告が出る場合の該当クラスが1つずつ実行してみてもわかりません。原因の部分を教えていただけると幸いです。
Note: Main.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

書き方が違うのかもしれませんが、ご回答いただければと思います。宜しくお願い致します。

swordone👍を押しています

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

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

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

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

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

guest

回答5

0

ベストアンサー

おそらく警告の対象はこれと思われます。

java

1sum = sum.setScale(0, BigDecimal.ROUND_DOWN);

BigDecimal#setScale(int, int)およびBigDecimalクラスのstatic int定数はJava9から非推奨となっています。
(以前から推奨はされていなかったが、非推奨のアノテーションの機能が強化されたことで明示的にされたものと思われる)
代わりに、BigDecimal#setScale(int, RoundingMode)を使うよう勧められています。

java

1sum = sum.setScale(0, java.math.RoundingMode.DOWN);

ただこれ以外も、

なんでipaperをdoubleではなくラッパークラスのDoubleの配列にしているのかとか、
そもそもどこでも使っていないとか、
sumを何回初期化しているのかとか、
そもそもnew BigDecimal(double)は正確に変換できないとか、
文字列に含まれるかの判定ならcontains使えば一発だとか、

突っ込みどころが多すぎて…

投稿2018/04/11 02:41

編集2018/04/11 04:32
swordone

総合スコア20651

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

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

yuki8

2018/04/11 04:24

java:66: error: cannot find symbol sum = sum.setScale(0, RoundingMode.DOWN); このようなエラーが出てしまいましたが、何かimportが足りないということでしょうか?
swordone

2018/04/11 04:33

RoundingModeはjava.mathパッケージに属するのでimport宣言するか、編集後の回答のように完全修飾名で書くかのいずれかですね。
yuki8

2018/04/11 04:36

わかりました。ありがとうございます。無事警告文が消えました。
guest

0

3の時も該当なしと出るのはよくないので、条件判定を見直すと良いと思います。
いろいろ書き方がありますが、例えばこういう感じでしょうか。

また、Scannerは処理が終わったらcloseしておきましょう。

import java.util.Scanner; public class ThreeFiveChecker { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String line = sc.nextLine(); sc.close(); if (line.contains("3")) { if (line.contains("5")) { System.out.println("3と5が該当しています"); } else { System.out.println("3が該当しています"); } } else if (line.contains("5")) { System.out.println("5が該当しています"); } else { System.out.println("該当なし"); } } }

投稿2018/04/11 00:46

Udomomo

総合スコア1524

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

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

退会済みユーザー

退会済みユーザー

2018/04/11 00:53

全角半角問題のことだったり?
Udomomo

2018/04/11 01:01

その可能性もありますね。
yuki8

2018/04/11 01:17

ありがとうございます。順序を変えたら問題なく動きました。
guest

0

... 原因の部分を教えていただけると幸いです。 ...

質問文のコードを ecpipse に paste してみました。
62 行目に問題があることが 黄色マークで示すされています。
ROIUND_DOWN 部分が、問題であるとも表示されており、そこにマウスを持っていくと
deplicated であることことがわかります。
簡易修正情報も定時されています。

イメージ説明

投稿2018/04/11 15:25

katoy

総合スコア22324

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

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

0

これっておそらくエラーではなくて警告ですよね?
読んだままのことだと思います。

Main.java uses or overrides a deprecated API.

非推奨のAPIを使用またはオーバーライドしている

Recompile with -Xlint:deprecation for details.

詳細については、-Xlint:deprecationを使用して再コンパイルしてください。

javac -Xlint:deprecation 警告が出ているクラス.java
のようにコンパイルすると、どのAPIに対して警告されてるのか分かりますってことですね。

これでAPIを特定して、そのAPIを代替APIに変えて実装するか、
どうしてもそのAPIを使いたければ、将来的に使えなくなる可能性があることを理解して
そのまま使ってもいいと思います。

そのまま使いたいけど警告文がうっとうしい場合は、以下の方法で抑止することもできます。

  • ソースの警告がでているAPI呼び出しのところに、@SuppressWarnings("deprecation")をつける
  • javac -Xlint:-deprecation でコンパイルする

投稿2018/04/11 01:38

root_jp

総合スコア4666

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

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

yuki8

2018/04/11 01:49 編集

ご回答ありがとうございます。原因は理解させていただきましたが、該当部分がどうしてもわかりません。 コンパイルも環境がブラウザ上で実行しているためおそらく使えないかと思われます。
guest

0

Note: Main.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

「Main.javaの中で、非推奨とされているAPI(クラスのメソッド)を利用している箇所がある」という警告ですね。
Javaのバージョンアップに伴い、よりよいクラスやメソッドが追加され、古いクラスやメソッドの利用が非推奨となることがあります。

2行目にあるように、コンパイル時のオプションとして-Xlint:deprecationを指定してコンパイルすると詳細な情報が得られるかと思います。(どのクラス、メソッドが非推奨であるか)

対処としては、非推奨となっているクラス、メソッドを利用しない方法での実装に変更することとなりますね。
原因となっているクラス、メソッドに変わる実装方法を確認するとよいと思います。

投稿2018/04/11 01:12

takyafumin

総合スコア2335

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

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

yuki8

2018/04/11 01:51

ご回答ありがとうございます。残念ながらブラウザ上で実行しているため-Xlint:deprecationが使えない状況です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問