You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java报错Scanner cannot be resolved to a type如何解决

报错原因及解决方案

你遇到的Scanner cannot be resolved to a type报错由拼写笔误导致:

  • 你在实例化Scanner对象时,将类名误写为了Scannner(多了1个字母n),正确类名拼写为Scanner
  • 找到代码行 Scanner scanner = new Scannner(System.in);,修改为 Scanner scanner = new Scanner(System.in); 即可解决该报错。

优化建议

  • 程序运行结束后可添加scanner.close(); 关闭输入流,避免资源占用
  • 当前代码未处理非数字输入的场景,若用户输入了不符合要求的字符会抛出InputMismatchException,可补充异常捕获逻辑进一步提升程序健壮性

修正后完整代码

package com.phillip;
import java.text.NumberFormat;
import java.util.Scanner;

public class Main{

      public static void main(String[] args) {
            final byte MONTHS_IN_YEAR = 12;
            final byte PERCENT = 100;

            int principal = 0;
            float monthlyInterest = 0;
            int numberOfPayments = 0;

            Scanner scanner = new Scanner(System.in);

            while (true) {
                  System.out.println("Principal: ");
                  principal = scanner.nextInt();
                  if (principal >= 1000 && principal <= 1_000_000) {
                        break;
                  }
                  System.out.println("Enter a value between 1000 and 1000000");
            }

            while (true) {
                  System.out.println("Annual Interest Rate: ");
                  float annualInterest = scanner.nextFloat();
                  if (annualInterest >= 1 && annualInterest <= 30) {
                        monthlyInterest = annualInterest / PERCENT / MONTHS_IN_YEAR;
                        break;
                  }
                  System.out.println("Enter a value between 1 and 30");
            }

            while (true) {
                  System.out.println("Period (Years): ");
                  byte years = scanner.nextByte();
                  if (years >= 1 && years <= 30) {
                        numberOfPayments = years * MONTHS_IN_YEAR;
                        break;
                  }
                  System.out.println("Enter a value between 1 & 30");
            }

            double mortgage = principal 
                  * (monthlyInterest * Math.pow(1 + monthlyInterest, numberOfPayments)) 
                  / (Math.pow(1 + monthlyInterest, numberOfPayments) - 1);

            String mortgageFormatted = NumberFormat.getCurrencyInstance().format(mortgage);
            System.out.println("Mortgage: " + mortgageFormatted);
            scanner.close();
      }
}

内容的提问来源于stack exchange,提问作者Phil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:36:00