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
相关产品推荐
相关产品推荐

