这是一个学校项目。目标是创建一个读取用户输入的程序,然后通过随机删除字符缩短该输入,直到达到140个字符。这是我到目前为止所做的。目前,它只删除一个字符,然后停止运行。感谢您的任何建议
import java.util.Scanner;
import java.util.Random;
public class Main {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter the tweet you want to shorten:");
String tweet = null;
tweet = keyboard.nextLine();
int tweetLength = tweet.length();
Random rand = new Random();
do {
} while (tweetLength <= 140); {
int characterposition = rand.nextInt(tweetLength);
String shorttweet = tweet.substring(0, characterposition-1);
String shorttweet2 = tweet.substring(characterposition);
tweet = shorttweet + shorttweet2;
System.out.println("Shortented Tweet: " + tweet);
tweetLength = tweet.length();
}
答案 0 :(得分:1)
循环的格式错误。你应该使用:
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter the tweet you want to shorten:");
String tweet = null;
tweet = keyboard.nextLine();
int tweetLength = tweet.length();
Random rand = new Random();
while (tweetLength > 140) {
int characterposition = rand.nextInt(tweetLength);
String shorttweet = tweet.substring(0, characterposition);
String shorttweet2 = tweet.substring(characterposition + 1);
tweet = shorttweet + shorttweet2;
System.out.println("Shortented Tweet: " + tweet);
tweetLength = tweet.length();
}
之前你所拥有的是一个空的do-while
循环,后跟一个代码块,这就是为什么它只发生一次。请注意,我也改变了循环条件 - 我们应该在长度大于140时循环,而不是在小于。
出于学习目的,以下是您的原始循环:
do {
//you didn't do anything inside the loop!
} while (tweetLength <= 140);
//all of your code was after the loop
编辑:
我们还需要修复此行rand.nextInt(tweetLength)
,因为这将在0(包括)和int
之间返回tweetLength
(不包括)。当这返回0时,下一行将中断,因为您正在调用substring(0, -1)
。感谢PatrickParker这一点
答案 1 :(得分:1)
您最好将String
替换为StringBuilder
,这对于此类操作要快得多:
private static String shorten(String str, int length) {
StringBuilder sb = new StringBuilder(str);
Random rand = new Random();
while (sb.length() > length) {
int pos = rand.nextInt(sb.length());
// The deleteCharAt() method deletes the char at the given
// position, so we can directly use the retrieved value
// from nextInt() as the argument to deleteCharAt().
sb.deleteCharAt(pos);
}
return sb.toString();
}
回答你的问题:
您正在使用do-while循环,其格式为:
do {
// Things to do
} while (condition);
这段代码背后的阻塞与此循环无关。它只是一个匿名代码块:
{
// Statements
}
首先执行空do-while
循环,然后执行下面的代码 - 当然。
您应该使用while
循环代替:
while (lengthOfString > 140) {
// remove a character
}