Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从扫描仪输入输出多个字符串_Java_String_Java.util.scanner - Fatal编程技术网

Java 从扫描仪输入输出多个字符串

Java 从扫描仪输入输出多个字符串,java,string,java.util.scanner,Java,String,Java.util.scanner,我的程序的目的是接受来自用户的整数、双倍数和字符串,当程序通过输入单词“quit”终止时,程序对整数和双倍数进行平均,并输出提交的字符串。以下是我到目前为止的情况: import java.util.*; public class Lab09 { public static void main(String [] args) { Scanner console = new Scanner(System.in); double sumI = 0;

我的程序的目的是接受来自用户的整数、双倍数和字符串,当程序通过输入单词“quit”终止时,程序对整数和双倍数进行平均,并输出提交的字符串。以下是我到目前为止的情况:

import java.util.*;

public class Lab09 {
    public static void main(String [] args) {
        Scanner console = new Scanner(System.in);

      double sumI = 0;
      double sumD = 0;
      String words = "";
      int numInputInt = 0;
      int numInputDoub = 0;
        do {
            System.out.print("Enter something: ");
            if (console.hasNextInt()) {
               int numI = console.nextInt();

            if (numI >= -100 && numI <= 100) {
               sumI += numI;
               numInputInt++;
            }
            else {
               System.out.println("Integer out of range!(-100 .. 100)");
            }

            }
         else if (console.hasNextDouble()) {
            double numD = console.nextDouble();
            if (numD >= -10.0 && numD <= 10.0) {
               sumD += numD;
               numInputDoub++;
            }
            else {
               System.out.println("Double out of range!(-10.0 .. 10.0)");
            }   

         }
         else {
            words = console.next();
         }

        } while (!words.equalsIgnoreCase("quit")); 
        System.out.println("Program terminated...");
      double avgInt = sumI / numInputInt;
      double avgDoub = sumD / numInputDoub;

      if (numInputInt > 0) {
         System.out.println("\tAveragae of Integers: " + avgInt);
      }
      else {
         System.out.println("\tNo intergers submitted");
      }
      if (numInputDoub > 0) {
         System.out.println("\tAverage of Doubles: " + avgDoub);
      }
      else {
         System.out.println("\tNo doubles submitted");
      }
      System.out.println(words);


   }

}
import java.util.*;
公共类Lab09{
公共静态void main(字符串[]args){
扫描仪控制台=新扫描仪(System.in);
双sumI=0;
双sumD=0;
字串=”;
int numinputin=0;
int numInputDoub=0;
做{
系统输出打印(“输入某物:”;
if(console.hasNextInt()){
int numI=console.nextInt();
如果(numI>=-100&&numI=-10.0&&numD 0){
System.out.println(“\t整数的平均值:“+avgInt”);
}
否则{
System.out.println(“\t未提交整数”);
}
如果(numInputDoub>0){
System.out.println(“\t双精度平均值:“+avgDoub”);
}
否则{
System.out.println(“\t未提交双倍”);
}
System.out.println(字);
}
}
整数和双数处理得很好,但我被困在字符串中。有什么办法吗? 提前感谢!

您可以使用

String input = "";
do {
    //...
    }
    else {
        input = console.next();            
        words += input + " ";
    }
    console.nextLine(); // Read the carriage return
} while (!input.equalsIgnoreCase("quit")); 
//...
System.out.println(words.trim());
连接文本,但在循环中进行时效率相当低

更好的解决方案是使用
StringBuilder

StringBuilder work = new StringBuilder(128);
String input = "";
do {
    //...
    }
    else {
        input = console.next();            
        words.append(" ").append(input);
    }
    console.nextLine(); // Read the carriage return
} while (!input.equalsIgnoreCase("quit")); 
//...
System.out.println(words);

虽然你可以建立一个单词的
列表
,但看起来你只是想把每个新词连接到你的
字符串中,就像

if (words.length() > 0) words += " "; // <-- add a space.
words += console.next(); // <-- += not =

它的工作原理应该与您所期望的一样。

我刚刚读到您的评论,您不能使用任何其他类,请尝试以下方法:

import java.util.*;

public class Lab09 {
    public static void main(String [] args) {
        Scanner console = new Scanner(System.in);

      double sumI = 0;
      double sumD = 0;
      String words = "";
      int numInputInt = 0;
      int numInputDoub = 0;
        do {
            System.out.print("Enter something: ");
            if (console.hasNextInt()) {
               int numI = console.nextInt();

            if (numI >= -100 && numI <= 100) {
               sumI += numI;
               numInputInt++;
            }
            else {
               System.out.println("Integer out of range!(-100 .. 100)");
            }

            }
         else if (console.hasNextDouble()) {
            double numD = console.nextDouble();
            if (numD >= -10.0 && numD <= 10.0) {
               sumD += numD;
               numInputDoub++;
            }
            else {
               System.out.println("Double out of range!(-10.0 .. 10.0)");
            }   

         }
         else {
            words = words.concat(" ").concat(console.next());

         }

        } while (!words.contains("quit")); 
        System.out.println("Program terminated...");
      double avgInt = sumI / numInputInt;
      double avgDoub = sumD / numInputDoub;

      if (numInputInt > 0) {
         System.out.println("\tAveragae of Integers: " + avgInt);
      }
      else {
         System.out.println("\tNo intergers submitted");
      }
      if (numInputDoub > 0) {
         System.out.println("\tAverage of Doubles: " + avgDoub);
      }
      else {
         System.out.println("\tNo doubles submitted");
      }
      System.out.println(words);


   }

}
import java.util.*;
公共类Lab09{
公共静态void main(字符串[]args){
扫描仪控制台=新扫描仪(System.in);
双sumI=0;
双sumD=0;
字串=”;
int numinputin=0;
int numInputDoub=0;
做{
系统输出打印(“输入某物:”;
if(console.hasNextInt()){
int numI=console.nextInt();
如果(numI>=-100&&numI=-10.0&&numD 0){
System.out.println(“\t整数的平均值:“+avgInt”);
}
否则{
System.out.println(“\t未提交整数”);
}
如果(numInputDoub>0){
System.out.println(“\t双精度平均值:“+avgDoub”);
}
否则{
System.out.println(“\t未提交双倍”);
}
System.out.println(字);
}
}

谢谢,但我不能使用任何其他类,除了我使用过的那些类
StringBuilder
在循环中非常有效,因为您没有创建“批次”临时
String
s,否则,第一个示例应该让您开始…而且,我不会使用
words
来检查退出条件,只有当用户为第一个单词输入
quit
时,它才会为真…字符串“quit”的情况没关系,我不需要它在循环测试中,对吗?定义没关系。如果你的意思是它总是小写,那么你可以跳过
toLowerCase()
使用你的方法我得到了一个无限循环它需要
trim
?输入是在空格后添加的…不是吗?@MadProgrammer我假设OP得到了回车符或换行符;我不明白否则它怎么会无限循环。为什么要使用
buffer.append(“+word”);
?事实上,为什么要使用
StringBuffer
呢?我不能使用其他类方法program@MadProgrammer如果项目需要任何其他扩展,或者他需要的不仅仅是一个字符串,那么这个类是非常有用和安全的。你明白为什么要使用
StringBuffer
,它试图实现什么吗?因为你的示例表明您不需要。因为它不是线程程序,所以不需要添加
StringBuffer
提供的同步,并且还有其他可用的解决方案。。。
import java.util.*;

public class Lab09 {
    public static void main(String [] args) {
        Scanner console = new Scanner(System.in);

      double sumI = 0;
      double sumD = 0;
      String words = "";
      int numInputInt = 0;
      int numInputDoub = 0;
        do {
            System.out.print("Enter something: ");
            if (console.hasNextInt()) {
               int numI = console.nextInt();

            if (numI >= -100 && numI <= 100) {
               sumI += numI;
               numInputInt++;
            }
            else {
               System.out.println("Integer out of range!(-100 .. 100)");
            }

            }
         else if (console.hasNextDouble()) {
            double numD = console.nextDouble();
            if (numD >= -10.0 && numD <= 10.0) {
               sumD += numD;
               numInputDoub++;
            }
            else {
               System.out.println("Double out of range!(-10.0 .. 10.0)");
            }   

         }
         else {
            words = words.concat(" ").concat(console.next());

         }

        } while (!words.contains("quit")); 
        System.out.println("Program terminated...");
      double avgInt = sumI / numInputInt;
      double avgDoub = sumD / numInputDoub;

      if (numInputInt > 0) {
         System.out.println("\tAveragae of Integers: " + avgInt);
      }
      else {
         System.out.println("\tNo intergers submitted");
      }
      if (numInputDoub > 0) {
         System.out.println("\tAverage of Doubles: " + avgDoub);
      }
      else {
         System.out.println("\tNo doubles submitted");
      }
      System.out.println(words);


   }

}