我正在打印一个准空方块,看起来像下面的例子(10个星号,10个星号):
**********
* *
* *
* *
* *
* *
* *
* *
* *
**********
我的代码无法动态生成由用户输入指定的行数和列数的正方形(它适用于10行和10列,但只要我将数字更改为20,星号的数量就会生成不要改变。以下是我的代码:
String STAR = "*";
String star1 = "**********";
int MAX = 10;
for (int row = 0; row <= MAX; row += 1 ) {
for (int col = 0; col <= MAX ; col += 10) {
if (row == 0 && col == 0)
System.out.println(star1);
if (row >= 1 && row <= 4)
System.out.println(STAR + " " + STAR);
if (row == 10 && col == 10)
System.out.println(star1);
}
}
欢迎任何关于代码活力的帮助/建议。
答案 0 :(得分:2)
String star = "*";
String space = " ";
int MAX = xxx;
for (int row = 0; row < MAX; row++) {
for (int col = 0; col < MAX; col++) {
if (row == 0 || row == MAX - 1) {
System.out.println(star);
} else if (col == 0 || col == MAX - 1) {
System.out.println(star);
} else {
System.out.println(space);
}
}
}
答案 1 :(得分:0)
看看你的嵌套循环:
for (int col = 0; col <= MAX ; col += 10) {
所以当col
为10时,你真的只是迭代一次......你可能根本就没有嵌套循环。
此外,star1
和带空格的字符串文字都有固定数量的字符,与列数明显相关。
我认为这是作业,所以我不会再提供任何暗示,但希望这会让你想到正确的思路......
答案 2 :(得分:0)
您应该通过10
变量更改两个for
循环中MAX
的3次出现,因此当用户定义其他大小时,您的for
循环将会占用他的输入而不是10
值。
答案 3 :(得分:0)
另外,请看一下你在if (row == 10 && col == 10)
所说的最后一个if语句,并考虑一下。一旦达到10行和10列,您只需要打印star1
的最终水平线,而不管MAX
的设置是什么。
答案 4 :(得分:0)
如上所述,嵌套for循环是不必要的,如果你计划将来创建更大的矩形,效率可能会很低(不是说你必须但是如果可以的话,试着远离嵌套的for循环) 。相反,只需在循环开始之前和退出之后打印star1。循环体应该足够简单。希望这会有所帮助。
答案 5 :(得分:0)
class Square
{
public static void main(String[] args)
{
String tenStars="**********";
String oneStar="*";
int count=0;
System.out.println(tenStars);
count++;
while(count<=8)
{
System.out.println(oneStar+" "+oneStar);
count++;
}
System.out.print(tenStars);
}
}
答案 6 :(得分:0)
这应该有效
public static void hallowSquare(int side)
{
int rowPos, size = side;
while (side > 0)
{
rowPos = size;
while (rowPos > 0)
{
if (size == side || side == 1 || rowPos == 1 || rowPos == size)
System.out.print("*");
else
System.out.print(" ");
rowPos--;
}
System.out.println();
side--;
}
}
答案 7 :(得分:0)
这是另一个解决方案,一个更通用的解决方案。它允许您创建一个高度为“h”且宽度为“w”的空心矩形
private static void hallowSquare(int h, int w)
{
for(int i=1; i<=h; i++)
{
for(int j=1; j<=w; j++)
{
if (j==1|| j==w || i==1 || i==h )
System.out.print("X");
else
System.out.print(" ");
}
System.out.println();
}
}
答案 8 :(得分:0)
你可以使用一个用户输入来使用这样的东西......这是有效的
public static void drawSquare(int size)
{
for(int i=1; i<size ;i++)
System.out.print("*");
System.out.println("");
for(int i=0; i<50 ;i++)
{
System.out.print("*");
for(int j =0; j<size-3; j++)
System.out.print(" ");
System.out.println("*");
}
for(int i=1; i<size ;i++)
System.out.print("*");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
drawSquare(50);
}
你应该创建一个类,把它放在你的类中并运行它...我希望这会对你有帮助....
答案 9 :(得分:0)
class Star8
{
public static void main(String[] args)
{
for(int i=1;i<=5;i++)
{
for(int j=1;j<=5;j++)
{
if(i==2||i==3||i==4 )
{
System.out.print("* *");
break;
}
else
{
System.out.print("*");
}
}
System.out.println();
}
}
}
答案 10 :(得分:0)
希望这会有所帮助,简化你的思维伴侣。考虑轴x和y,并按照该逻辑工作。在ur上创建一个嵌套循环,用于循环传递线,在每种情况下循环数 方块的大小和打印空格,嵌套循环后打印“*”。
> for (int b=0;b<ans*2-3;b++)
此嵌套循环的最大值为b,因为:
请记住,在你打印时,每个“*”都与一个空格隔开,并记住你只计算第一列和最后一列之间的空间。意思是所有空间 在x = 0和x = squareize之间,因此max b应该是这两个coords之间的空间。 其中:squareize * 2 / 2用于添加的空格 / -3 / * -3因为你省略了第一个坐标(x = 0),最后一个坐标(x =平方尺),和从前一个循环中添加了1个空格。
import java.util.Scanner;
public class AsteriksSquare {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input= new Scanner(System.in);
int ans;
System.out.print("Enter the size of the side of the square: ");
ans=input.nextInt();
String ast="*";
if (ans>0 && ans<21){
for(int i=0;i<=ans-1;i++){
System.out.print("* ");
}
System.out.println("");
for(int i=1;i<=ans-2;i++){
System.out.print("*");
for (int b=0;b<ans*2-3;b++){
System.out.print(" ");
}
System.out.println("*");
}
for(int i=1;i<=ans;i++){
System.out.print("* ");
}
}
}
}
答案 11 :(得分:0)
class square1
{
public static void main(String[] args)
{
String star = "*";
String space = " ";
int MAX = 5;
for (int row = 0; row < MAX; row++)
{
for (int col = 0; col < MAX; col++)
{
if (row == 0 || row == MAX - 1)
{
System.out.print(star);
} else if (col == 0 || col == MAX - 1)
{
System.out.print(star);
} else {
System.out.print(space);
}
}
System.out.println();
}
}
}
答案 12 :(得分:0)
这段代码可以解决问题。
package javaPackage;
public class Square {
public static void main(String [] args)
{
for (int i=0;i<=10;i++)
{
for (int j=0;j<=10;j++)
{
if(i==0||i==10){
System.out.print("x");
}
else if(j==0||j==10){
System.out.print("x");
}
else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
如果解释器看到你在第一行和最后一行(i = 0且i = 10),它将用x填充行。否则,它只会在行的开头和结尾打印一个x。
答案 13 :(得分:0)
您可以使用以下两种方法。
1)一行代码很少。
for (int i = 0; i <= 9; i++) {
if (i == 0 || i == 9) {
System.out.println("* * * *");
} else {
System.out.println("* *");
}
}
OR
2)借助两个for循环
for (int i = 0; i <= 9; i++) {
for (int j = 0; j <= 9; j++) {
if (i == 0 || i == 9) {
System.out.print("*");
} else {
if (j == 0 || j == 9) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
}
System.out.println();
}
谢谢, Stuti
答案 14 :(得分:0)
import java.util.Scanner;
class Star
{
public static void main(String...args)
{
Scanner sc = new Scanner(System.in);
System.out.print("Enter the row : ");
int row=sc.nextInt();
System.out.print("Enter the column : ");
int column=sc.nextInt();
for(int i=1;i<=column;i++)
{
System.out.print("*");
}
for(int i=row-2;i>=1;i--)
{
System.out.println();
System.out.print("*");
for(int k=1;k<=column-2;k++)
{
if(i<1)
{
break;
}
System.out.print(" ");
}
System.out.print("*");
}
System.out.println();
for(int i=1;i<=column;i++)
{
System.out.print("*");
}
}
}
答案 15 :(得分:-1)
我希望下面的代码可以提供帮助,使用非常简单的编码并获得所需的结果。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notify);
editspeak = (EditText) findViewById(R.id.editspeak);
btspeak=(Button)findViewById(R.id.bt);
// speakout();
// mydb = new DBhandler(this);
SharedPreferences preferences=getSharedPreferences(PREFS,0);
String name=preferences.getString("NAME",null);
editspeak.setText(name);
t1=new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if(status != TextToSpeech.ERROR) {
t1.setLanguage(Locale.US);
}
}
});
btspeak.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = editspeak.getText().toString();
t1.speak(text, TextToSpeech.QUEUE_FLUSH, null);
// bt.setPressed(false);
// bt.invalidate();
}
});
btspeak.performClick();
结果是: