Java 从扫描仪输入输出多个字符串
我的程序的目的是接受来自用户的整数、双倍数和字符串,当程序通过输入单词“quit”终止时,程序对整数和双倍数进行平均,并输出提交的字符串。以下是我到目前为止的情况: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;
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);
}
}