用以下代码阅读以下文本文档内容,为什么i的值最终是1?
60.0 F K
70.0 F R
30.0 f c
50.5 C F
60.5 C K
70.5 C R
20.0 K F
30.0 K C
40.0 K R
20.5 R F
30.5 R C
40.5 R K
0.0 D f
0.0 C f
25.3 a k
27 f a
54 f c
20 k c
try {
String fileName;
in = new Scanner(System.in);
System.out.print("Please enter a file name: ");
fileName = in.next();
File inputFile = new File(fileName);
in = new Scanner(inputFile);
double[] temps = new double[100];
char[] scales = new char[100];
char[] newScales = new char[100];
int i = 0, j = 0, k = 0;
while(in.hasNextDouble()){
temps[i] = in.nextDouble();
i++;
}
in = new Scanner(inputFile);
while (in.hasNext()){
scales[j]=in.next().charAt(0);
in.next();
j++;
}
in = new Scanner(inputFile);
while(in.hasNext()){
in.next();
newScales[k] = in.next().charAt(0);
k++;
}
TemperatureConversion conversion = new TemperatureConversion();
double[] newTemps = new double[100];
for(int a = 0; a <= i; a++){
newTemps[a] = conversion.doConversion(temps[a],scales[a],newScales[a]);
if (newTemps[a] == 0){
System.out.println("error invalid original scale specified " + scales[a]);
}else{
System.out.println(temps[a]+""+ scales[a] + " is " + newTemps[a] + newScales[a]);
}
}
}catch (IOException exception){
exception.printStackTrace();
}
第一列是double类型,但是后面的是字符类型,所以第一个循环只满足一次,就结束了。
try {
String fileName;
in = new Scanner(System.in);
System.out.print("Please enter a file name: ");
fileName = in.next();
File inputFile = new File(fileName);
in = new Scanner(inputFile);
double[] temps = new double[100];
char[] scales = new char[100];
char[] newScales = new char[100];
int i = 0, j = 0, k = 0;
while(in.hasNextDouble()){
temps[i] = in.nextDouble();
scales[i]=in.next().charAt(0);
newScales[i] = in.next().charAt(0);
i++;
}
TemperatureConversion conversion = new TemperatureConversion();
double[] newTemps = new double[100];
for(int a = 0; a < i; a++){
newTemps[a] = conversion.doConversion(temps[a],scales[a],newScales[a]);
if (newTemps[a] == 0){
System.out.println("error invalid original scale specified " + scales[a]);
}else{
System.out.println(temps[a]+""+ scales[a] + " is " + newTemps[a] + newScales[a]);
}
}
}catch (IOException exception){
exception.printStackTrace();
}
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据提供的代码和文本文档内容,i的最终值是1的原因是因为在第一个while循环中,只有一个数字60.0被读取到temps数组中,而后面的文本内容并不是以double类型的数字开头,所以循环在读取到60.0后就终止了。
具体来说,第一个while循环的目的是将文本文档中的数字读取到temps数组中。然而,第一个while循环仅在遇到下一个double类型的数字之前运行。在这种情况下,60.0是唯一一个满足条件的数字。
由于只有一个数字被读取到temps数组中,所以i的最终值是1。
如果你希望读取所有的数字并将它们存储到temps数组中,你可以修改代码如下:
while (in.hasNextDouble()) {
temps[i] = in.nextDouble();
i++;
in.next(); // 读取数字后的空格或其他分隔符
}
通过在读取数字后使用in.next()
来跳过数字后的分隔符,可以确保循环继续读取下一个数字并将其存储到temps数组中。这样,i的值将反映实际读取的数字数量。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
while(in.hasNext()){
if((m-3)%3==0){
temps[i] = in.nextDouble();
++i;
++m;
continue;
}
if((m-1)%3==0){
scales[j]=in.next().charAt(0);
++j;
++m;
continue;
}
if((m-2)%3==0){
newScales[k] = in.next().charAt(0);
++k;
++m;
continue;
}
}
【以下回答由 GPT 生成】
问题的原因是在第二个while循环中,使用了两次in.next()方法,并且没有对第二次调用的返回值进行处理,导致每次都跳过了一个值。因此,变量j的值增加了,但填充数组scales的时候每次都会跳过一个值。
要解决这个问题,你可以不使用第二个while循环,而是在第一个while循环中同时填充两个数组。具体步骤如下:
while (in.hasNextDouble()) {
temps[i] = in.nextDouble();
scales[i] = in.next().charAt(0);
i++;
}
double[] temps = new double[i];
char[] scales = new char[i];
这样,temps数组和scales数组就会正确地填充所有的数据。最终,变量i的值将等于实际填充的数量。
下面是修改后的代码:
try {
String fileName;
Scanner in = new Scanner(System.in);
System.out.print("请输入文件名: ");
fileName = in.next();
File inputFile = new File(fileName);
in = new Scanner(inputFile);
int i = 0;
while (in.hasNextDouble()) {
temps[i] = in.nextDouble();
scales[i] = in.next().charAt(0);
i++;
}
double[] temps = new double[i];
char[] scales = new char[i];
in.close();
// 使用填充好的temps和scales数组进行其他操作
} catch (FileNotFoundException e) {
System.out.println("文件未找到");
}
这样,你就可以正确地读取文本文档中的数据,并将其填入相应的数组中,并且变量i的值将等于实际填充的数量。