gpt4 book ai didi

java - stringindexoutofbounds 与货币转换器java程序

转载 作者:行者123 更新时间:2023-11-30 04:37:09 25 4
gpt4 key购买 nike

我遇到了摘要未显示的问题。我应该通过添加对象数组来修改以前的 Java 分配。在循环内,实例化每个单独的对象。确保用户无法继续添加超出数组大小的另一个外部转换。 用户从菜单中选择退出后,提示用户是否要显示摘要报告。如果他们选择“Y”,则使用您的对象数组显示以下报告:

Item     Conversion       Dollars     Amount  
1 Japanese Yen 100.00 32,000.00
2 Mexican Peso 400.00 56,000.00
3 Canadian Dollar 100.00 156.00

等等

转化次数 = 3

编译时没有错误..但是当我运行程序时一切都很好,直到我点击 0 结束转换并让它询问我是否想查看摘要。此错误显示:

线程“main”中出现异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0 在 java.lang.String.charAt(String.java:658) 在 Lab8.main(Lab8.java:43)

我的代码:

import java.util.Scanner;
import java.text.DecimalFormat;

public class Lab8
{
public static void main(String[] args)
{
final int Max = 10;
String a;
char summary;
int c = 0;
Foreign[] Exchange = new Foreign[Max];
Scanner Keyboard = new Scanner(System.in);

Foreign.opening();

do
{
Exchange[c] = new Foreign();
Exchange[c].getchoice();
Exchange[c].dollars();
Exchange[c].amount();
Exchange[c].vertical();
System.out.println("\n" + Exchange[c]);
c++;

System.out.println("\n" + "Please select 1 through 4, or 0 to quit" + >"\n");
c= Keyboard.nextInt();

}
while (c != 0);


System.out.print("\nWould you like a summary of your conversions? (Y/N): ");
a = Keyboard.nextLine();
summary = a.charAt(0);
summary = Character.toUpperCase(summary);

if (summary == 'Y')
{
System.out.println("\nCountry\t\tRate\t\tDollars\t\tAmount");
System.out.println("========\t\t=======\t\t=======\t\t=========");
for (int i=0; i < Exchange.length; i++)
System.out.println(Exchange[i]);

Foreign.counter();
}
}
}

我查看了第 43 行及其这一行:summary = a.charAt(0);

但是我不知道哪里出了问题,有人可以指出吗?谢谢。

最佳答案

问题不完全在于该行,而是在于前一个 while 的最后一行。您已使用以下方式读取了 int: -

c= Keyboard.nextInt();

如果您看到 Scanner#nextInt 的文档方法,它从用户输入中读取下一个标记。因此,当您传递整数值时,Keyboard.nextInt 不会读取末尾的 linefeed(由于您按 enter 键而传递的结果) ,然后剩下的内容将由以下人员读取:-

a = Keyboard.nextLine();

while 退出后。因此,基本上这个语句是读取前面的 Keyboard.nextInt 调用留下的换行符,因此 a 包含一个 empty 字符串,其中包含换行符在末尾。因此你会得到Exception

解决方法:-

您可以在此语句之前触发一个空的Keyboard.nextLine,这将消耗换行作为其输入,以便您的下一个用户输入在其之后开始。

    // Your code before this while
} while (c != 0);

Keyboard.nextLine(); // Add this line before the next line

System.out.print("\nWould you like a summary of your conversions? (Y/N): ");
a = Keyboard.nextLine();
<小时/>

或者,另一种方法是您也可以使用Keyboard.nextLine来读取整数值。然后使用 Integer.parseInt 方法将其转换为整数。但要小心,您必须进行一些异常处理。因此,如果您仍在研究异常处理,那么您可以采用第一种方法。因此,在您的 do-while 中,您可以这样做:-

try {
c = Integer.parseInt(Keyboard.nextLine());
} catch (NumberFormatException e) {
e.printStackTrace();
}

关于java - stringindexoutofbounds 与货币转换器java程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13205990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com