Java:局部变量可能尚未初始化?

use*_*817 0 java arrays methods boolean while-loop

问题:编写一个读取实数列表的程序.程序结束后,它应该只打印出唯一的数字.也就是说,只有列表中出现一次的数字.如果列表中有超过50个唯一编号,那么您应该只打印前50个.

import java.util.*;
import java.io.*;
import java.util.Arrays;


public class Hmwk {

    public static void main(String[] args) throws FileNotFoundException {
        Scanner input=new Scanner (new File ("input.txt"));
        int n = 0;
        final int MAX_SIZE = 50;
        double[] numbersArray;
        while (input.hasNextDouble() && n<MAX_SIZE){
            double in = input.nextDouble();
            if (inList(in,numbersArray))
                numbersArray[n]=in;
                n++;

        }
        printReport(numbersArray);
    }


    public static boolean inList(double number, double[] list){
        for (double i : list) {
            if (i == number){
                return false;
            }
            else
                return true;
        }
    }

    public static void printReport(double[] list) {
        System.out.printf("The unique numbers were", Arrays.toString(list));
    }

}
Run Code Online (Sandbox Code Playgroud)

我收到错误,说numberArray可能尚未初始化.我也得到一个错误,说我的布尔方法inList必须返回一个类型布尔值,这让我困惑,因为我有两个选项返回true或false.任何帮助深表感谢.

Lui*_*oza 6

实际上,你的变量

double[] numbersArray;
Run Code Online (Sandbox Code Playgroud)

没有初始化,只是宣布.您可以将其初始化为:

double[] numbersArray = new double[MAX_SIZE];
Run Code Online (Sandbox Code Playgroud)

你的评论后:

它打印出"唯一的数字",但就是这样,没有唯一的数字

你正在使用

System.out.printf("The unique numbers were",Arrays.toString(list));
Run Code Online (Sandbox Code Playgroud)

两种选择:

  1. String使用%s您希望/需要将数组打印为字符串的位置发送参数:

    System.out.printf("The unique numbers were %s.",Arrays.toString(list));
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用 System.out.println

    System.out.println("The unique numbers were " + Arrays.toString(list));
    
    Run Code Online (Sandbox Code Playgroud)