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

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

ただいまの
回答率

87.59%

[Java]ファイルを使った簡単な問題に関する質問です。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 395

score 5

前提・実現したいこと

ファイルから数字を引用して各桁の数字を足していくプログラムを作っています。

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

例外java.io.FileNotFoundExceptionは報告されません。スローするには、捕捉または宣言する必要があります
 >>fileInputのシンボルが見つけられません

該当のソースコード

import java.util.Scanner;
import java.io.*;
public class Lab4_3 {

    public static void main (String[] args){
        //declair the valiables
        int numberInput;
        int integerInput;
        int digitSum = 0;
        int counter = 0;
        String fileName = "";

        //get an input
        Scanner input = new Scanner(System.in);
        System.out.println("How many numbers in input");
        numberInput = input.nextInt();

        //see if the input is positive or negative
        while(numberInput - 1 >= counter){

            File openFile = new File(fileName);

            // it checks if the file exists
            if (openFile.exists()) {

            // it will then crate a scanner object for the file
            Scanner fileInput = new Scanner(openFile);

            // it then will check if there is no integers in the file
            if (!fileInput.hasNextInt()) {
                // it will give an error if there is no error
                System.out.println("The file doesn't contain any integers. Exit program!");
            } 

            else {
                // it will then loop through the integers until there is no more integers
                // anymore
                while (fileInput.hasNextInt()) {

                    // it will get the next integer from the file
                    int lineInput = fileInput.nextInt();

                if (lineInput <= 0){
                System.out.println("It is a negative integer.");
                }

                //if positive, stat a loop and get the sum of the gidits
                else{
                    while (lineInput != 0){

                    }
                        digitSum += lineInput % 10;
                        lineInput = lineInput / 10;
                }

                System.out.println("The sum of the digits is " + digitSum);
                }

            counter++;
            }

            }
        }
    }

}
------------------------------------
import java.util.Scanner;
import java.io.*;
public class Lab4_3 {

    public static void main (String[] args){
        //declair the valiables
        int numberInput;
        int integerInput;
        int digitSum = 0;
        int counter = 0;
        String fileName = "";

        //get an input
        Scanner input = new Scanner(System.in);
        System.out.println("How many numbers in input");
        numberInput = input.nextInt();

        //see if the input is positive or negative
        while(numberInput - 1 >= counter){

                try{
                File openFile = new File(fileName);

                // it checks if the file exists
                if (openFile.exists()) {

                // it will then crate a scanner object for the file
                Scanner fileInput = new Scanner(openFile);
                }
                }

                catch (IOException e) {
                System.out.println("IOExceptionが発生");
                }

                // it then will check if there is no integers in the file
                if (!fileInput.hasNextInt()) {
                    // it will give an error if there is no error
                    System.out.println("The file doesn't contain any integers. Exit program!");
                } 

                else {
                    // it will then loop through the integers until there is no more integers
                    // anymore
                    while (fileInput.hasNextInt()) {

                        // it will get the next integer from the file
                        int lineInput = fileInput.nextInt();

                    if (lineInput <= 0){
                    System.out.println("It is a negative integer.");
                    }

                    //if positive, stat a loop and get the sum of the gidits
                    else{
                        while (lineInput != 0){

                        }
                            digitSum += lineInput % 10;
                            lineInput = lineInput / 10;
                    }

                    System.out.println("The sum of the digits is " + digitSum);
                    }

                counter++;
                }



        }
    }

}

試したこと

IOExceptionを入れようとしましたが、書き方だ正しくないのか、さらにエラーが出てしましました。
>>追記としてIOExeptionを入れたものです。
fileInputのシンボルが見つけられません というエラーが出ています。

補足情報(FW/ツールのバージョンなど)

NetBeanの12.0バージョンを使っています。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • maisumakun

    2020/09/26 12:27

    > IOExceptionを入れようとしましたが、書き方だ正しくないのか、さらにエラーが出てしましました。

    そちらのバージョンのコードも書いてください。

    キャンセル

  • ChieSuzuki

    2020/09/26 13:29

    import java.util.Scanner;
    import java.io.*;
    public class Lab4_3 {

    public static void main (String[] args){
    //declair the valiables
    int numberInput;
    int integerInput;
    int digitSum = 0;
    int counter = 0;
    String fileName = "";

    //get an input
    Scanner input = new Scanner(System.in);
    System.out.println("How many numbers in input");
    numberInput = input.nextInt();

    //see if the input is positive or negative
    while(numberInput - 1 >= counter){

    try{
    File openFile = new File(fileName);

    // it checks if the file exists
    if (openFile.exists()) {

    // it will then crate a scanner object for the file
    Scanner fileInput = new Scanner(openFile);


    // it then will check if there is no integers in the file
    if (!fileInput.hasNextInt()) {
    // it will give an error if there is no error
    System.out.println("The file doesn't contain any integers. Exit program!");
    }

    else {
    // it will then loop through the integers until there is no more integers
    // anymore
    while (fileInput.hasNextInt()) {

    // it will get the next integer from the file
    int lineInput = fileInput.nextInt();

    if (lineInput <= 0){
    System.out.println("It is a negative integer.");
    }

    //if positive, stat a loop and get the sum of the gidits
    else{
    while (lineInput != 0){

    }
    digitSum += lineInput % 10;
    lineInput = lineInput / 10;
    }

    System.out.println("The sum of the digits is " + digitSum);
    }

    counter++;
    }
    }
    }

    catch (IOException e) {
    System.out.println("IOExceptionが発生");
    }



    }
    }

    }

    正しいのかわかりませんが、このようにコードのオーダーを変えるとエラーが消えました!

    キャンセル

回答 1

checkベストアンサー

0

エラーメッセージのとおりです。Fileを受け取るScannerのコンストラクタは、当該のファイルが存在しなかった場合にFileNotFoundExceptionを投げます。これについてthrowsを宣言するかcatchするかの必要があります。

いちおうopenFile.exists()でのチェックは行っているようですが、運悪くチェックしてからScannerに投げるまでのタイミングでファイルが削除されると、実際にファイルが存在しない自体に遭遇してしまいます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/09/26 12:32

    具体的にどのようにすればいいか教えていただけないでしょうか??

    キャンセル

  • 2020/09/26 12:38

    「IOExceptionを入れようとし」たコードと、それでどのようなエラーが出たのかもご提示いただけないでしょうか?

    キャンセル

  • 2020/09/26 13:18

    遅くなりました。更新いたしました。

    キャンセル

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

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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