Java-字符串索引超出范围错误
当我试图从用户那里收集字符串输入并将其转换为字符类型时,我不断收到一个超出范围的错误。这是我的密码: 编辑:我的问题还没有回答。我在charAt语句中添加了一个参数,但它仍然不起作用。当我运行它时,它告诉我问题出在第33行。这个问题不是我得到的链接的复制品。我无法理解这个被认为是类似的问题。有人能告诉我33号线出了什么问题吗Java-字符串索引超出范围错误,java,Java,当我试图从用户那里收集字符串输入并将其转换为字符类型时,我不断收到一个超出范围的错误。这是我的密码: 编辑:我的问题还没有回答。我在charAt语句中添加了一个参数,但它仍然不起作用。当我运行它时,它告诉我问题出在第33行。这个问题不是我得到的链接的复制品。我无法理解这个被认为是类似的问题。有人能告诉我33号线出了什么问题吗 //Arthur Fidas import java.util.Scanner; //Needed for Scanner class import java.lang
//Arthur Fidas
import java.util.Scanner; //Needed for Scanner class
import java.lang.String;
/**
This program computes and displays the shipping charges for Fed Ex.
*/
public class FedEx
{
public static void main (String[] args)
{
final double ZONE_A = .6, ZONE_B = 1.0, ZONE_C = 1.25, ZONE_D = 1.4;
String input;
char zone;
String name;
double weight;
double total = 0.0;
int serviceCode;
int hazardCode;
double hazardCodeCalculation;
//Create a Scanner object for keyboard input
Scanner keyboard = new Scanner (System.in);
//Prompt user for package weight
System.out.println("What is the weight of the package?: ");
weight = keyboard.nextDouble();
//Prompt user for Zone
System.out.print("Enter the zone letter: ");
input = keyboard.nextLine();
zone = input.charAt(0);
//Calculate zone price
switch(zone)
{
case 'a':
case 'A':
total = weight*ZONE_A;
break;
case 'b':
case 'B':
total = weight*ZONE_B;
break;
case 'c':
case 'C':
total = weight*ZONE_C;
break;
case 'd':
case 'D':
total = weight*ZONE_D;
break;
default:
System.out.println("Please enter A, B, C, or D.");
break;
}
//Prompt user for service charge
System.out.println("Enter the Special Service number: ");
serviceCode = keyboard.nextInt();
//Caculate Service Charge
if (serviceCode == 1)
{
total += 0;
}
else if (serviceCode == 2)
{
total += 10;
}
else if (serviceCode == 3)
{
total += 25;
}
else
{
System.out.println("Please enter 1, 2, or 3.");
}
//Prompt user for Hazard Code
System.out.println("Enter the Hazard Code number :");
hazardCode = keyboard.nextInt();
//Calculate Hazard Charge
switch(hazardCode)
{
case 1:
total += 0;
break;
case 2:
hazardCodeCalculation = total * .1;
total += hazardCodeCalculation;
break;
case 3:
hazardCodeCalculation = total * .25;
total += hazardCodeCalculation;
break;
default:
System.out.println("Please enter either 1, 2, or 3.");
break;
}
}
}
实际上,我在代码部分发现了一些问题
//Prompt user for Zone
System.out.print("Enter the zone letter: ");
input = keyboard.nextLine();
zone = input.charAt();
首先,您使用.nextLine()
方法进行字符串输入,这可能会产生问题。有关这方面的更多信息,请参阅
另一个问题是,您没有为区域分配任何字符,而是应该在.charAt()
方法中传递所需字符的索引
因此,如果需要输入的字符串的第一个字符
,您可以通过两种方法执行此操作。对于另一个字符,请更改.charAt()
方法中的索引值
(一)
(二)
如果只想将一个字符
作为输入
,则可以采用字符
输入,而不是字符串
//Prompt user for Zone
System.out.print("Enter the zone letter: ");
zone = keyboard.next().charAt(0);
修正码
此外,如果您能帮助我编写代码,以下面的注释中所示的方式显示最后的计算结果,这将是非常有帮助的:您得到的超出范围错误的错误堆栈跟踪是什么?
?可能重复的错误来自我要求区域字母并使用用户输入的输入变量。然后尝试使用区域变量将输入变量转换为char,您正在调用的String#charAt
没有参数,我认为其中一些变量甚至无法编译。同样对于读取输入,最好是String#equalsIgnoreCase
,或者在使用switch
的情况下,打开输入的Character#toLowerCase
之类的内容。@ArttyFidasJr。如果答案对您有帮助,您应该接受。
//Prompt user for Zone
System.out.print("Enter the zone letter: ");
input = keyboard.next(); //In case your String input doesn't contain Space in between.
zone = input.charAt(0);
//Prompt user for Zone
System.out.print("Enter the zone letter: ");
zone = keyboard.next().charAt(0);
//Arthur Fidas
import java.util.Scanner; //Needed for Scanner class
import java.lang.String;
/**
This program computes and displays the shipping charges for Fed Ex.
*/
public class FedEx
{
public static void main (String[] args)
{
final double ZONE_A = .6, ZONE_B = 1.0, ZONE_C = 1.25, ZONE_D = 1.4;
String input;
char zone;
String name;
double weight;
double total = 0.0;
int serviceCode;
int hazardCode;
double hazardCodeCalculation;
//Create a Scanner object for keyboard input
Scanner keyboard = new Scanner (System.in);
//Prompt user for package weight
System.out.println("What is the weight of the package?: ");
weight = keyboard.nextDouble();
/*THIS FOLLOWING PORTION CAN BE CHANGED WITH PROVIDED SOLUTIONS, TRY ANY OF THEM*/
//Prompt user for Zone
System.out.print("Enter the zone letter: ");
input = keyboard.next();
zone = input.charAt(0);
/*TILL THIS*/
//Calculate zone price
switch(zone)
{
case 'a':
case 'A':
total = weight*ZONE_A;
break;
case 'b':
case 'B':
total = weight*ZONE_B;
break;
case 'c':
case 'C':
total = weight*ZONE_C;
break;
case 'd':
case 'D':
total = weight*ZONE_D;
break;
default:
System.out.println("Please enter A, B, C, or D.");
break;
}
//Prompt user for service charge
System.out.println("Enter the Special Service number: ");
serviceCode = keyboard.nextInt();
//Caculate Service Charge
if (serviceCode == 1)
{
total += 0;
}
else if (serviceCode == 2)
{
total += 10;
}
else if (serviceCode == 3)
{
total += 25;
}
else
{
System.out.println("Please enter 1, 2, or 3.");
}
//Prompt user for Hazard Code
System.out.println("Enter the Hazard Code number :");
hazardCode = keyboard.nextInt();
//Calculate Hazard Charge
switch(hazardCode)
{
case 1:
total += 0;
break;
case 2:
hazardCodeCalculation = total * .1;
total += hazardCodeCalculation;
break;
case 3:
hazardCodeCalculation = total * .25;
total += hazardCodeCalculation;
break;
default:
System.out.println("Please enter either 1, 2, or 3.");
break;
}
}
}